Данный компонент содержит основные классы и определения для работы со схемой данных, применяемой в стандарном способе сериализации и хранении сущностей (см. oess_1::stdsn).
Под схемой данных понимается совокупность сериализуемых типов. Получить описание схемы данных можно двумя способами: в результате разбора описания (см. функцию parse_text()), сделанного на языке DDL, и в результате ручного заполнения объектов-описателей схемы данных в программе (см. классы scheme_t, attr_editor_t, type_editor_t, cpp_mapping_editor_t). Функция parse_text() используется утилитой oess_cpp_serializer для разбора указанных ей ddl-файлов. В свою очередь, функция parse_text() использует классы-редакторы для того, чтобы сформировать описание схемы данных в виде объекта типа scheme_t. Например, в таком виде:
try { scheme_auto_ptr_t scheme_ptr; { type_editor_auto_ptr_t type_editor_ptr( *scheme_ptr, "my_type_t" ); type_editor_ptr->cpp_mapping().set_name( "my_prj::my_type_t" ); { attr_editor_auto_ptr_t attr_editor_ptr( *type_editor_ptr, "m_names", "std::string" ); attr_editor_ptr->make_stl_set_kind(); attr_editor_ptr.commit(); } type_editor_ptr.commit(); } } catch( oess_1::impl::ex_t & x ) { // Oops!? std::cerr << x.query_err_code() << std::endl; }
В этом примере создается схема, которая соответствует следующему DDL-описанию:
{type my_type_t
{cpp-mapping {name my_prj::my_type_t}}
{attr m_names {stl-set} {of std::string}}
}
Представленную в виде объекта scheme_t схему данных можно сохранить в виде текстового DDL-представления (oess_1::scheme::impl::make_type_representation()). А так же по объекту scheme_t компонент oess_1::scheme генерирует вспомогательный код (oess_1::scheme::impl::generate_cpp_serializer()). Обе эти функции определены в частном пространстве имен, т.к. они предназначены для использования внутри ObjESSty и их интерфейс, и поведение могут изменяться от версии к версии.
Описание языка DDL дано в oess_1: Язык ObjESSty DDL.
Классы | |
| class | attr_editor_t |
| Интерфейс редактора атрибута. Подробнее... | |
| class | cpp_mapping_editor_t |
| Интерфейс редактора отображения типа в C++. Подробнее... | |
| class | type_editor_t |
| Интерфейс редактора типа. Подробнее... | |
| class | scheme_t |
| Интерфейс хранилища схемы данных. Подробнее... | |
| class | pseudo_type_list_t |
| class | scheme_auto_ptr_t |
| class | attr_editor_auto_ptr_t |
| class | type_editor_auto_ptr_t |
| class | base_t |
| Интерфейс описания базового типа. Подробнее... | |
| class | cpp_mapping_t |
| Интерфейс описания отображения типа в C++. Подробнее... | |
| class | attr_cont_kind_t |
| Интерфейс описания детализации атрибута. Подробнее... | |
| class | attr_type_t |
| Интерфейс описания типа атрибута. Подробнее... | |
| class | attr_present_if_t |
| Интерфейс описания предиката сериализации опционального атрибута. Подробнее... | |
| class | attr_default_t |
| Интерфейс значения атрибута по-умолчанию. Подробнее... | |
| class | attr_t |
| Интейфейс описания атрибута. Подробнее... | |
| class | type_t |
| Интерфейс описания типа. Подробнее... | |
| class | pseudo_base_list_t |
| class | pseudo_attr_list_t |
| class | pseudo_extension_attr_list_t |
| Псевдо-список для предоставления доступа к списку атрибутов расширения типа в стиле STL итераторов. Подробнее... | |
| class | single_obj_kind_t |
| Детализация описания атрибута, который является простым одиночным объектом. Подробнее... | |
| class | stl_vector_kind_t |
| Детализация описания атрибута, который является std::vector. Подробнее... | |
| class | stl_list_kind_t |
| Детализация описания атрибута, который является std::list. Подробнее... | |
| class | stl_deque_kind_t |
| Детализация описания атрибута, который является std::deque. Подробнее... | |
| class | stl_set_kind_t |
| Детализация описания атрибута, который является std::set. Подробнее... | |
| class | stl_multiset_kind_t |
| Детализация описания атрибута, который является std::multiset. Подробнее... | |
| class | stl_map_base_kind_t |
| Базовый интерфейс для описания атрибутов, которые являются либо std::map, либо std::map. Подробнее... | |
| class | stl_map_kind_t |
| Детализация описания атрибута, который является std::map. Подробнее... | |
| class | stl_multimap_kind_t |
| Детализация описания атрибута, который является std::multimap. Подробнее... | |
| class | fixed_vector_kind_t |
| Детализация описания атрибута, который является вектором фиксированного размера. Подробнее... | |
| class | type_kind_processor_t |
| Базовый класс для обработчиков разновидностей типа. Подробнее... | |
| class | cont_kind_processor_t |
| Базовый класс для обработчиков разновидностей контейнеров. Подробнее... | |
Пространства имен | |
| namespace | err |
| Коды ошибок компонента scheme. | |
| namespace | impl |
| Детали реализации. | |
Функции | |
| builtin_char () | |
| builtin_schar () | |
| builtin_uchar () | |
| builtin_short () | |
| builtin_ushort () | |
| builtin_int () | |
| builtin_uint () | |
| builtin_single () | |
| builtin_double () | |
| builtin_std_string () | |
| builtin_ent_id () | |
| builtin_stdsn_serializable () | |
| parse_text (std::istream &in, scheme_t &sch, std::string &error_desc, const char *stream_name=0) | |
| void | make_bases (type_editor_t &editor, const cls_2::tag_vector_of_tags_t< impl::tag_base_t > &tags) |
| void | process_extension_of_superclass (type_editor_t &editor, const impl::tag_type_t &type) |
| Обработка наследования в режиме subclassing_by_extension. | |
| static void | process_attr_default (attr_editor_auto_ptr_t &editor_ptr, const impl::tag_attr_default_t &attr_default) |
| Обработка значения атрибута по-умолчанию. | |
| void | make_attrs (type_editor_t &type_editor, const cls_2::tag_vector_of_tags_t< impl::tag_attr_t > &tags) |
| void | make_extension (type_editor_t &type_editor, const impl::tag_extension_t *extension) |
| Обработка расширений. | |
| void | make_cpp_mapping (type_editor_t &type_editor, const impl::tag_cpp_mapping_t &tag) |
| void | make_scheme (scheme_t &sch, const cls_2::tag_vector_of_tags_t< impl::tag_type_t > &tags) |
| builtin_char | ( | ) |
| builtin_schar | ( | ) |
| builtin_uchar | ( | ) |
| builtin_short | ( | ) |
| builtin_ushort | ( | ) |
| builtin_int | ( | ) |
| builtin_uint | ( | ) |
| builtin_single | ( | ) |
| builtin_double | ( | ) |
| builtin_std_string | ( | ) |
| builtin_ent_id | ( | ) |
| builtin_stdsn_serializable | ( | ) |
| parse_text | ( | std::istream & | in, | |
| scheme_t & | sch, | |||
| std::string & | error_desc, | |||
| const char * | stream_name = 0 | |||
| ) |
Извлечение описания схемы из указанного входного потока. При возникновении ошибок возвращается не нулевое значение, а в error_desc помещается описание ошибки.
| in | Входной поток, который нужно разобрать. |
| sch | Схема, куда необходимо помещать описания типов. |
| error_desc | Буфер для приема описания ошибки. |
| stream_name | Необязательное имя потока. При возникновении ошибок это имя, вместе с номером строки будет отображаться в описании ошибки. |
| void oess_1::scheme::process_extension_of_superclass | ( | type_editor_t & | editor, | |
| const impl::tag_type_t & | type | |||
| ) |
Обработка наследования в режиме subclassing_by_extension.
| static void oess_1::scheme::process_attr_default | ( | attr_editor_auto_ptr_t & | editor_ptr, | |
| const impl::tag_attr_default_t & | attr_default | |||
| ) | [static] |
Обработка значения атрибута по-умолчанию.
| editor_ptr | Атрибут, которому нужно назначать значение по-умолчанию. |
| attr_default | Тег, в котором может содержаться описание значения по-умолчанию. |
| void oess_1::scheme::make_extension | ( | type_editor_t & | type_editor, | |
| const impl::tag_extension_t * | extension | |||
| ) |
Обработка расширений.
| extension | Может быть 0, если расширения нет. |
1.4.7