FlatBuffers и значение NULL - PullRequest
       24

FlatBuffers и значение NULL

0 голосов
/ 16 декабря 2018

Что такое канонический способ хранения значения NULL в FlatBuffers?

У меня есть

ExpirationDate     *int64

Я понимаю, почему FlatBuffers не определяет NULL.Но я не понимаю, как правильно с этим справиться.Должен ли я иметь дополнительное поле bool или сделать значение массивом?

ExpirationDate     [int64]

против

ExpirationDate     int64
ExpirationDateNull bool

Для таблиц можно использовать также union.

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

Третий вариант - struct NullableInt64 { i:int64 }, а затем в таблице есть поле типа NullableInt64.Если этого поля нет, функция доступа вернет NULL.И поскольку это структура, она будет занимать то же пространство на проводе, что и голый int64 (они оба 8 байтов и хранятся встроенными в родительском объекте).

0 голосов
/ 16 декабря 2018

Для хранения значений, таких как int32 / int64 и т. Д. Вы можете напрямую хранить скаляры в таблице.

Но в вашем случае у вас есть косвенное обращение, которое может быть имитировано косвенным воздействием, созданным не-скалярами вflatbuffers.

Нескалярами являются struct, array и table.

Так что вы можете попробовать:

Struct IntPtr 
{ 
val:int64
} 

Table Expiration 
{ 
ExpirationDate:IntPtr; 
}
...