Anve
02.02.2018, 00:53
hashmap.inc
github (https://github.com/AnveSamp/HashMap)
Что это?
Инклуд, позволяющий создавать и работать с хеш-картой. Подробнее о хеш-карте вы можете прочитать здесь (https://ru.wikipedia.org/wiki/%D0%A5%D0%B5%D1%88-%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0).
Преимущества:
Легко в использовании
Нет зависимостей
Много функций
Как это работает?
Создаётся массив с размером 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 - найденное(или нет) значение
Пример использования
public OnHashMapFind(error, value)
{
switch(error)
{
case HASHMAP_ERROR_OK: printf("Value: %d",value);
}
}
Функции & Операции
HashMap_Emplace - Добавление нового элемента в хеш-карту
Параметры:
Хеш-карта
Ключ
Значение
Возвращаемое значение: одна из вышеприведённых ошибок.
Пример использования
public OnGameModeInit()
{
new HashMap:Map<>;
HashMap_Emplace(Map,"key",10); // Добавит новый элемент с ключом "key" и значением 10
}
HashMap_Find - Поиск элемента по ключу
Параметры:
Хеш-карта
Ключ
Возвращаемое значение: значение элемента / ошибку HASHMAP_ERROR_NOT_FOUND.
Пример использования
public OnGameModeInit()
{
new HashMap:Map<>;
HashMap_Emplace(Map,"key",10);
new value = HashMap_Find(Map,"key");
printf("Value: %d",value);
}
HashMap_Erase - Удаление элемента из хеш-карты
Параметры:
Хеш-карта
Ключ
Возвращаемое значение: одна из вышеприведённых ошибок.
Пример использования
public OnGameModeInit()
{
new HashMap:Map<>;
HashMap_Emplace(Map,"key",10);
HashMap_Erase(Map,"key"); // Удалит элемент с ключом "key"
}
HashMap_Count - Получение кол-ва записанных в хеш-карту элементов
Параметры:
Хеш-карта
Возвращаемое значение: кол-во элементов записанных в хеш-карту.
Пример использования
public OnGameModeInit()
{
new HashMap:Map<>;
HashMap_Emplace(Map,"key",10);
HashMap_Count(Map); // Вернёт 1
}
HashMap_Size - Получение размера хеш-карты
Параметры:
-
Возвращаемое значение: MAX_HASHMAP_SIZE (вернёт в любом случае, ниже показан пример).
Пример использования
public OnGameModeInit()
{
new size = HashMap_Size();
printf("%d",size);
}
HashMap_Clear - Очищение хеш-карты
Параметры:
Хеш-карта
Возвращаемое значение: HASHMAP_ERROR_OK.
Пример использования
public OnGameModeInit()
{
new HashMap:Map<>;
HashMap_Emplace(Map,"key",10);
HashMap_Clear(Map); // Очистит все созданные раннее элементы
}
HashMap_Empty - Проверить, пуста ли хеш-карта
Параметры:
Хеш-карта
Возвращаемое значение: true или false.
Пример использования
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
github (https://github.com/AnveSamp/HashMap)
Что это?
Инклуд, позволяющий создавать и работать с хеш-картой. Подробнее о хеш-карте вы можете прочитать здесь (https://ru.wikipedia.org/wiki/%D0%A5%D0%B5%D1%88-%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0).
Преимущества:
Легко в использовании
Нет зависимостей
Много функций
Как это работает?
Создаётся массив с размером 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 - найденное(или нет) значение
Пример использования
public OnHashMapFind(error, value)
{
switch(error)
{
case HASHMAP_ERROR_OK: printf("Value: %d",value);
}
}
Функции & Операции
HashMap_Emplace - Добавление нового элемента в хеш-карту
Параметры:
Хеш-карта
Ключ
Значение
Возвращаемое значение: одна из вышеприведённых ошибок.
Пример использования
public OnGameModeInit()
{
new HashMap:Map<>;
HashMap_Emplace(Map,"key",10); // Добавит новый элемент с ключом "key" и значением 10
}
HashMap_Find - Поиск элемента по ключу
Параметры:
Хеш-карта
Ключ
Возвращаемое значение: значение элемента / ошибку HASHMAP_ERROR_NOT_FOUND.
Пример использования
public OnGameModeInit()
{
new HashMap:Map<>;
HashMap_Emplace(Map,"key",10);
new value = HashMap_Find(Map,"key");
printf("Value: %d",value);
}
HashMap_Erase - Удаление элемента из хеш-карты
Параметры:
Хеш-карта
Ключ
Возвращаемое значение: одна из вышеприведённых ошибок.
Пример использования
public OnGameModeInit()
{
new HashMap:Map<>;
HashMap_Emplace(Map,"key",10);
HashMap_Erase(Map,"key"); // Удалит элемент с ключом "key"
}
HashMap_Count - Получение кол-ва записанных в хеш-карту элементов
Параметры:
Хеш-карта
Возвращаемое значение: кол-во элементов записанных в хеш-карту.
Пример использования
public OnGameModeInit()
{
new HashMap:Map<>;
HashMap_Emplace(Map,"key",10);
HashMap_Count(Map); // Вернёт 1
}
HashMap_Size - Получение размера хеш-карты
Параметры:
-
Возвращаемое значение: MAX_HASHMAP_SIZE (вернёт в любом случае, ниже показан пример).
Пример использования
public OnGameModeInit()
{
new size = HashMap_Size();
printf("%d",size);
}
HashMap_Clear - Очищение хеш-карты
Параметры:
Хеш-карта
Возвращаемое значение: HASHMAP_ERROR_OK.
Пример использования
public OnGameModeInit()
{
new HashMap:Map<>;
HashMap_Emplace(Map,"key",10);
HashMap_Clear(Map); // Очистит все созданные раннее элементы
}
HashMap_Empty - Проверить, пуста ли хеш-карта
Параметры:
Хеш-карта
Возвращаемое значение: true или false.
Пример использования
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