/*!
\page oess_1__what_is_objessty	oess_1: Что такое ObjESSty

\section oess_1__what_is_objessty__into Введение

ObjESSty (Object Entity Serialization & Stability) -- это инструмент для
сериализации и долговременного хранения сложных C++ объектов.  ObjESSty
включает в себя средства для сериализации/ десериализации C++ объектов в
двоичное, платформо-независимое представление.  Так же в состав ObjESSty входит
небольшая, встраиваемая система долговременного хранения. Это не БД в
традиционном смысле этого слова. Более правильно было бы называть эту БД
восстановочной.

Основная идея в ObjESSty -- это необходимость описания схемы данных на
специальном языке и объявление сериализуемых типов производными от специального
класса oess_1::stdsn::serializable_t. Все остальное -- задача ObjESSty. По
описанию схемы данных автоматически генерируется вспомогательный код, который и
выполняет сериализацию/десериализацию.

\section oess_1__what_is_objessty__history История

История ObjESSty началась в 2002 году, когда для нескольких проектов
потребовался простой инструмент для сохранения объектно-ориентированной
восстановочной информации. Тогда была начата реализация простого объектного
хранилища. Главной идеей было то, что схема данных (т.е. описание
структуры сохраняемых в хранилище объектов) должна была описываться отдельно
на специальном языке описания данных -- DDL. Это должно было позволить:
- избежать написания кода по сериализации/десериализации объектов вручную.
Вместо этого код генерируется автоматически по DDL-описанию;
- создать инструменты, которые позволят автоматически преобразовывать
находящиеся в хранилище данные при изменении схемы данных.

Так же предполагалось, что на момент создания 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). Более того, со временем оказалось, что этот инструемент может
широко использоваться и без восстановочной БД.


\section oess_1__what_is_objessty__current_state	Текущее состояние

На данном этапе ObjESSty является проектом, предоставляющим следующие
инструементы.

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).
	Поддерживаются одноуровневые (без вложенных) транзакции с возможностью
	отката. В восстановочной БД сохраняются сериализуемые объекты.
	Для объектов поддерживаются операции создания в БД, загрузки из БД,
	обновления в БД и удаления из БД. При обновлении объект может изменить
	свой размер. Средств поиска в БД или индексации содержимого БД нет.

*/
