Hashltem * item; // current hash item
public:
Iterator ( const Set * );
Object * value () const {
return item -> data;
}
bool end 0 const {
return hashlndex >= set -> hashSize;
}
void operator ++ ();
};
friend class Iterator; Set ();
Set ( const Set& theSet );
Set ( const char * theName, int theHashSize = 1000 ) ; -Set ();
virtual bool isOk () const {
return hashTable != NULL && hashSize > 0;
}
virtual int compare ( const Object * obj ) const;
Объектная модель. Основные классы
I virtual long hash () const
i return numltems,-
i }
bool operator == ( const Set& set ) const return compare ( &set ) == 0;
bool operator != ( const Set& set ) const return ! operator == ( set );
bool has ( Object * item ) const;
// return non-negative if set contains item
Object * insert ( Object * item );
// insert item at appropriate position void remove ( Object * item );
// delete item at specified position void removeAll ();
// delete all items
bool isEmpty () const return numltems < 1;
int getNumltems () const return numltems;
Iterator getlterator () const return Iterator ( this );
Array * getltems () const;
static MetaClass classlnstance;
};
Метод insert, как и в случае массива, добавляет новый элемент к множеству.
Методы remove и removeAll служат для удаления заданного элемента или всех элементов соответственно.
Метод has позволяет быстро проверить принадлежность объекта к множеству.
Методы isEmpty и getNumltems работают аналогачно методам класса Array. Для обхода всех элементов множества также используется паттерн "Итератор".
Метод getltems возвращает указатель на массив, содержащий все элементы данного множества.
Для быстрого выделения и освобождения элементов хеш-таблицы вместо обычных new и delete используется объект класса MemoryPool, оптимизированный для выделения большого числа маленьких блоков одинакового размера.