Ejemplo n.º 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);
            }
        }
Ejemplo n.º 2
0
        public static Record ReadRecord(Stream stream, ref byte[] buf)
        {
            var header     = ReadRecordHeader(stream, buf);
            var recordName = header.Name;
            var subRecords = new List <SubRecord>();

            var context = new SubRecordReadContext(recordName, stream)
            {
                buf = buf
            };
            int subBytes = 0;

            while (subBytes < header.Size)
            {
                context.header = ReadSubRecordHeader(stream, buf);
                var subRecord = (SubRecord)RawUtils.ProcessSubRecord(SubRecordOperationType.Read, context);

                subRecords.Add(subRecord);

                subBytes += context.header.Size + SubRecordHeader.SIZE;
            }

            buf = context.buf;
            return(new Record(header.Name, header.Flags0, header.Flags, subRecords));
        }
Ejemplo n.º 3
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);
        }