Exemplo n.º 1
0
 internal void RemoveFromCache(BTreeAlgorithm container)
 {
     if (IsFolded)
     {
         foreach (var info in foldedDataAddresses)
         {
             var addresses = Convert(info);
             int i = 0;
             while (i < addresses.Length)
             {
                 container.Blocks.Remove(addresses[i++]);
             }
         }
         return;
     }
     var db = this;
     while (db != null)
     {
         long ID = container.GetId(db);
         if (ID < 0)
             break;
         container.Blocks.Remove(ID);
         db = db.Next;
     }
 }
Exemplo n.º 2
0
        /// <summary>
        /// Constructor to use if you want to provide number of slots per node and your comparer object
        /// </summary>
        /// <param name="slotLen">Number of slots per node</param>
        /// <param name="comparer">compare object defining how records will be sorted</param>
        /// <param name="sortOrder"> </param>
        public ConcurrentSortedDictionary(byte slotLen = BTreeAlgorithm <TKey, TValue> .DefaultSlotLength,
                                          IComparer <TKey> comparer = null, SortOrderType sortOrder = SortOrderType.Ascending)
        {
            _btree       = new BTreeAlgorithm <TKey, TValue>(slotLen, comparer);
            _currentItem = new BTreeAlgorithm <TKey, TValue> .TreeNode.ItemAddress();

            _sortOrder = sortOrder;
        }
Exemplo n.º 3
0
 /// <summary>
 /// Unfold will recreate this block chain.
 /// </summary>
 /// <param name="container"></param>
 internal void Unfold(BTreeAlgorithm container)
 {
     if (foldedDataAddresses == null) return;
     var db = container.Blocks[NextItemAddress];
     if (db != null)
     {
         db.ClearData();
         var prev2 = this;
         foreach (var info in foldedDataAddresses)
         {
             var addresses = Convert(info);
             int i2 = 0;
             if (DataAddress == addresses[0])
                 i2++;
             while (i2 < addresses.Length)
             {
                 var _na = addresses[i2];
                 db = container.Blocks[_na];
                 if (db == null)
                 {
                     db = new DataBlock((DataBlockSize)Length);
                     db.DataAddress = _na;
                 }
                 else
                     db.ClearData();
                 prev2.Next = db;
                 prev2.NextItemAddress = db.DataAddress;
                 prev2 = db;
                 i2++;
             }
         }
         foldedDataAddresses = null;
         return;
     }
     // recreate the buffers if not found in Blocks cache...
     var prev = this;
     foreach (var info in foldedDataAddresses)
     {
         var addresses = Convert(info);
         int i = 0;
         if (DataAddress == addresses[0])
             i++;
         while (i < addresses.Length)
         {
             var _na = addresses[i];
             db = new DataBlock((DataBlockSize)Length);
             db.DataAddress = _na;
             prev.Next = db;
             prev.NextItemAddress = db.DataAddress;
             prev = db;
             i++;
         }
     }
     foldedDataAddresses = null;
 }