public static decimal ReadVolume <T>(this BitArrayReader reader, BinaryMetaInfo <T> info) where T : BinaryMetaInfo <T> { if (info.Version < MarketDataVersions.Version44) { if (reader.Read()) { return(reader.ReadLong()); } else { throw new NotSupportedException(LocalizedStrings.Str1011); } } else { if (reader.Read()) { return(reader.ReadLong() * info.VolumeStep); } else { return(info.FirstFractionalVolume = reader.ReadDecimal(info.FirstFractionalVolume)); } } }
public static DataType ReadBuildFrom(this BitArrayReader reader) { if (!reader.Read()) { return(null); } switch (reader.ReadInt()) { case 0: return(DataType.Level1); case 1: return(DataType.MarketDepth); case 2: return(DataType.OrderLog); case 3: return(DataType.Ticks); case 4: return(DataType.Transactions); case 5: return(reader.ReadInt().ToDataType(reader.ReadLong(), reader.Read() ? reader.ReadDecimal(0) : 0M, reader.ReadInt())); default: throw new InvalidOperationException(); } }
public static decimal ReadVolume(this BitArrayReader reader, BinaryMetaInfo info, bool largeDecimal) { if (info.Version < MarketDataVersions.Version44) { if (reader.Read()) { return(reader.ReadLong()); } else { throw new NotSupportedException(LocalizedStrings.Str1011); } } else { if (reader.TryReadLargeDecimal(largeDecimal, out var volume)) { return(volume); } if (reader.Read()) { return(reader.ReadLong() * info.VolumeStep); } else { return(info.FirstFractionalVolume = reader.ReadDecimal(info.FirstFractionalVolume)); } } }
public static DateTimeOffset ReadTime(this BitArrayReader reader, ref DateTime prevTime, bool allowNonOrdered, bool isUtc, TimeSpan timeZone) { long time; if (allowNonOrdered) { time = 0; var sign = reader.Read() ? 1 : -1; if (reader.Read()) { time += (reader.Read() ? reader.Read(5) : reader.ReadInt()) * TimeSpan.TicksPerHour; time += reader.Read(6) * TimeSpan.TicksPerMinute; time += reader.Read(6) * TimeSpan.TicksPerSecond; } else { time += reader.ReadInt() * TimeSpan.TicksPerSecond; } time += reader.ReadInt() * TimeSpan.TicksPerMillisecond; time = prevTime.Ticks + sign * time; } else { time = prevTime.Ticks; if (reader.Read()) { time -= time % TimeSpan.TicksPerDay; time += reader.Read(5) * TimeSpan.TicksPerHour; time += reader.Read(6) * TimeSpan.TicksPerMinute; time += reader.Read(6) * TimeSpan.TicksPerSecond; } else { time += reader.ReadInt() * TimeSpan.TicksPerSecond; } time += reader.ReadInt() * TimeSpan.TicksPerMillisecond; } prevTime = new DateTime(time, isUtc ? DateTimeKind.Utc : DateTimeKind.Unspecified); return(isUtc ? new DateTime(time + timeZone.Ticks).ApplyTimeZone(timeZone) : prevTime.ApplyTimeZone(timeZone)); }
public static decimal ReadPriceEx(this BitArrayReader reader, BinaryMetaInfo info, bool useLong, bool largeDecimal) { if (info.Version < MarketDataVersions.Version41) { var prevPrice = info.FirstPrice; return(info.FirstPrice = reader.ReadPrice(ref prevPrice, info)); } else { if (reader.TryReadLargeDecimal(largeDecimal, out var price)) { return(price); } if (reader.Read()) { var prevPrice = info.FirstPrice; return(info.FirstPrice = reader.ReadPrice(ref prevPrice, info, useLong)); } else { return(info.FirstFractionalPrice = reader.ReadDecimal(info.FirstFractionalPrice)); } } }
public static decimal ReadPrice(this BitArrayReader reader, ref decimal prevPrice, BinaryMetaInfo info, bool useLong = false, bool nonAdjustPrice = false) { if (!nonAdjustPrice || reader.Read()) { return(prevPrice = ReadPrice(reader, prevPrice, info.PriceStep, useLong)); } else { if (reader.Read()) { info.PriceStep = ReadDecimal(reader, 0); } return(info.FirstFractionalPrice = ReadPrice(reader, info.FirstFractionalPrice, info.PriceStep, useLong)); } }
public static long?ReadNullableLong(this BitArrayReader reader) { if (!reader.Read()) { return(null); } return(reader.ReadLong()); }
private static decimal?ReadCommission(BitArrayReader reader, TransactionSerializerMetaInfo metaInfo) { if (!reader.Read()) { return(null); } return(metaInfo.FirstCommission = reader.ReadDecimal(metaInfo.FirstCommission)); }
public static int?ReadNullableInt(this BitArrayReader reader) { if (!reader.Read()) { return(null); } return(reader.ReadInt()); }
private static string ReadString(BitArrayReader reader, IList <string> items) { if (!reader.Read()) { return(null); } return(items[reader.ReadInt()]); }
public static T?ReadNullableInt <T>(this BitArrayReader reader) where T : struct { if (!reader.Read()) { return(null); } return(reader.ReadInt().To <T?>()); }
public static decimal ReadDecimal(this BitArrayReader reader, decimal prevPrice) { var isPos = reader.Read(); var diff = new decimal(new[] { reader.ReadInt(), reader.ReadInt(), reader.ReadInt(), reader.ReadInt() << 16 }); if (!isPos) { diff = -diff; } return(prevPrice + diff); }
private static bool TryReadLargeDecimal(this BitArrayReader reader, bool largeDecimal, out decimal value) { if (largeDecimal) { if (reader.Read()) { value = reader.ReadDecimal(); return(true); } } value = default; return(false); }
public static decimal ReadPriceEx <T>(this BitArrayReader reader, BinaryMetaInfo <T> info) where T : BinaryMetaInfo <T> { if (info.Version < MarketDataVersions.Version41) { return(info.FirstPrice = reader.ReadPrice(info.FirstPrice, info)); } else { if (reader.Read()) { return(info.FirstPrice = reader.ReadPrice(info.FirstPrice, info)); } else { return(info.FirstNonSystemPrice = reader.ReadDecimal(info.FirstNonSystemPrice)); } } }
private static QuoteChange[] DeserializeQuotes(BitArrayReader reader, QuoteMetaInfo metaInfo, bool useLong, bool nonAdjustPrice) { if (reader == null) { throw new ArgumentNullException(nameof(reader)); } if (metaInfo == null) { throw new ArgumentNullException(nameof(metaInfo)); } var deltaCount = reader.ReadInt(); if (deltaCount == 0) { return(ArrayHelper.Empty <QuoteChange>()); } var quotes = new QuoteChange[deltaCount]; for (var i = 0; i < deltaCount; i++) { var prevPrice = metaInfo.FirstPrice; var price = reader.ReadPrice(ref prevPrice, metaInfo, useLong, nonAdjustPrice); metaInfo.FirstPrice = prevPrice; var volume = reader.ReadVolume(metaInfo); var ordersCount = metaInfo.Version >= MarketDataVersions.Version56 ? reader.ReadNullableInt() : null; var condition = metaInfo.Version >= MarketDataVersions.Version57 ? reader.Read() ? (QuoteConditions)reader.ReadInt() : default : default; quotes[i] = new QuoteChange(price, volume, ordersCount, condition); } return(quotes); }
public static decimal ReadPriceEx(this BitArrayReader reader, BinaryMetaInfo info) { if (info.Version < MarketDataVersions.Version41) { var prevPrice = info.FirstPrice; return(info.FirstPrice = reader.ReadPrice(ref prevPrice, info)); } else { if (reader.Read()) { var prevPrice = info.FirstPrice; return(info.FirstPrice = reader.ReadPrice(ref prevPrice, info)); } else { return(info.FirstFractionalPrice = reader.ReadDecimal(info.FirstFractionalPrice)); } } }
public static Sides?ReadSide(this BitArrayReader reader) { return(reader.Read() ? (reader.Read() ? Sides.Buy : Sides.Sell) : (Sides?)null); }
public static DateTimeOffset ReadTime(this BitArrayReader reader, ref DateTime prevTime, bool allowNonOrdered, bool isUtc, TimeSpan offset, bool allowDiffOffsets, bool isTickPrecision, ref TimeSpan prevOffset, bool bigRange = false) { if (allowDiffOffsets) { if (!reader.Read()) { prevOffset = new TimeSpan(reader.ReadInt(), reader.Read() ? 0 : reader.ReadInt(), 0); } offset = prevOffset; } long time; if (allowNonOrdered) { time = 0; var sign = reader.Read() ? 1 : -1; if (reader.Read()) { if (reader.Read()) { time += reader.Read(5) * TimeSpan.TicksPerHour; } else { time += reader.ReadInt() * TimeSpan.TicksPerHour; if (reader.Read()) { time += reader.ReadInt() * TimeSpan.TicksPerDay; } } time += reader.Read(6) * TimeSpan.TicksPerMinute; time += reader.Read(6) * TimeSpan.TicksPerSecond; } else { time += reader.ReadInt() * TimeSpan.TicksPerSecond; } time += reader.ReadInt() * TimeSpan.TicksPerMillisecond; if (isTickPrecision) { time += reader.ReadInt(); } time = prevTime.Ticks + sign * time; } else { time = prevTime.Ticks; if (reader.Read()) { time -= time % TimeSpan.TicksPerDay; time += reader.Read(5) * TimeSpan.TicksPerHour; time += reader.Read(6) * TimeSpan.TicksPerMinute; time += reader.Read(6) * TimeSpan.TicksPerSecond; } else { time += reader.ReadInt() * TimeSpan.TicksPerSecond; } time += reader.ReadInt() * TimeSpan.TicksPerMillisecond; } prevTime = new DateTime(time, isUtc ? DateTimeKind.Utc : DateTimeKind.Unspecified); return((isUtc ? new DateTime(time + offset.Ticks) : prevTime).ApplyTimeZone(offset)); }
public static decimal?ReadNullableDecimal(this BitArrayReader reader) => reader.Read() ? reader.ReadDecimal() : (decimal?)null;
public static bool?ReadNullableBool(this BitArrayReader reader) => reader.Read() ? reader.Read() : (bool?)null;
public static string ReadStringEx(this BitArrayReader reader) { return(reader.Read() ? reader.ReadString() : null); }
private static QuoteChange[] DeserializeQuotes(BitArrayReader reader, QuoteMetaInfo metaInfo, bool useLong, bool nonAdjustPrice) { if (reader == null) { throw new ArgumentNullException(nameof(reader)); } if (metaInfo == null) { throw new ArgumentNullException(nameof(metaInfo)); } var count = reader.ReadInt(); if (count == 0) { return(ArrayHelper.Empty <QuoteChange>()); } var is56 = metaInfo.Version >= MarketDataVersions.Version56; var is57 = metaInfo.Version >= MarketDataVersions.Version57; var is58 = metaInfo.Version >= MarketDataVersions.Version58; var quotes = new QuoteChange[count]; for (var i = 0; i < count; i++) { var prevPrice = metaInfo.FirstPrice; var price = reader.ReadPrice(ref prevPrice, metaInfo, useLong, nonAdjustPrice); metaInfo.FirstPrice = prevPrice; var volume = reader.ReadVolume(metaInfo); var ordersCount = is56 ? reader.ReadNullableInt() : null; var condition = is57 ? (QuoteConditions)(reader.ReadNullableInt() ?? 0) : default; var quote = new QuoteChange(price, volume, ordersCount, condition); if (is58) { if (reader.Read()) { quote.Action = (QuoteChangeActions)reader.ReadInt(); } if (reader.Read()) { quote.StartPosition = reader.ReadInt(); } if (reader.Read()) { quote.EndPosition = reader.ReadInt(); } } quotes[i] = quote; } return(quotes); }
public static DateTimeOffset?ReadDto(this BitArrayReader reader) { return(reader.Read() ? reader.ReadLong().To <DateTime>().ApplyTimeZone(new TimeSpan(reader.ReadInt(), reader.ReadInt(), 0)) : (DateTimeOffset?)null); }
public static Sides?ReadNullableSide(this BitArrayReader reader) => reader.Read() ? reader.Read() ? Sides.Buy : Sides.Sell : (Sides?)null;