コード例 #1
0
        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());
        }
コード例 #2
0
        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());
        }
コード例 #3
0
        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());
        }
コード例 #4
0
 public static void FinishSizePrefixedunitconfigTBBuffer(FlatBufferBuilder builder, Offset <fb.unitconfigTB> offset)
 {
     builder.FinishSizePrefixed(offset.Value);
 }
コード例 #5
0
 public static void FinishSizePrefixedDataBaseBuffer(FlatBufferBuilder builder, Offset <DataBase> offset)
 {
     builder.FinishSizePrefixed(offset.Value, "DATA");
 }
コード例 #6
0
ファイル: LineItem.cs プロジェクト: kwaclaw/KdSoft.Lmdb
 public static void FinishSizePrefixedLineItemBuffer(FlatBufferBuilder builder, Offset <KdSoft.Lmdb.Tests.fbs.LineItem> offset)
 {
     builder.FinishSizePrefixed(offset.Value);
 }
コード例 #7
0
ファイル: ScalarStuff.cs プロジェクト: rhofour/flatbuffers
 public static void FinishSizePrefixedScalarStuffBuffer(FlatBufferBuilder builder, Offset <optional_scalars.ScalarStuff> offset)
 {
     builder.FinishSizePrefixed(offset.Value, "NULL");
 }
コード例 #8
0
 public static void FinishSizePrefixedFlatArrayBuffer(FlatBufferBuilder builder, Offset <FlatArray> offset)
 {
     builder.FinishSizePrefixed(offset.Value);
 }
コード例 #9
0
 public static void FinishSizePrefixedInputBuffer(FlatBufferBuilder builder, Offset <Upzp.PlayerInput.Input> offset)
 {
     builder.FinishSizePrefixed(offset.Value);
 }
コード例 #10
0
 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);
 }
コード例 #12
0
 public static void FinishSizePrefixedOnly4TestTableBuffer(FlatBufferBuilder builder, Offset <Only4TestTable> offset)
 {
     builder.FinishSizePrefixed(offset.Value);
 }
コード例 #13
0
 public static void FinishSizePrefixedcskilldataTBBuffer(FlatBufferBuilder builder, Offset <fb.cskilldataTB> offset)
 {
     builder.FinishSizePrefixed(offset.Value);
 }
コード例 #14
0
ファイル: GameSvrConfig.cs プロジェクト: czjone/SGFramework
 public static void FinishSizePrefixedGameSvrConfigBuffer(FlatBufferBuilder builder, Offset <GameSvrConfig> offset)
 {
     builder.FinishSizePrefixed(offset.Value);
 }
コード例 #15
0
ファイル: Movie.cs プロジェクト: nageshlop/proxy-1
 public static void FinishSizePrefixedMovieBuffer(FlatBufferBuilder builder, Offset <Movie> offset)
 {
     builder.FinishSizePrefixed(offset.Value, "MOVI");
 }
コード例 #16
0
 public static void FinishSizePrefixedDataListBuffer(FlatBufferBuilder builder, Offset <DataList> offset)
 {
     builder.FinishSizePrefixed(offset.Value);
 }
コード例 #17
0
 public static void FinishSizePrefixedFStateBuffer(FlatBufferBuilder builder, Offset <FState> offset)
 {
     builder.FinishSizePrefixed(offset.Value, "STAT");
 }
コード例 #18
0
 public static void FinishSizePrefixedMapBuffer(FlatBufferBuilder builder, Offset <N2S.FileFormat.Map> offset)
 {
     builder.FinishSizePrefixed(offset.Value, "N2SM");
 }
コード例 #19
0
        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);
        }
コード例 #20
0
ファイル: FError.cs プロジェクト: Qarian/UPZP-Front
 public static void FinishSizePrefixedFErrorBuffer(FlatBufferBuilder builder, Offset <mainServer.schemas.FError.FError> offset)
 {
     builder.FinishSizePrefixed(offset.Value);
 }
コード例 #21
0
 public static void FinishSizePrefixedSampleBuffer(FlatBufferBuilder builder, Offset <Sample> offset)
 {
     builder.FinishSizePrefixed(offset.Value, "SMPL");
 }
コード例 #22
0
ファイル: WaferMap.cs プロジェクト: thyik/flatbuffer_example
 public static void FinishSizePrefixedWaferMapBuffer(FlatBufferBuilder builder, Offset <WaferMap> offset)
 {
     builder.FinishSizePrefixed(offset.Value);
 }
コード例 #23
0
 public static void FinishSizePrefixedSkillDataTableBuffer(FlatBufferBuilder builder, Offset <SkillDataTable> offset)
 {
     builder.FinishSizePrefixed(offset.Value);
 }
コード例 #24
0
 public static void FinishSizePrefixedOutputsBuffer(FlatBufferBuilder builder, Offset <space_data.Outputs> offset)
 {
     builder.FinishSizePrefixed(offset.Value);
 }
コード例 #25
0
 public static void FinishSizePrefixedFReactionBuffer(FlatBufferBuilder builder, Offset <FReaction> offset)
 {
     builder.FinishSizePrefixed(offset.Value, "REAC");
 }
コード例 #26
0
 public static void FinishSizePrefixedRoot_ItemTableBuffer(FlatBufferBuilder builder, Offset <Root_ItemTable> offset)
 {
     builder.FinishSizePrefixed(offset.Value);
 }
コード例 #27
0
 public static void FinishSizePrefixedQuickChatBuffer(FlatBufferBuilder builder, Offset <QuickChat> offset)
 {
     builder.FinishSizePrefixed(offset.Value);
 }
コード例 #28
0
 public static void FinishSizePrefixedClientPropertyBuffer(FlatBufferBuilder builder, Offset <ClientProperty> offset)
 {
     builder.FinishSizePrefixed(offset.Value, "CLPR");
 }
コード例 #29
0
ファイル: Monster.cs プロジェクト: markus-wa/ObjectOrientedDB
 public static void FinishSizePrefixedMonsterBuffer(FlatBufferBuilder builder, Offset <Monster> offset)
 {
     builder.FinishSizePrefixed(offset.Value);
 }
コード例 #30
0
 public static void FinishSizePrefixedCollisionBuffer(FlatBufferBuilder builder, Offset <type_field_collsion.Collision> offset)
 {
     builder.FinishSizePrefixed(offset.Value);
 }