public void Marshal(Object o, BinaryWriter ds) { int size = 1; if (o != null) { DataStructure c = (DataStructure)o; byte type = c.GetDataStructureType(); BaseDataStreamMarshaller dsm = dataMarshallers[type & 0xFF]; if (dsm == null) { throw new IOException("Unknown data type: " + type); } if (tightEncodingEnabled) { BooleanStream bs = new BooleanStream(); size += dsm.TightMarshal1(this, c, bs); size += bs.MarshalledSize(); if (!sizePrefixDisabled) { ds.Write(size); } ds.Write(type); bs.Marshal(ds); dsm.TightMarshal2(this, c, ds, bs); } else { BinaryWriter looseOut = ds; MemoryStream ms = null; // If we are prefixing then we need to first write it to memory, // otherwise we can write direct to the stream. if (!sizePrefixDisabled) { ms = new MemoryStream(); looseOut = new OpenWireBinaryWriter(ms); looseOut.Write(size); } looseOut.Write(type); dsm.LooseMarshal(this, c, looseOut); if (!sizePrefixDisabled) { ms.Position = 0; looseOut.Write((int)ms.Length - 4); ds.Write(ms.GetBuffer(), 0, (int)ms.Length); } } } else { ds.Write(size); ds.Write(NULL_TYPE); } }
public void Marshal(Object o, BinaryWriter ds) { int size = 1; if (o != null) { DataStructure c = (DataStructure) o; byte type = c.GetDataStructureType(); BaseDataStreamMarshaller dsm = dataMarshallers[type & 0xFF]; if (dsm == null) throw new IOException("Unknown data type: " + type); if(tightEncodingEnabled) { BooleanStream bs = new BooleanStream(); size += dsm.TightMarshal1(this, c, bs); size += bs.MarshalledSize(); if( !sizePrefixDisabled ) { ds.Write(size); } ds.Write(type); bs.Marshal(ds); dsm.TightMarshal2(this, c, ds, bs); } else { BinaryWriter looseOut = ds; MemoryStream ms = null; // If we are prefixing then we need to first write it to memory, // otherwise we can write direct to the stream. if( !sizePrefixDisabled ) { ms= new MemoryStream(); looseOut = new OpenWireBinaryWriter(ms); looseOut.Write(size); } looseOut.Write(type); dsm.LooseMarshal(this, c, looseOut); if( !sizePrefixDisabled ) { ms.Position=0; looseOut.Write( (int)ms.Length-4 ); ds.Write(ms.GetBuffer(), 0, (int)ms.Length); } } } else { ds.Write(size); ds.Write(NULL_TYPE); } }