public virtual void CreateChildBuffer(bool storeLengthInLink)
        {
            MarshallingBuffer childBuffer = _currentBuffer.AddChild(false, storeLengthInLink);

            _currentBuffer.ReserveChildLinkSpace(storeLengthInLink);
            _currentBuffer = childBuffer;
        }
예제 #2
0
        public virtual void TestLinkOffset()
        {
            var linkOffset = 7;
            var buffer     = new MarshallingBuffer();

            buffer.WriteInt(Data1);
            buffer.WriteByte(Data2);
            var child = buffer.AddChild();

            child.WriteInt(Data3);
            child.WriteInt(Data4);
            var grandChild = child.AddChild();

            grandChild.WriteInt(Data5);
            buffer.MergeChildren(null, 0, linkOffset);
            var content        = InspectContent(buffer);
            var extendedBuffer = new ByteArrayBuffer(content.Length() + linkOffset
                                                     );

            content.CopyTo(extendedBuffer, 0, linkOffset, content.Length());
            extendedBuffer.Seek(linkOffset);
            Assert.AreEqual(Data1, extendedBuffer.ReadInt());
            Assert.AreEqual(Data2, extendedBuffer.ReadByte());
            var address = extendedBuffer.ReadInt();

            extendedBuffer.Seek(address);
            Assert.AreEqual(Data3, extendedBuffer.ReadInt());
            Assert.AreEqual(Data4, extendedBuffer.ReadInt());
            address = extendedBuffer.ReadInt();
            extendedBuffer.Seek(address);
            Assert.AreEqual(Data5, extendedBuffer.ReadInt());
        }
예제 #3
0
        public virtual void TestGrandChildren()
        {
            var buffer = new MarshallingBuffer();

            buffer.WriteInt(Data1);
            buffer.WriteByte(Data2);
            var child = buffer.AddChild();

            child.WriteInt(Data3);
            child.WriteInt(Data4);
            var grandChild = child.AddChild();

            grandChild.WriteInt(Data5);
            buffer.MergeChildren(null, 0, 0);
            var content = InspectContent(buffer);

            Assert.AreEqual(Data1, content.ReadInt());
            Assert.AreEqual(Data2, content.ReadByte());
            var address = content.ReadInt();

            content.Seek(address);
            Assert.AreEqual(Data3, content.ReadInt());
            Assert.AreEqual(Data4, content.ReadInt());
            address = content.ReadInt();
            content.Seek(address);
            Assert.AreEqual(Data5, content.ReadInt());
        }
예제 #4
0
        private ByteArrayBuffer InspectContent(MarshallingBuffer buffer)
        {
            var bufferDelegate = buffer.TestDelegate();

            bufferDelegate.Seek(0);
            return(bufferDelegate);
        }
 public virtual int RequiredLength(MarshallingBuffer buffer, bool align)
 {
     if (!align)
     {
         return(buffer.Length());
     }
     return(Container().BlockConverter().BlockAlignedBytes(buffer.Length()));
 }
예제 #6
0
        public virtual void TestWrite()
        {
            var buffer = new MarshallingBuffer();

            buffer.WriteInt(Data1);
            buffer.WriteByte(Data2);
            var content = InspectContent(buffer);

            Assert.AreEqual(Data1, content.ReadInt());
            Assert.AreEqual(Data2, content.ReadByte());
        }
 public MarshallingContext(Db4objects.Db4o.Internal.Transaction trans, ObjectReference
                           @ref, IUpdateDepth updateDepth, bool isNew)
 {
     // YapClass ID
     // Marshaller Version
     // number of fields
     _transaction   = trans;
     _reference     = @ref;
     _nullBitMap    = new BitMap4(AspectCount());
     _updateDepth   = ClassMetadata().AdjustUpdateDepth(trans, updateDepth);
     _isNew         = isNew;
     _writeBuffer   = new MarshallingBuffer();
     _currentBuffer = _writeBuffer;
 }
예제 #8
0
 public MarshallingContext(Transaction trans, ObjectReference
     @ref, IUpdateDepth updateDepth, bool isNew)
 {
     // YapClass ID
     // Marshaller Version
     // number of fields
     _transaction = trans;
     _reference = @ref;
     _nullBitMap = new BitMap4(AspectCount());
     _updateDepth = ClassMetadata().AdjustUpdateDepth(trans, updateDepth);
     _isNew = isNew;
     _writeBuffer = new MarshallingBuffer();
     _currentBuffer = _writeBuffer;
 }
예제 #9
0
        public virtual void TestTransferLastWrite()
        {
            var buffer = new MarshallingBuffer();

            buffer.WriteInt(Data1);
            var lastOffset = Offset(buffer);

            buffer.WriteByte(Data2);
            var other = new MarshallingBuffer();

            buffer.TransferLastWriteTo(other, true);
            Assert.AreEqual(lastOffset, Offset(buffer));
            var content = InspectContent(other);

            Assert.AreEqual(Data2, content.ReadByte());
        }
예제 #10
0
        public virtual void TestChildren()
        {
            MarshallingBuffer buffer = new MarshallingBuffer();

            buffer.WriteInt(Data1);
            buffer.WriteByte(Data2);
            MarshallingBuffer child = buffer.AddChild();

            child.WriteInt(Data3);
            child.WriteInt(Data4);
            buffer.MergeChildren(null, 0, 0);
            ByteArrayBuffer content = InspectContent(buffer);

            Assert.AreEqual(Data1, content.ReadInt());
            Assert.AreEqual(Data2, content.ReadByte());
            int address = content.ReadInt();

            content.Seek(address);
            Assert.AreEqual(Data3, content.ReadInt());
            Assert.AreEqual(Data4, content.ReadInt());
        }
예제 #11
0
 public virtual void CreateChildBuffer(bool storeLengthInLink)
 {
     var childBuffer = _currentBuffer.AddChild(false, storeLengthInLink);
     _currentBuffer.ReserveChildLinkSpace(storeLengthInLink);
     _currentBuffer = childBuffer;
 }
예제 #12
0
 public MarshallingContextState(MarshallingBuffer buffer)
 {
     _buffer = buffer;
 }
예제 #13
0
 public virtual void BeginSlot()
 {
     _currentBuffer = _writeBuffer;
 }
예제 #14
0
 public virtual void RestoreState(MarshallingContextState state)
 {
     _currentBuffer = state._buffer;
 }
예제 #15
0
 private int Offset(MarshallingBuffer buffer)
 {
     return(buffer.TestDelegate().Offset());
 }
 public virtual void BeginSlot()
 {
     _currentBuffer = _writeBuffer;
 }
 public virtual void RestoreState(MarshallingContextState state)
 {
     _currentBuffer = state._buffer;
 }
예제 #18
0
 public MarshallingContextState(MarshallingBuffer buffer)
 {
     _buffer = buffer;
 }
예제 #19
0
 public virtual int RequiredLength(MarshallingBuffer buffer, bool align)
 {
     if (!align)
     {
         return buffer.Length();
     }
     return Container().BlockConverter().BlockAlignedBytes(buffer.Length());
 }