Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
        }