private static byte[] BuildHeader(ulong count, GeometryType geometryType, byte dimensions, IList <ColumnMeta> columns, PackedHilbertRTree index) { var builder = new FlatBufferBuilder(4096); VectorOffset?columnsOffset = null; if (columns != null) { var columnsArray = columns .Select(c => Column.CreateColumn(builder, builder.CreateString(c.Name), c.Type)) .ToArray(); columnsOffset = Column.CreateSortedVectorOfColumn(builder, columnsArray); } Header.StartHeader(builder); Header.AddGeometryType(builder, geometryType); Header.AddDimensions(builder, dimensions); if (columnsOffset.HasValue) { Header.AddColumns(builder, columnsOffset.Value); } if (index != null) { Header.AddIndexNodeSize(builder, 16); } Header.AddFeaturesCount(builder, count); var offset = Header.EndHeader(builder); builder.FinishSizePrefixed(offset.Value); return(builder.DataBuffer.ToSizedArray()); }
public void TestBunchOfBoolsSizePrefixed() { var builder = new FlatBufferBuilder(1); builder.StartObject(8); for (var i = 0; i < 8; i++) { builder.AddBool(i, true, false); } var off = builder.EndObject(); builder.FinishSizePrefixed(off); byte[] padded = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // padding to 64 bytes 36, 0, 0, 0, // size prefix 24, 0, 0, 0, // root of table, pointing to vtable offset (obj0) 20, 0, // vtable bytes 12, 0, // object length 11, 0, // start of value 0 10, 0, // start of value 1 9, 0, // start of value 2 8, 0, // start of value 3 7, 0, // start of value 4 6, 0, // start of value 5 5, 0, // start of value 6 4, 0, // start of value 7 20, 0, 0, 0, // int32 offset for start of vtable 1, 1, 1, 1, // values 1, 1, 1, 1, }; Assert.ArrayEqual(padded, builder.DataBuffer.ToFullArray()); // no padding in sized array byte[] unpadded = new byte[padded.Length - 24]; Buffer.BlockCopy(padded, 24, unpadded, 0, unpadded.Length); Assert.ArrayEqual(unpadded, builder.DataBuffer.ToSizedArray()); }
private static byte[] BuildHeader(ulong count, ulong featuresSize, IList <LayerMeta> layers, PackedHilbertRTree index) { // TODO: size might not be enough, need to be adaptive var builder = new FlatBufferBuilder(1024); // TODO: can be different per layer... var columns = layers.First().Columns; VectorOffset?columnsOffset = null; if (columns != null) { var columnsArray = columns .Select(c => Column.CreateColumn(builder, builder.CreateString(c.Name), c.Type)) .ToArray(); columnsOffset = Column.CreateSortedVectorOfColumn(builder, columnsArray); } var layerOffsets = layers .Select(l => { Layer.StartLayer(builder); if (columnsOffset.HasValue) { Layer.AddColumns(builder, columnsOffset.Value); } Layer.AddGeometryType(builder, l.GeometryType); var layerOffset = Layer.EndLayer(builder); return(layerOffset); }).ToArray(); var layersOffset = Header.CreateLayersVector(builder, layerOffsets); Header.StartHeader(builder); Header.AddLayers(builder, layersOffset); if (index != null) { Header.AddIndexNodesCount(builder, index.NumNodes); } Header.AddFeaturesCount(builder, count); Header.AddFeaturesSize(builder, featuresSize); var offset = Header.EndHeader(builder); builder.FinishSizePrefixed(offset.Value); return(builder.DataBuffer.ToSizedArray()); }
public static void FinishSizePrefixedunitconfigTBBuffer(FlatBufferBuilder builder, Offset <fb.unitconfigTB> offset) { builder.FinishSizePrefixed(offset.Value); }
public static void FinishSizePrefixedDataBaseBuffer(FlatBufferBuilder builder, Offset <DataBase> offset) { builder.FinishSizePrefixed(offset.Value, "DATA"); }
public static void FinishSizePrefixedLineItemBuffer(FlatBufferBuilder builder, Offset <KdSoft.Lmdb.Tests.fbs.LineItem> offset) { builder.FinishSizePrefixed(offset.Value); }
public static void FinishSizePrefixedScalarStuffBuffer(FlatBufferBuilder builder, Offset <optional_scalars.ScalarStuff> offset) { builder.FinishSizePrefixed(offset.Value, "NULL"); }
public static void FinishSizePrefixedFlatArrayBuffer(FlatBufferBuilder builder, Offset <FlatArray> offset) { builder.FinishSizePrefixed(offset.Value); }
public static void FinishSizePrefixedInputBuffer(FlatBufferBuilder builder, Offset <Upzp.PlayerInput.Input> offset) { builder.FinishSizePrefixed(offset.Value); }
public static void FinishSizePrefixedMonsterExtraBuffer(FlatBufferBuilder builder, Offset <MyGame.MonsterExtra> offset) { builder.FinishSizePrefixed(offset.Value, "MONE"); }
public static void FinishSizePrefixedNestHoleDistributionEncounter8ArchiveBuffer(FlatBufferBuilder builder, Offset <PKHeX_Raid_Plugin.NestHoleDistributionEncounter8Archive> offset) { builder.FinishSizePrefixed(offset.Value); }
public static void FinishSizePrefixedOnly4TestTableBuffer(FlatBufferBuilder builder, Offset <Only4TestTable> offset) { builder.FinishSizePrefixed(offset.Value); }
public static void FinishSizePrefixedcskilldataTBBuffer(FlatBufferBuilder builder, Offset <fb.cskilldataTB> offset) { builder.FinishSizePrefixed(offset.Value); }
public static void FinishSizePrefixedGameSvrConfigBuffer(FlatBufferBuilder builder, Offset <GameSvrConfig> offset) { builder.FinishSizePrefixed(offset.Value); }
public static void FinishSizePrefixedMovieBuffer(FlatBufferBuilder builder, Offset <Movie> offset) { builder.FinishSizePrefixed(offset.Value, "MOVI"); }
public static void FinishSizePrefixedDataListBuffer(FlatBufferBuilder builder, Offset <DataList> offset) { builder.FinishSizePrefixed(offset.Value); }
public static void FinishSizePrefixedFStateBuffer(FlatBufferBuilder builder, Offset <FState> offset) { builder.FinishSizePrefixed(offset.Value, "STAT"); }
public static void FinishSizePrefixedMapBuffer(FlatBufferBuilder builder, Offset <N2S.FileFormat.Map> offset) { builder.FinishSizePrefixed(offset.Value, "N2SM"); }
public static byte[] ToByteBuffer(IFeature feature, IList <LayerMeta> layers) { // TODO: size might not be enough, need to be adaptive var builder = new FlatBufferBuilder(1024); // TODO: improve layer introspection var layer = layers.First(l => l.GeometryType == GeometryConversions.ToGeometryType(feature.Geometry)); var layerIndex = (uint)layers.IndexOf(layer); var columns = layer.Columns; var geometryOffset = GeometryConversions.BuildGeometry(builder, feature.Geometry); VectorOffset?valuesOffset = null; if (feature.Attributes != null && feature.Attributes.Count > 0 && columns != null) { var valueOffsets = new List <Offset <Value> >(); foreach (var column in columns) { if (feature.Attributes.Exists(column.Name)) { ushort columnIndex = (ushort)columns.IndexOf(column); var value = feature.Attributes[column.Name]; switch (value) { case bool v: valueOffsets.Add(Value.CreateValue(builder, columnIndex, bool_value: v)); break; case int v: valueOffsets.Add(Value.CreateValue(builder, columnIndex, int_value: v)); break; case long v: valueOffsets.Add(Value.CreateValue(builder, columnIndex, long_value: v)); break; case double v: valueOffsets.Add(Value.CreateValue(builder, columnIndex, double_value: v)); break; case string v: valueOffsets.Add(Value.CreateValue(builder, columnIndex, string_valueOffset: builder.CreateString(v))); break; case null: break; default: throw new ApplicationException("Unknown type"); } } } valuesOffset = Feature.CreateValuesVector(builder, valueOffsets.ToArray()); } Feature.StartFeature(builder); Feature.AddGeometry(builder, geometryOffset); Feature.AddLayer(builder, layerIndex); if (valuesOffset.HasValue) { Feature.AddValues(builder, valuesOffset.Value); } var offset = Feature.EndFeature(builder); builder.FinishSizePrefixed(offset.Value); var bytes = builder.DataBuffer.ToSizedArray(); return(bytes); }
public static void FinishSizePrefixedFErrorBuffer(FlatBufferBuilder builder, Offset <mainServer.schemas.FError.FError> offset) { builder.FinishSizePrefixed(offset.Value); }
public static void FinishSizePrefixedSampleBuffer(FlatBufferBuilder builder, Offset <Sample> offset) { builder.FinishSizePrefixed(offset.Value, "SMPL"); }
public static void FinishSizePrefixedWaferMapBuffer(FlatBufferBuilder builder, Offset <WaferMap> offset) { builder.FinishSizePrefixed(offset.Value); }
public static void FinishSizePrefixedSkillDataTableBuffer(FlatBufferBuilder builder, Offset <SkillDataTable> offset) { builder.FinishSizePrefixed(offset.Value); }
public static void FinishSizePrefixedOutputsBuffer(FlatBufferBuilder builder, Offset <space_data.Outputs> offset) { builder.FinishSizePrefixed(offset.Value); }
public static void FinishSizePrefixedFReactionBuffer(FlatBufferBuilder builder, Offset <FReaction> offset) { builder.FinishSizePrefixed(offset.Value, "REAC"); }
public static void FinishSizePrefixedRoot_ItemTableBuffer(FlatBufferBuilder builder, Offset <Root_ItemTable> offset) { builder.FinishSizePrefixed(offset.Value); }
public static void FinishSizePrefixedQuickChatBuffer(FlatBufferBuilder builder, Offset <QuickChat> offset) { builder.FinishSizePrefixed(offset.Value); }
public static void FinishSizePrefixedClientPropertyBuffer(FlatBufferBuilder builder, Offset <ClientProperty> offset) { builder.FinishSizePrefixed(offset.Value, "CLPR"); }
public static void FinishSizePrefixedMonsterBuffer(FlatBufferBuilder builder, Offset <Monster> offset) { builder.FinishSizePrefixed(offset.Value); }
public static void FinishSizePrefixedCollisionBuffer(FlatBufferBuilder builder, Offset <type_field_collsion.Collision> offset) { builder.FinishSizePrefixed(offset.Value); }