示例#1
0
        public IBTreeNode RemappingIterate(long transactionId, BTreeRemappingIterateAction action)
        {
            var result   = this;
            var children = _children;

            for (var i = 0; i < children.Length; i++)
            {
                var child    = children[i];
                var newChild = child.RemappingIterate(transactionId, action);
                if (newChild == child)
                {
                    continue;
                }
                if (result.TransactionId != transactionId)
                {
                    var newKeys = new byte[_keys.Length][];
                    Array.Copy(_keys, newKeys, newKeys.Length);
                    var newChildren = new IBTreeNode[_children.Length];
                    Array.Copy(_children, newChildren, newChildren.Length);
                    var newPairCounts = new long[_pairCounts.Length];
                    Array.Copy(_pairCounts, newPairCounts, newPairCounts.Length);
                    result   = new BTreeBranch(transactionId, newKeys, newChildren, newPairCounts);
                    children = newChildren;
                }
                children[i] = newChild;
            }
            return(result);
        }
示例#2
0
 public void RemappingIterate(BTreeRemappingIterateAction action)
 {
     if (_rootNode == null)
     {
         return;
     }
     _rootNode = _rootNode.RemappingIterate(TransactionId, action);
 }
示例#3
0
        public IBTreeNode RemappingIterate(long transactionId, BTreeRemappingIterateAction action)
        {
            var result    = this;
            var keyvalues = _keyvalues;

            for (var i = 0; i < keyvalues.Length; i++)
            {
                uint newFileId;
                uint newOffset;
                if (action(keyvalues[i].ValueFileId, keyvalues[i].ValueOfs, out newFileId, out newOffset))
                {
                    if (result.TransactionId != transactionId)
                    {
                        var newKeyValues = new Member[keyvalues.Length];
                        Array.Copy(keyvalues, newKeyValues, newKeyValues.Length);
                        result    = new BTreeLeafComp(transactionId, _keyBytes, newKeyValues);
                        keyvalues = newKeyValues;
                    }
                    keyvalues[i].ValueFileId = newFileId;
                    keyvalues[i].ValueOfs    = newOffset;
                }
            }
            return(result);
        }
示例#4
0
 public IBTreeNode RemappingIterate(long transactionId, BTreeRemappingIterateAction action)
 {
     var result = this;
     var keyvalues = _keyvalues;
     for (var i = 0; i < keyvalues.Length; i++)
     {
         uint newFileId;
         uint newOffset;
         if (action(keyvalues[i].ValueFileId, keyvalues[i].ValueOfs, out newFileId, out newOffset))
         {
             if (result.TransactionId != transactionId)
             {
                 var newKeyValues = new Member[keyvalues.Length];
                 Array.Copy(keyvalues, newKeyValues, newKeyValues.Length);
                 result = new BTreeLeafComp(transactionId, _keyBytes, newKeyValues);
                 keyvalues = newKeyValues;
             }
             keyvalues[i].ValueFileId = newFileId;
             keyvalues[i].ValueOfs = newOffset;
         }
     }
     return result;
 }
示例#5
0
 public IBTreeNode RemappingIterate(long transactionId, BTreeRemappingIterateAction action)
 {
     throw new ArgumentException();
 }
示例#6
0
 public void RemappingIterate(BTreeRemappingIterateAction action)
 {
     if (_rootNode == null) return;
     _rootNode = _rootNode.RemappingIterate(TransactionId, action);
 }
示例#7
0
 public IBTreeNode RemappingIterate(long transactionId, BTreeRemappingIterateAction action)
 {
     throw new ArgumentException();
 }
示例#8
0
 public IBTreeNode RemappingIterate(long transactionId, BTreeRemappingIterateAction action)
 {
     var result = this;
     var children = _children;
     for (var i = 0; i < children.Length; i++)
     {
         var child = children[i];
         var newChild = child.RemappingIterate(transactionId, action);
         if (newChild == child) continue;
         if (result.TransactionId != transactionId)
         {
             var newKeys = new byte[_keys.Length][];
             Array.Copy(_keys, newKeys, newKeys.Length);
             var newChildren = new IBTreeNode[_children.Length];
             Array.Copy(_children, newChildren, newChildren.Length);
             var newPairCounts = new long[_pairCounts.Length];
             Array.Copy(_pairCounts, newPairCounts, newPairCounts.Length);
             result = new BTreeBranch(transactionId, newKeys, newChildren, newPairCounts);
             children = newChildren;
         }
         children[i] = newChild;
     }
     return result;
 }