Данный компонент содержит основные классы и определения для работы со схемой данных, применяемой в стандарном способе сериализации и хранении сущностей (см. 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, если расширения нет. |