public void ReadBinary(IBinaryReader reader) { TimeOrigin = reader.ReadLong(nameof(TimeOrigin)); Events = reader.ReadArray <Event>(nameof(Events)); }
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."); } }