public static void WriteRecord(Stream stream, Record record) { var recordName = record.Name; RawUtils.WriteBytes(stream, RawUtils.GetBytes(recordName)); var lengthContext = new SubRecordLengthContext(recordName); var writeContext = new SubRecordWriteContext(recordName, stream); var size = 0; foreach (var subRecord in record) { lengthContext.subRecord = subRecord; size += ((int)RawUtils.ProcessSubRecord(SubRecordOperationType.Size, lengthContext)) + 8; } RawUtils.WriteBytes(stream, BitConverter.GetBytes(size)); RawUtils.WriteBytes(stream, BitConverter.GetBytes(record.Flags0)); RawUtils.WriteBytes(stream, BitConverter.GetBytes(record.Flags)); foreach (var subRecord in record) { lengthContext.subRecord = writeContext.subRecord = subRecord; var subRecordName = subRecord.Name; RawUtils.WriteBytes(stream, RawUtils.GetBytes(subRecordName)); RawUtils.WriteBytes(stream, BitConverter.GetBytes((int)RawUtils.ProcessSubRecord(SubRecordOperationType.Size, lengthContext))); RawUtils.ProcessSubRecord(SubRecordOperationType.Write, writeContext); } }
public static int GetCurrentSize(Record record) { var lengthContext = new SubRecordLengthContext(record.Name); var size = 0; foreach (var subRecord in record) { lengthContext.subRecord = subRecord; size += ((int)RawUtils.ProcessSubRecord(SubRecordOperationType.Size, lengthContext)) + 8; } return(size + 8); }