7.2. Source code layers

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.