예제 #1
0
        public void SetNewRoot(IRootNode artRoot)
        {
            var newRoot = (RootNodeV)artRoot;

            if (newRoot._root != _rootNode._root)
            {
                throw new ArgumentException("SetNewRoot allows only upgrades to writable identical root");
            }
            _rootNode = (RootNodeV)artRoot;
        }
예제 #2
0
        public IRootNode CreateWritableTransaction()
        {
            if (_writable)
            {
                throw new InvalidOperationException("Only readonly root node could be CreateWritableTransaction");
            }
            var node = new RootNodeV(_impl);

            node._writable     = true;
            node._root         = _root;
            node.CommitUlong   = CommitUlong;
            node.TransactionId = TransactionId + 1;
            node.TrLogFileId   = TrLogFileId;
            node.TrLogOffset   = TrLogOffset;
            node._ulongs       = _ulongs == null ? null : (ulong[])_ulongs.Clone();
            NodeUtilsV.Reference(_root);
            return(node);
        }
예제 #3
0
        public IRootNode Snapshot()
        {
            var snapshot = new RootNodeV(_impl);

            snapshot._writable     = false;
            snapshot._root         = _root;
            snapshot.CommitUlong   = CommitUlong;
            snapshot.TransactionId = TransactionId;
            snapshot.TrLogFileId   = TrLogFileId;
            snapshot.TrLogOffset   = TrLogOffset;
            snapshot._ulongs       = _ulongs == null ? null : (ulong[])_ulongs.Clone();
            if (_writable)
            {
                TransactionId++;
            }
            NodeUtilsV.Reference(_root);
            return(snapshot);
        }
예제 #4
0
 CursorV(CursorV from)
 {
     _rootNode = from._rootNode;
     _stack    = new StructList <CursorItem>(from._stack);
 }
예제 #5
0
 public CursorV(RootNodeV rootNode)
 {
     _rootNode = rootNode;
     _stack    = new StructList <CursorItem>();
 }