![]() |
PIP 5.6.1
Platform-Independent Primitives
|
Класс для бинарной де/сериализации. Подробнее...
#include <pichunkstream.h>
Классы | |
| struct | Chunk |
| Вложенный шаблонный структура для данных чанка Подробнее... | |
| struct | ChunkConst |
| Вложенный шаблонный структура для константных данных чанка Подробнее... | |
Открытые типы | |
| enum | Version { Version_1 , Version_2 = 2 } |
| Версия хранения данных. Подробнее... | |
Открытые члены | |
| PIChunkStream (const PIByteArray &data) | |
| Создает поток на чтение из "data". | |
| PIChunkStream (PIByteArray *data=0, Version v=Version_2) | |
| Создает поток на чтение или запись из/в "data", или пустой поток на запись если "data" = 0. | |
| PIChunkStream (Version v) | |
| Создает пустой поток на запись с версией "v". | |
| ~PIChunkStream () | |
| Деструктор | |
| template<typename T > | |
| PIChunkStream & | add (int id, const T &data) |
| Добавляет в этот поток чанк с ID "id" и значением "data". Подробнее... | |
| template<typename T > | |
| bool | extract (PIBinaryStream< T > &stream, bool read_all=false) |
| Извлекает PIByteArray из "stream" и инициализирует им поток. Если указан "read_all", то вызывает readAll() после инициализации. Возвращает если ли данные для чтения. Подробнее... | |
| void | setSource (const PIByteArray &data) |
| Устанавливает исходный буфер для чтения из "data". | |
| void | setSource (PIByteArray *data) |
| Устанавливает исходный буфер для чтения или записи из/в "data", или пустой поток на запись если "data" = 0. | |
| PIByteArray | data () const |
| Возвращает внутренний буфер с записанными данными | |
| bool | atEnd () const |
| Возвращает достигнут ли конец потока | |
| Version | version () const |
| Возвращает версию потока | |
| int | read () |
| Читает один чанк из потока и возвращает его ID. Подробнее... | |
| void | readAll () |
| Читает все чанки из потока. Данный метод лишь индексирует данные Подробнее... | |
| int | getID () |
| Возвращает ID последнего прочитанного чанка Подробнее... | |
| template<typename T > | |
| T | getData () const |
| Возвращает значение последнего прочитанного чанка Подробнее... | |
| template<typename T > | |
| T | getData (int id) const |
| Возвращает значение чанка с ID "id". Подробнее... | |
| template<typename T > | |
| void | get (T &v) const |
| Записывает значение последнего прочитанного чанка в "v". Подробнее... | |
| template<typename T > | |
| const PIChunkStream & | get (int id, T &v) const |
| Записывает значение чанка с ID "id" в "v". Подробнее... | |
| template<typename T > | |
| PIChunkStream & | set (int id, const T &v) |
| Заменяет значение чанка с ID "id" на "v". Подробнее... | |
Открытые статические члены | |
| template<typename T > | |
| static ChunkConst< T > | chunk (int id, const T &data) |
| Возвращает чанк с ID "id" и значением "data" для записи в поток Подробнее... | |
Класс для бинарной де/сериализации.
PIChunkStream обеспечивает бинарный поток с разметкой для чтения и записи структурированных данных-чанков с ID.
Этот класс предоставляет очень удобный механизм для сохранения и извлечения значений в/из PIByteArray. Главным плюсом является то, что данные не будут зависеть от порядка и наличия значений.
PIChunkStream работает с элементами под названием "чанк". Чанк имеет ID, размер и значение, и может быть записан или прочитан в/из PIChunkStream с помощью операторов << и >>.
Для создания потока на запись используется любой не-умолчальный конструктор. Пустой конструктор создает внутренний буфер, который можно получить с помощью метода data(). Непустой конструктор работает с переданным байтовым массивом.
Для чтения чанков из байтового массива используется метод read(), который возвращает ID прочитанного чанка. Получить значение этого чанка далее можно с помощью методов getData() или get(), но тип значения должен быть известен. Читать из потока можно пока метод atEnd() возвращает ложь.
Использование простого оператора и каскадная сериализация:
Подготовка своей структуры для работы с PIChunkStream:
Старый стиль использования PIChunkStream:
Самое быстрое чтение из PIChunkStream:
Следующий код показывает, как сериализовать свою структуру в PIChunkStream:
... и десериализовать:
|
inlinestatic |
Возвращает чанк с ID "id" и значением "data" для записи в поток
|
inline |
Добавляет в этот поток чанк с ID "id" и значением "data".
|
inline |
| int PIChunkStream::read | ( | ) |
| void PIChunkStream::readAll | ( | ) |
Читает все чанки из потока. Данный метод лишь индексирует данные
Эта функция индексирует входные данные для возможности случайного доступа через getData(int id) и get(int id, T & v)
|
inline |
Возвращает ID последнего прочитанного чанка
Возвращает ID последнего чанка, прочитанного методом read()
|
inline |
Возвращает значение последнего прочитанного чанка
|
inline |
Возвращает значение чанка с ID "id".
|
inline |
Записывает значение последнего прочитанного чанка в "v".
|
inline |
Записывает значение чанка с ID "id" в "v".
|
inline |
Заменяет значение чанка с ID "id" на "v".