Ejemplo n.º 1
0
        /// <summary>
        /// Внутренний рекурсивный метод поиска. Проходит по списку Position, находящихся после этой.
        /// Останавливается при обнаружении нужного элемента или по окончании списка.
        /// </summary>
        /// <param name="position"> Позиция, в которой ведется поиск. </param>
        /// <param name="keyedQuery"> Поисковый запрос, содержащий искомый объект. </param>
        private void Find(Position <V> position, KeyedSearchQuery <K, V> keyedQuery)
        {
            if (position == null)
            {
                keyedQuery.Count();
                return;
            }

            if (keyedQuery.Check(position.Element) == 0)
            {
                return;
            }

            Find(position.Next, keyedQuery);
        }
Ejemplo n.º 2
0
 public override void Find(int index, KeyedSearchQuery <K, V> keyedQuery)
 {
     for (int i = 0; i < _array.Length; i++)
     {
         int realIndex = (index + i * _mainFunction.Hash(keyedQuery.SearchKey())) % _array.Length;
         if (_array[realIndex] == null)
         {
             keyedQuery.Count();
             return;
         }
         if (keyedQuery.Check(_array[realIndex]) == 0 && !_deleted[realIndex])
         {
             return;
         }
     }
 }
Ejemplo n.º 3
0
        public override void Find(int index, KeyedSearchQuery <K, V> keyedQuery)
        {
            Position <V> position = array[index];

            Find(position, keyedQuery);
        }
Ejemplo n.º 4
0
 /// <summary>
 /// Поиск указанного в запросе элемента, по указанному индексу хранилища,
 /// учитывая стратегии разрешения коллизий.
 /// </summary>
 /// <param name="index"> Индекс, по которому в хранилище должен располагаться данный объект,
 /// если он в нем присутствует. Определяется хэш-функцией. </param>
 /// <param name="keyedQuery"> Поисковый запрос, содержащий искомый объект. </param>
 public abstract void Find(int index, KeyedSearchQuery <K, V> keyedQuery);