hashmap.inc - реализация хеш-карты в Pawn
Что это?
Инклуд, позволяющий создавать и работать с хеш-картой. Подробнее о хеш-карте вы можете прочитать здесь.
Преимущества:
- Легко в использовании
- Нет зависимостей
- Много функций
Как это работает?
Создаётся массив с размером 256(MAX_HASHMAP_SIZE) ячеек. При добавлении строка(ключ) хешируется и этот хеш является индексом массива. Во всех последующих операциях(поиск/удаление и т.д.) со строкой происходит тоже самое, однако размер массива довольной маленький, из-за чего могут возникнуть коллизии. Решением данной проблемы является увеличение макроса MAX_HASHMAP_SIZE.
Возможные предупреждения, выводимые в консоль & Ошибки
Ошибки
Инклуд имеет следующие замакросенные ошибки:
HASHMAP_ERROR_OK
Описание: Обозначает, что ошибок нет, и всё выполнено успешно.
HASHMAP_ERROR_OCCUPIED
Описание: Обозначает, что в ячейке массива уже записано значение, ошибка возможна при возникновении коллизии.
HASHMAP_ERROR_NOT_FOUND
Описание: Обозначает, что значение не было найдено.
Предупреждения
Если консоле вы заметили следующее предупреждение: "[HashMap] Element "%s" already registered", то это говорит о следующем:
- Произошла коллизия при добавлении, и значение не было записано
- Вы указали строку, с помощью которой уже было записано ранее значение, и произойдёт выше написанное
Конфигурационные макросы
Название |
По умолчанию |
Описание |
MAX_HASHMAP_SIZE |
256 |
Максимальный размер массива хеш-карты |
Callbacks & Функции
Callbacks
OnHashMapFind
Определяется как: OnHashMapFind(error, value)
Описание: Вызывается после поиска значения.
Параметры:
- error - передается в виде одной из вышеприведённых ошибок
- value - найденное(или нет) значение
Пример использования
PHP код:
public OnHashMapFind(error, value)
{
switch(error)
{
case HASHMAP_ERROR_OK: printf("Value: %d",value);
}
}
Функции & Операции
HashMap_Emplace - Добавление нового элемента в хеш-карту
Параметры:
Возвращаемое значение: одна из вышеприведённых ошибок.
Пример использования
PHP код:
public OnGameModeInit()
{
new HashMap:Map<>;
HashMap_Emplace(Map,"key",10); // Добавит новый элемент с ключом "key" и значением 10
}
HashMap_Find - Поиск элемента по ключу
Параметры:
Возвращаемое значение: значение элемента / ошибку HASHMAP_ERROR_NOT_FOUND.
Пример использования
PHP код:
public OnGameModeInit()
{
new HashMap:Map<>;
HashMap_Emplace(Map,"key",10);
new value = HashMap_Find(Map,"key");
printf("Value: %d",value);
}
HashMap_Erase - Удаление элемента из хеш-карты
Параметры:
Возвращаемое значение: одна из вышеприведённых ошибок.
Пример использования
PHP код:
public OnGameModeInit()
{
new HashMap:Map<>;
HashMap_Emplace(Map,"key",10);
HashMap_Erase(Map,"key"); // Удалит элемент с ключом "key"
}
HashMap_Count - Получение кол-ва записанных в хеш-карту элементов
Параметры:
Возвращаемое значение: кол-во элементов записанных в хеш-карту.
Пример использования
PHP код:
public OnGameModeInit()
{
new HashMap:Map<>;
HashMap_Emplace(Map,"key",10);
HashMap_Count(Map); // Вернёт 1
}
HashMap_Size - Получение размера хеш-карты
Параметры:
Возвращаемое значение: MAX_HASHMAP_SIZE (вернёт в любом случае, ниже показан пример).
Пример использования
PHP код:
public OnGameModeInit()
{
new size = HashMap_Size();
printf("%d",size);
}
HashMap_Clear - Очищение хеш-карты
Параметры:
Возвращаемое значение: HASHMAP_ERROR_OK.
Пример использования
PHP код:
public OnGameModeInit()
{
new HashMap:Map<>;
HashMap_Emplace(Map,"key",10);
HashMap_Clear(Map); // Очистит все созданные раннее элементы
}
HashMap_Empty - Проверить, пуста ли хеш-карта
Параметры:
Возвращаемое значение: true или false.
Пример использования
PHP код:
public OnGameModeInit()
{
new HashMap:Map<>;
HashMap_Emplace(Map,"key",10);
HashMap_Empty(Map); // Вернёт 0, т.к. мы только что создали элемент
HashMap_Clear(Map);
HashMap_Empty(Map); // Вернёт 1, т.к. мы очистили хеш-карту
}
Change Log
Первая версия
01/02/2018
Версия 1.1
02/02/2018
- Добавлены функции HashMap_Clear и HashMap_Empty