Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Serialization - Archives

Boost , ,

C++ Boost

Serialization

Archive Concepts


Saving Archive Concept
Loading Archive Concept
Models
Exceptions
Character Sets

Notation

In the following descriptions
  • SA is an type modeling the Saving Archive Concept.
  • sa is an instance of type SA.
  • LA is an type modeling the Loading Archive Concept.
  • la is an instance of type LA.
  • T is an Serializable Type.
  • x is an instance of type T Type.
  • u,v is a pointer to a an instance of type T.
  • count is an instance of a type that can be converted to std::size_t.

Saving Archive Concept

Associated Types

Intuitively, a type modeling this concept will generate a sequence of bytes corresponding to an arbitrary set of C++ data structures. Each type modeling the Saving Archive concept (SA) may be associated with another type modeling the Loading Archive Concept(LA). This associated type will perform the inverse operation. That is, given a sequence of bytes generated by SA, it will generate a set of C++ data structures that is equivalent to the original. The notion of equivalence is defined by the implementations of the pair of archives and the way the data are rendered serializable.

Действительные выражения

< SA::is_saving >

Возвращает повышение интегральной постоянной типа Boost MPL::mpl::bool_

< SA::is_loading >

Возвращает повышение интегральной постоянной типа Boost MPL::mpl::bool_

< sa << x
sa & x
>

Эти выражения должны выполнять точно такую же функцию. Они добавляют значение<x>вместе с другой информацией к<sa>. Эта другая информация определяется реализацией архива. Обычно эта информация является той, которая требуется соответствующим типом архива загрузки для правильного восстановления значения<x>.

Возвращает ссылку на<sa>

< sa.save_binary(u, count) >

Прилагается к архиву<size_t(count)>байтов, найденному на<u>.

< sa.register_type<T>()
sa.register_type(u)
>

Добавляет в архив информацию о классе Т. Эта информация используется для построения правильного класса, когда производный указатель загружается соответствующим типом архива загрузки. Ссылка на эту функцию члена называется «регистрация класса». Об этом подробно говорится вSpecial Considerations - Derived Pointers. Второй синтаксис включается, чтобы разрешить вызов этой функции несоответствующим компиляторам, когда<sa>является аргументом шаблона. Для получения дополнительной информации см.Синтаксис вызова шаблона

< sa.get_library_version() >

Возвращает неподписанное целое число, содержащее текущий номер версии библиотеки сериализации. Это число будет увеличиваться каждый раз, когда библиотека изменяется таким образом, что сериализация может быть изменена для определенного типа. Например, предположим, что тип, используемый для подсчета членов коллекции, изменяется. Код, который загружает коллекции, может быть обусловлен библиотечной версией, чтобы убедиться, что библиотеки, созданные предыдущими версиями библиотеки, все еще могут быть прочитаны.

< sa.get_helper<Helper>(void * const helper_instance_id = 0) >

См.<la.get_helper<Helper>(void * const helper_instance_id = 0)>ниже.

Загрузка Archive Concept

Связанные типы

Каждая модель этой концепции предполагает существование соответствующего типа моделирования. Целью экземпляра этой концепции является преобразование последовательности байтов, генерируемых этим соответствующим типом, в набор структур данных C++, эквивалентных оригиналу.

Действительные выражения

< LA::is_saving >

Возвращает повышение интегральной постоянной типа Boost MPL::mpl::bool_

< LA::is_loading >

Возвращает повышение интегральной постоянной типа Boost MPL::mpl::bool_

< la >> x
la & x
>

Эти выражения должны выполнять точно такую же функцию. Наборы<x>на величину, извлеченную из<la>.

Возвращает ссылку на<la>

< la.load_binary(u, count) >

Возвращение<la><size_t(count)>байт и сохраняет их в памяти начиная с<u>

< la.register_type<T>()
la.register_type(u)
>

Получает информацию о классе Т из архива. Эта информация используется для построения правильного класса при загрузке указателя на производный класс, не упомянутый в программе по имени. Ссылка на эту функцию члена называется «регистрация класса». Об этом подробно говорится вSpecial Considerations - Derived Pointers. Второй синтаксис включается, чтобы разрешить вызов этой функции несоответствующим компиляторам, когда<la>является аргументом шаблона. Для получения дополнительной информации см.Синтаксис вызова шаблона

< la.get_library_version() >

