public override void Write(MyBinaryWriter stream) { stream.Write(Elements.Count); stream.Write(stream.DataStartOffset); if (Elements.Count > 0) { var currOffs = stream.BaseStream.Position; stream.Seek(stream.DataStartOffset, SeekOrigin.Begin); if (typeof(T).IsSubclassOf(typeof(Element))) { var elementSize = (Elements[0] as Element).GetSize(); stream.DataStartOffset += elementSize * Elements.Count; } else { stream.DataStartOffset += Marshal.SizeOf(typeof(T)) * Elements.Count; } foreach (var element in Elements) { stream.Write <T>(element); } stream.Seek((int)currOffs, SeekOrigin.Begin); } }
public void ReWriteBodyLength(MyBinaryWriter stream, short bodyLenght) { BodyLength = bodyLenght; stream.Seek(-bodyLenght - 2, SeekOrigin.Current); stream.Write(bodyLenght); stream.Seek(bodyLenght, SeekOrigin.Current); }
public void ReWriteComponentCountAndBodyLength(MyBinaryWriter stream, short bodyLenght, byte count) { SerializeCount = count; BodyLength = bodyLenght; stream.Seek(-bodyLenght - 3, SeekOrigin.Current); stream.Write(count); stream.Write(bodyLenght); stream.Seek(bodyLenght, SeekOrigin.Current); }