Ejemplo n.º 1
0
 public void ReadBinary(IBinaryReader reader)
 {
     TimeOrigin = reader.ReadLong(nameof(TimeOrigin));
     Events     = reader.ReadArray <Event>(nameof(Events));
 }
Ejemplo n.º 2
0
        private static void ReadVector(IBinaryReader reader, IHerculesTagsBuilder builder, string key)
        {
            var elementType = (TagType)reader.ReadByte();

            switch (elementType)
            {
            case TagType.String:
                builder.AddVector(key, reader.ReadArray(r => r.ReadString()));
                break;

            case TagType.Long:
                builder.AddVector(key, reader.ReadArray(r => r.ReadInt64()));
                break;

            case TagType.Uuid:
                builder.AddVector(key, reader.ReadArray(r => r.ReadGuid()));
                break;

            case TagType.Container:
                var elementsCount = reader.ReadInt32();
                var valueBuilder  = new Action <IHerculesTagsBuilder>(b => ReadContainer(reader, b));
                var valueBuilders = new Action <IHerculesTagsBuilder> [elementsCount];

                for (var i = 0; i < elementsCount; i++)
                {
                    valueBuilders[i] = valueBuilder;
                }

                builder.AddVectorOfContainers(key, valueBuilders);
                break;

            case TagType.Integer:
                builder.AddVector(key, reader.ReadArray(r => r.ReadInt32()));
                break;

            case TagType.Double:
                builder.AddVector(key, reader.ReadArray(r => r.ReadDouble()));
                break;

            case TagType.Flag:
                builder.AddVector(key, reader.ReadArray(r => r.ReadBool()));
                break;

            case TagType.Byte:
                builder.AddVector(key, reader.ReadByteArray());
                break;

            case TagType.Short:
                builder.AddVector(key, reader.ReadArray(r => r.ReadInt16()));
                break;

            case TagType.Float:
                builder.AddVector(key, reader.ReadArray(r => r.ReadFloat()));
                break;

            case TagType.Vector:
                throw new NotSupportedException("Nested vectors are not supported yet.");

            case TagType.Null:
                throw new NotSupportedException("Vectors of nulls are not supported yet.");

            default:
                throw new ArgumentOutOfRangeException(nameof(elementType), elementType, "Unexpected vector element type.");
            }
        }