Возвращает неподписанное целое число, содержащее номер версии библиотеки сериализации, создавшей архив. Это число будет увеличиваться каждый раз, когда библиотека изменяется таким образом, что сериализация может быть изменена для определенного типа. Например, предположим, что тип, используемый для подсчета членов коллекции, изменяется. Код, который загружает коллекции, может быть обусловлен библиотечной версией, чтобы убедиться, что библиотеки, созданные предыдущими версиями библиотеки, все еще могут быть прочитаны.

< la.get_helper<Helper>(void * const helper_instance_id) >

Некоторые другие несериализируемые типы могут быть сериализованы путем включения вспомогательного объекта. Знаковым примером этого является shared_ptr, которому нужен этот вспомогательный объект для отслеживания ранее загруженных экземпляров shared_ptr, чтобы они могли быть «сопоставлены» с впоследствии загруженными. Впервые<la.get_helper<Helper>(void * const helper_instance_id)>вызывается для данного помощника_instance_id,<Helper>, создается объект по умолчанию<Helper>, прикрепляется к<la>и ссылка на него возвращается. Последующие вызовы<la.get_helper<Helper>(void * const helper_instance_id)>с тем же значением id возвращают ссылку на ранее построенный объект. Все предметы, созданные таким образом, уничтожаются в течение<la>времени разрушения. Назначение предметов-помощников обсуждается вОсобых соображениях — Поддержка помощников.

< la.reset_object_address(v, u) >

Сообщает архиву, что объект первоначально по адресу u был перемещен по адресу v.

Когда объект загружается во временную переменную и затем перемещается в другое место, эта функция должна быть вызвана, чтобы сообщить этот факт. Это позволяет архиву правильно осуществлять отслеживание объектов. Отслеживание объектов необходимо для правильной реализации сериализации указателей на экземпляры производных классов.

< la.delete_created_pointers() >

Исключает все объекты, созданные загрузкой указателей. Это может быть использовано, чтобы избежать утечек памяти, которые могли бы произойти в противном случае, если указатели загружаются, и загрузка архива сталкивается с исключением.
Существуют архивы, основанные на текстовых, двоичных и XML форматах файлов, но все они имеют вышеуказанный интерфейс. Учитывая, что все архивы представляют один и тот же публичный интерфейс, спецификация сериализации точно такая же для всех архивов. Архивные классы имеют других членов, не упомянутых здесь. Однако они связаны с внутренним функционированием библиотеки и не предназначены для вызова пользователями архива. Реализация новых архивов обсуждается в. Новые архивы - реализация.

Существование<<<>и<>>>предполагает связь между архивами и потоками C++ i/o.Архивы не являются C++ i/o потоками. Все архивы, включенные в эту систему, принимают поток в качестве аргумента в конструкторе, и этот поток используется для вывода или ввода. Однако это не является требованием функций сериализации или интерфейса архива. Просто оказывается, что написанные до сих пор архивы сочли полезным основывать свою реализацию на потоках.

Архивные модели

Эта библиотека включает в себя различные реализации концепции архива. Архив определяется двумя дополнительными классами. Один предназначен для сохранения данных, а другой для их загрузки. Эта библиотека включает в себя ряд реализаций архивов, которые «готовы к работе» для наиболее распространенных требований. Эти классы реализуют концепцию архива для различных форматов данных. Они могут быть использованы «как есть» или как основа для разработки собственного типа архива. Архив определяется двумя дополнительными классами. Один предназначен для сохранения данных, а другой для их загрузки. Для вызова сериализации с использованием одного из этих архивов один или более из следующих файлов заголовка должны быть включены в модуль кода, содержащий код сериализации.
<
// a portable text archive
boost::archive::text_oarchive// saving
boost::archive::text_iarchive// loading
// a portable text archive using a wide character stream
boost::archive::text_woarchive// saving
boost::archive::text_wiarchive// loading
// a portable XML archive
boost::archive::xml_oarchive// saving
boost::archive::xml_iarchive// loading
// a portable XML archive which uses wide characters - use for utf-8 output
boost::archive::xml_woarchive// saving
boost::archive::xml_wiarchive// loading
// a non-portable native binary archive
boost::archive::binary_oarchive// saving
boost::archive::binary_iarchive// loading

Статья Serialization - Archives раздела может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-07-05 12:06:02/0.0054068565368652/0