Структура массивов в flatbuffer? - PullRequest
0 голосов
/ 18 мая 2018

Допустим, у меня есть следующий IDL-файл flatbuffer:

table Monster {
  mana:short = 150;
  inventory:[ubyte];  // Vector of scalars.
}

И я хочу сериализовать массив из 2 Monster объектов в буфере.

Видимо, это возможносоздать следующую схему памяти для общего буфера при сериализации данных:

ArrayOfUBytesForInventoryOfMonster1|ArrayOfUBytesForInventoryOfMonster2|Monster1Data|Monster2Data

. Это означает, что теперь все поля inventory находятся в смежной области памяти.

Однако это такМожно также сделать это в поле mana?т.е. я хочу сериализовать свои объекты с этим представлением в памяти:

ArrayOfUBytesForInventoryOfMonster1|ArrayOfUBytesForInventoryOfMonster2|Monster1ManaValue|Monster2ManaValue|Monster1Data|Monster2Data.

, что приводит к преобразованию всех значений "маны" в необработанный массив в памяти.

Возможно лисделать это с Flatbuffers?Похоже, что поля могут быть сериализованы только после запуска самого объекта

1 Ответ

0 голосов
/ 18 мая 2018

Ни один из них не будет работать так, как вы указали.Скалярные поля, такие как mana, всегда встроены в таблицу, поэтому никогда не будут смежными с аналогичными полями.Даже такие векторы, как inventory, имеют префикс поля размера, поэтому их элементы не являются смежными, даже если они могут быть смежными, поскольку они не являются встроенными.

Если вы хотите непрерывные данные, вам явно придетсявыписать один вектор таких значений.

...