internal ArraySinglePrimitive(IParsingContext context) { ArrayInfo = new ArrayInfo(context); PrimitiveType = (PrimitiveTypeEnumeration) context.ReadByte(); Check.That(PrimitiveType != PrimitiveTypeEnumeration.Null, "PrimitiveType must not be Null."); Check.That(PrimitiveType != PrimitiveTypeEnumeration.String, "PrimitiveType must not be String."); Values = new MemberPrimitiveUnTyped[ArrayInfo.Length]; for (var idx = 0; idx < Values.Length; ++idx) { Values[idx] = new MemberPrimitiveUnTyped(context, PrimitiveType); } }
protected internal static Object ReadPrimitiveValue(IParsingContext context, PrimitiveTypeEnumeration type) { switch (type) { case PrimitiveTypeEnumeration.Boolean: return context.ReadBoolean(); case PrimitiveTypeEnumeration.Byte: return context.ReadByte(); case PrimitiveTypeEnumeration.Char: return context.ReadChar(); case PrimitiveTypeEnumeration.DateTime: var data = context.ReadInt64(); var dt = DateTime.FromBinary(data); var dtUtc = dt.ToUniversalTime(); return new DateTime(dtUtc.Ticks, dt.Kind); case PrimitiveTypeEnumeration.Decimal: return Decimal.Parse(context.ReadString(), CultureInfo.InvariantCulture); case PrimitiveTypeEnumeration.Double: return context.ReadDouble(); case PrimitiveTypeEnumeration.Int16: return context.ReadInt16(); case PrimitiveTypeEnumeration.Int32: return context.ReadInt32(); case PrimitiveTypeEnumeration.Int64: return context.ReadInt64(); case PrimitiveTypeEnumeration.Null: return null; case PrimitiveTypeEnumeration.SByte: return context.ReadSByte(); case PrimitiveTypeEnumeration.Single: return context.ReadSingle(); case PrimitiveTypeEnumeration.String: return context.ReadString(); case PrimitiveTypeEnumeration.TimeSpan: return TimeSpan.FromTicks(context.ReadInt64()); case PrimitiveTypeEnumeration.UInt16: return context.ReadUInt16(); case PrimitiveTypeEnumeration.UInt32: return context.ReadUInt32(); case PrimitiveTypeEnumeration.UInt64: return context.ReadUInt64(); default: throw new NotSupportedException("Unsupported primitive type " + type); } }
internal MemberPrimitiveTyped(IParsingContext context) { PrimitiveType = (PrimitiveTypeEnumeration) context.ReadByte(); Value = ClassRecordBase.ReadPrimitiveValue(context, PrimitiveType); }
public MemberTypeInfo(IParsingContext context, Int32 count) { BinaryTypeEnums = new BinaryTypeEnumeration[count]; AdditionalInfos = new Object[count]; for (var i = 0; i < count; ++i) { BinaryTypeEnums[i] = (BinaryTypeEnumeration)context.ReadByte(); } for (var i = 0; i < count; ++i) { var binaryType = BinaryTypeEnums[i]; switch (binaryType) { case BinaryTypeEnumeration.String: case BinaryTypeEnumeration.StringArray: case BinaryTypeEnumeration.Object: case BinaryTypeEnumeration.ObjectArray: break; case BinaryTypeEnumeration.Primitive: case BinaryTypeEnumeration.PrimitiveArray: AdditionalInfos[i] = (PrimitiveTypeEnumeration)context.ReadByte(); break; case BinaryTypeEnumeration.SystemClass: AdditionalInfos[i] = context.ReadString(); break; case BinaryTypeEnumeration.Class: AdditionalInfos[i] = new ClassTypeInfo(context); break; default: throw new NotSupportedException("Unsupported BinaryType " + binaryType); } } }