// read size and data and store WITH size and data public bool Read(TByteBuffer aValue) { Int32 Len; if (Read(out Len)) { if (Len <= ReadAvailable) { aValue.PrepareSize(Len + sizeof(Int32)); aValue.PrepareApply(); aValue.QWrite(Len); Array.Copy(FBuffer, FReadCursor, aValue.FBuffer, aValue.FWriteCursor, Len); FReadCursor += Len; return(true); } else { return(false); } } else { return(false); } }
// write all readable data WITH size public void Write(TByteBuffer aValue) { if (sizeof(Int32) + aValue.ReadAvailable > WriteAvailable) { Length = FWriteCursor + sizeof(Int32) + aValue.ReadAvailable; } QWrite(aValue.ReadAvailable); Array.Copy(aValue.FBuffer, aValue.ReadCursor, FBuffer, FWriteCursor, aValue.ReadAvailable); FWriteCursor += aValue.ReadAvailable; }
// read rest public void ReadRest(ref TByteBuffer aValue) { if (ReadAvailable > 0) { if (ReadAvailable > aValue.WriteAvailable) { aValue.Length = aValue.FWriteCursor + ReadAvailable; } Array.Copy(FBuffer, FReadCursor, aValue.FBuffer, FWriteCursor, ReadAvailable); } }
// read size and data and store as a whole WITHOUT size (size=length buffer) public TByteBuffer ReadByteBuffer() { Int32 Len; if (Read(out Len)) { if (Len <= ReadAvailable) { TByteBuffer Buffer = new TByteBuffer(Len); Array.Copy(FBuffer, FReadCursor, Buffer.FBuffer, Buffer.FWriteCursor, Len); Buffer.Written(Len); FReadCursor += Len; return(Buffer); } else { return(null); } } else { return(null); } }
// write, with no checking, all readable data WITH size public void QWrite(TByteBuffer aValue) { QWrite(aValue.ReadAvailable); Array.Copy(aValue.FBuffer, aValue.ReadCursor, FBuffer, FWriteCursor, aValue.ReadAvailable); FWriteCursor += aValue.ReadAvailable; }
// prepare all readable data WITH size public void Prepare(TByteBuffer aValue) { FPrepareCursor += sizeof(Int32) + aValue.ReadAvailable; }