2016-11-24 3 views
1

Die Dokumentation sagt über original_order:original_order und Arrays in FlatBuffers

„original_order (auf einem Tisch): da Elemente in einer Tabelle nicht in einer bestimmten Reihenfolge gespeichert werden müssen, werden sie oft für Raum optimiert durch Sortieren sie auf Größe. Dieses Attribut verhindert, dass dies geschieht. "

Ich bin jetzt ein bisschen verwirrt. Ich hielt FlatBuffers-Tabellen für ähnlich wie Arrays in C++, und in meinem Code sah ich kein Problem. Zum Beispiel definiere ich eine LineString-Geometrie wie diese:

table Vec2List { 
    p:[Vec2]; 
} 

table Linestring { 
    points:Vec2List; 
} 

Das funktioniert. Allerdings ist es erforderlich, original_order zu deklarieren?

Quelle: https://google.github.io/flatbuffers/md__schemas.html

+0

Was hat diese Frage mit C++ zu tun? –

+0

Es ist in C++ - Code (Structs und Getter/Setter) kompiliert, wobei oben definierte Tabellen als Arrays in den C++ - Strukturdateien behandelt werden sollten. – benjist

Antwort

2

Sie nicht original_order brauchen. original_order wirkt sich auf die Reihenfolge der Felder in einem table. Ihre Tabellen haben nur ein Feld, also würde es sowieso nichts bewirken. Vektoren sind niemals betroffen. Ich habe vergessen, warum wir diese Flagge überhaupt haben, unter normalen Umständen hat das keinen Zweck.

+0

Danke für die Klarstellung. Ich vermutete schon, dass es mit der Ausrichtung oder etwas Ähnlichem zu tun hat, aber dachte "Elemente in einer Tabelle" sind Objektinstanzen einer Struktur und nicht Felder davon. Führt die Feldneuordnung nicht zu unerwartetem Verhalten, weil in der Dokumentation auch angegeben wird, dass Felder am Ende für neue Versionen eines Schemas hinzugefügt werden sollen? Führt das Reorganisieren von Feldern dann nicht zu Problemen, wenn "Leser" einer früheren Schemaversion versuchen, auf die Struktur zuzugreifen? – benjist

+0

Die Reihenfolge der Felder in einem Schema (oder ihren IDs) spiegelt die Reihenfolge der Felder in einer Vtable in der Binärdarstellung wider. Diese Reihenfolge muss in der Tat konsistent bleiben. Die vtable zeigt dann jedoch auf die tatsächlichen Felder, die in dem Objekt in beliebiger Reihenfolge serialisiert werden können. (Dies gilt für Tabellen .. Strukturen haben keine Vtable und können nie erweitert oder neu geordnet werden). – Aardappel