private BObject DecodeDocument() { int length = reader.ReadInt32() - 4; BObject obj = new BObject(); int i = (int)reader.BaseStream.Position; while (reader.BaseStream.Position < i + length - 1) { BValue value = DecodeElement(out var name); obj.Add(name, value); } reader.ReadByte(); // zero return(obj); }
private void EncodeElement(MemoryStream ms, string name, BValue v) { switch (v.ValueType) { case BValueType.Double: ms.WriteByte(0x01); EncodeCString(ms, name); EncodeDouble(ms, v.DoubleValue); return; case BValueType.String: ms.WriteByte(0x02); EncodeCString(ms, name); EncodeString(ms, v.StringValue); return; case BValueType.Object: ms.WriteByte(0x03); EncodeCString(ms, name); EncodeDocument(ms, v as BObject); return; case BValueType.Array: ms.WriteByte(0x04); EncodeCString(ms, name); EncodeArray(ms, v as BArray); return; case BValueType.Binary: ms.WriteByte(0x05); EncodeCString(ms, name); EncodeBinary(ms, v.BinaryValue); return; case BValueType.Boolean: ms.WriteByte(0x08); EncodeCString(ms, name); EncodeBool(ms, v.BoolValue); return; case BValueType.UTCDateTime: ms.WriteByte(0x09); EncodeCString(ms, name); EncodeUTCDateTime(ms, v.DateTimeValue); return; case BValueType.None: ms.WriteByte(0x0A); EncodeCString(ms, name); return; case BValueType.Int32: ms.WriteByte(0x10); EncodeCString(ms, name); EncodeInt32(ms, v.Int32Value); return; case BValueType.Int64: ms.WriteByte(0x12); EncodeCString(ms, name); EncodeInt64(ms, v.Int64Value); return; } }
public virtual bool Contains(BValue v) { return(false); }
public virtual void Add(BValue value) { }
public virtual void Add(string key, BValue value) { }