public void Write(BitStream stream) { // TODO: this is suboptimal if (stream == null || m_writeData == null) { if (stream == null) { Debug.Fail("BitReaderWriter - Write - stream is null"); } if (m_writeData == null) { Debug.Fail("BitReaderWriter - Write - m_writeData is null"); } return; } // Store old bit position int pos = stream.BitPosition; // Write data m_writeData.Serialize(stream, false); // Measure data len int len = stream.BitPosition - pos; // Restore old position stream.SetBitPositionWrite(pos); // Write data len stream.WriteVariant((uint)len); // Write data again m_writeData.Serialize(stream, false); }
public void Write(BitStream stream) { // TODO: this is suboptimal // Store old bit position int pos = stream.BitPosition; // Write data m_writeData.Serialize(stream, false); // Measure data len int len = stream.BitPosition - pos; // Restore old position stream.SetBitPositionWrite(pos); // Write data len stream.WriteVariant((uint)len); // Write data again m_writeData.Serialize(stream, false); }
static void DebugBytes(string name, byte[] bytes, List <Type> dataLookup) { var hex = System.BitConverter.ToString(bytes).Replace("-", ""); var ascii = System.Text.Encoding.ASCII.GetString(bytes); var outputTxt = ""; outputTxt += $"{debugCount} RECV {name}\n"; debugCount++; if (dataLookup == null) { outputTxt += $"\tNo data lookup\n"; outputTxt += $"\tHex: {hex}\n"; outputTxt += $"\tAscii: {ascii}\n"; } else { debugBitStreamReader.Encapsulate(bytes); int index = 0; debugBitStreamReader.Serialize(ref index); if (index < 0 || index >= dataLookup.Count) { outputTxt += $"\tReceived invalid event index: {index} out of {dataLookup.Count}\n"; outputTxt += $"\tHex: {hex}\n"; outputTxt += $"\tAscii: {ascii}\n"; } else { try { IBitSerializable data = (IBitSerializable)Activator.CreateInstance(dataLookup[index]); data.Serialize(debugBitStreamReader); outputTxt += $"\t{dataLookup[index]}\n"; outputTxt += DeepPrint(data, 2, printableProps) + "\n"; } catch (Exception e) { outputTxt += $"\tFailed to read data because: {e}"; } } } Console.WriteLine(outputTxt); }
/// <summary> /// Returns false when validation was required and failed, otherwise true. /// </summary> public bool ReadData(IBitSerializable readDataInto, bool validate) { Debug.Assert(m_readStream != null, "Local invocation is not supported for BitReaderWriter"); //if (m_readStream == null) //{ // tmpStream.ResetWrite(); // Write(tmpStream); // tmpStream.ResetRead(); // return ReadFrom(tmpStream).ReadData(readDataInto, validate, null); //} int oldPos = m_readStream.BitPosition; m_readStream.SetBitPositionRead(m_readStreamPosition); try { return readDataInto.Serialize(m_readStream, validate); } finally { m_readStream.SetBitPositionRead(oldPos); } }
/// <summary> /// Returns false when validation was required and failed, otherwise true. /// </summary> public bool ReadData(IBitSerializable readDataInto, bool validate) { Debug.Assert(m_readStream != null, "Local invocation is not supported for BitReaderWriter"); //if (m_readStream == null) //{ // tmpStream.ResetWrite(); // Write(tmpStream); // tmpStream.ResetRead(); // return ReadFrom(tmpStream).ReadData(readDataInto, validate, null); //} int oldPos = m_readStream.BitPosition; m_readStream.SetBitPositionRead(m_readStreamPosition); try { return(readDataInto.Serialize(m_readStream, validate)); } finally { m_readStream.SetBitPositionRead(oldPos); } }
public void WriteSerializable(IBitSerializable obj) { obj.Serialize(this); }