The serialization library is built in a layered manner on top of
several different libraries such as a database backend library
(SQLite3), a type traits and
type list library (std::tr1, Loki or
boost), and
a simple debug library (printf). But rather than
directly calling these third party libraries, the library uses a
portable "insulation" layer (you can think of it as an extra level of
compile-time indirection) which allows clients, for example, to select
which backend to use in the case of the type traits library. In future,
other database backend engines could also be supported using the same
architecture. These "insulation layers" are in the db_access.hpp, tmp.hpp, and debug.h files.
[ library client code - ie, your application - C++ ] | | uses V [ serialization library - C++ - ccs/serialization.hpp/cpp ] | | uses V [ db_access library - C++ - ccs/db_access.hpp and ccs/db_access_sqlite3.hpp/cpp ] | | uses V [ SQLite3 library - C - sqlite3.c ] | | saves and loads data in V [ SQLite3 database file - file system ]
Typically, your code only interacts with the code in the
serialization layer (which is in the ccs::serialization
namespace) - you will usually not need to directly call anything in the
lower levels (but you may need to step through these levels to debug
problems that you encounter).
The serialization library layer also uses the type traits library
located in tmp.hpp and may
support third party libraries based on the user-defined availability
macros in config.hpp.