oess_1.4.0. Сохранение размерностей в потоках ввода/вывода.

В самых первых версиях ObjESSty было принято не очень удачное решение о том, как сохранять размерности контейнеров и размеры объектов в двоичных потоках oess_1::io. Для хранения размерности в поток всегда помещалось 32-х битовое значение. Даже в случаях, когда в контейнере не было ни одного элемента, либо всего несколько элементов (т.к. когда для сохранения размерности было достаточно одного байта).

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

Однако, для новых задач и, возможно, новых типов сериализации, следует учесть данную ошибку и не повторять ее впредь. Для этого в oess_1::defs определен новый тип oess_1::defs::quantity_t для которого будут реализовываться эффективные способы сериализации.

Формат хранения в двоичном потоке

Потоки oess_1::io::ibinstream_t и oess_1::io::obinstream_t используют для представления oess_1::defs::quantity_t способ из ASN1 BER:

Так, если размерность равна 8, то она будет сохраненена в виде одного байта 0x08. Если размерность равна 127, то она будет сохранение в виде одного байта: 0x7f. Значение 128 будет сохранено как 0x81 0x80. Значение 256 -- 0x82 0x01 0x00.

Ограничения

Текущая реализация oess_1::io::ibinstream_t не может десериализовать quantity_t для хранения которого используется больше четырех байт (без байта длины представления), поскольку для хранения размерности используется 32-х битовое значение.

При обнаружении такого большого значения quantity_t порождается исключение oess_1::physic_ex_t с кодом ошибки oess_1::io::err::c_quantity_image_too_long.


Документация по ObjESSty. Последние изменения: Fri Oct 13 18:35:37 2006. Создано системой  doxygen 1.4.7
Hosted by uCoz