/// <summary> /// Change current bulk to bulk with index /// </summary> /// <param name="index">bulk index in pool</param> private void changeBulk(int index) { if (currentIndex != index) { Pool[currentIndex] = currentBulk; currentBulk = Pool[index]; currentIndex = index; } }
//Public public InHardDriveCollection(int bufferSize) { _bufferSize = bufferSize; currentBulk = new Bulk <T>(_bufferSize); var formatter = new BinaryFormatter(); var tp = typeof(Bulk <T>); Pool = new DriveDictionary <int, Bulk <T> >(@"\tmp", formatter); }
/// <summary> /// Перестройка контейнера. /// Например после удаления элемента из /// Или после вставки в контейнер /// </summary> /// <param name="indexFrom">индекс начиная с которого нужно перестраивать</param> /// <param name="indexExcept"></param> private void rebuildPool(int indexFrom, int indexExcept = -1) { #if DEBUG Console.WriteLine("Rebuild Pool: "); #endif if (currentIndex == Pool.Count - 1) { return; } for (int i = 0; i < Pool.Count; i++) { if (i == indexExcept) { continue; } if (currentIndex + 1 != Pool.Count) { //взять следующий Bulk с диска Bulk <T> tmpBulk = Pool[currentIndex + 1]; //циклически перемещать лишний элемент в конец if (currentBulk.Count > _bufferSize) { //взять из текущего bulk-а последний элемент и добавить в начало следующего tmpBulk.Insert(0, currentBulk[currentBulk.Count - 1]); currentBulk.RemoveAt(currentBulk.Count - 1); } //циклически сдвигать пустое место в конец else { //взять из него первый элемент и добавить в конец текущего currentBulk.Add(tmpBulk[0]); tmpBulk.RemoveAt(0); } //положить текущий bulk на диск Pool[currentIndex] = currentBulk; currentBulk = tmpBulk; currentIndex++; } } }
private void addBulk(Bulk <T> bulk) { Pool.Add(currentIndex, bulk);// new Bulk<T>(_bufferSize));//add bulk currentBulk = new Bulk <T>(_bufferSize); ++currentIndex; }