Основная идея в ObjESSty -- это необходимость описания схемы данных на специальном языке и объявление сериализуемых типов производными от специального класса oess_1::stdsn::serializable_t. Все остальное -- задача ObjESSty. По описанию схемы данных автоматически генерируется вспомогательный код, который и выполняет сериализацию/десериализацию.
Так же предполагалось, что на момент создания ObjESSty, восстановочная БД должна быть встраиваемой, но со временем возможно развитие ObjESSty до уровня клиент-серверной БД. Поэтому, БД ObjESSty проектировалась так, чтобы в ней были компоненты, предназначенные только для клиентов БД (см.пространство имен oess_1::db::cln), и компонент, предназначенные только для серверной части БД (см.пространства имен oess_1::db::impl::db_content, oess_1::db::storage, oess_1::db::site).
Интересно, что первоначально средства сериализации данных входили в состав "серверной" части БД. Т.е. казалось, что их можно использовать только для сохранения объектов в БД. А взаимодействие между клиентом и сервером планировалось делать через вручную запрограммированные преобразования запросов/ответов в двоичный поток. Но вовремя удалось заметить, что получившийся инструмент по сериализации сложных C++ объектов можно применять и для сериализации запросов/ответов между клиентами и сервером. Тогда этот инструемент был выделен в отдельные пространства имен (oess_1::stdsn, oess_1::scheme). Более того, со временем оказалось, что этот инструемент может широко использоваться и без восстановочной БД.
1. Средства преобразования данных из двоичного представления конкретной аппаратной архитектуры (big-endian, little-endian) в двоичное big-endian представление (oess_1::io).
2. Средства для сериализации/десериализации сложных C++ объектов (oess_1::stdsn, oess_1::scheme). Поддерживается одиночное и множественное наследование сериализуемых типов, атрибуты типов char (signed, unsigned), short (signed, unsigned), int (signed, unsigned), float, double, std::string. Так же поддерживаются одномерные вектора примитивных или сериализуемых типов. Поддерживаются STL-контейнеры vector, list, deque, set, multiset, map, multimap в качестве типов атрибутов (элементами контейнера должны быть примитивные или сериализуемые типы). Сериализуемые атрибуты могут быть так же указателями на сериализуемые типы.
3. Средства долговременного хранения данных в восстановочной БД (oess_1::db). Поддерживаются одноуровневые (без вложенных) транзакции с возможностью отката. В восстановочной БД сохраняются сериализуемые объекты. Для объектов поддерживаются операции создания в БД, загрузки из БД, обновления в БД и удаления из БД. При обновлении объект может изменить свой размер. Средств поиска в БД или индексации содержимого БД нет.