root | Дата: Воскресенье, 03.02.2013, 01:16 | Сообщение # 1 |
Генералиссимус
Группа: Администраторы
Сообщений: 561
Статус: Offline
| adt_trie.inc
Handle:CreateTrie();
Код Создаёт структуру и возвращает её Handle, который в дальнейшем необходим для операций с этой структурой (запись/удаление/изменение данных и тд). Ниже он будет как Handle:trie
Каждый ключ в структуре должен быть уникальным (другое имя). bool:SetTrieValue(Handle:trie, const String:key[], any:value, bool:replace=true);
Код Позволяет установить ключу любое значение, кроме строк и массивов. Если укажете replace = false, то операция завершится неудачно, если ключ уже есть в структуре. bool:SetTrieArray(Handle:trie, const String:key[], const any:array[], num_items, bool:replace=true); Значение ключа - массив с num_items элементами
bool:SetTrieString(Handle:trie, const String:key[], const String:value[], bool:replace=true); Значение ключа - строка
bool:GetTrieValue(Handle:trie, const String:key[], &any:value); Получить значение ключа (вернет true, если получили)
bool:GetTrieArray(Handle:trie, const String:key[], any:array[], max_size, &size=0); Получить массив. size - необязательный параметр для хранения количества элементов, записанных в буфер.
bool:GetTrieString(Handle:trie, const String:key[], String:value[], max_size, &size=0); Получить строку. size - необязательный параметр, чтобы сохранить число байтов, записанных в буфер.
bool:RemoveFromTrie(Handle:trie, const String:key[]); Удалить ключ из структуры. Вернет true, если ключ удалён.
ClearTrie(Handle:trie); - удаляет все ключи из структуры. Наверно, еще можно просто сделать CloseHandle(Handle:trie) и заного создать структуру.
GetTrieSize(Handle:trie); - возвращает количество элементов (ключей) в структуре.
Примеры:
Код #include <sourcemod>
public OnPluginStart() { new Handle:Trie = CreateTrie();
SetTrieValue(Trie, "number", 5); decl x; if (GetTrieValue(Trie, "number", x)) PrintToServer("number = %d", x); else PrintToServer("wtf.. Где number?");
SetTrieString(Trie, "game", "CS:Source"); decl String:text[10]; if (GetTrieString(Trie, "game", text, 10)) PrintToServer("game = %s", text);
SetTrieArray(Trie, "rgba_red", {255, 0, 0, 255}, 4); decl color[4]; if (GetTrieArray(Trie, "rgba_red", color, 4)) { PrintToServer("color = %d %d %d %d\n", color[0], color[1], color[2], color[3]); }
PrintToServer("Ключей в структуре: %d", GetTrieSize(Trie)); if (RemoveFromTrie(Trie, "rgba_red")) { PrintToServer("Ключ rgba_red удален. Осталось ключей: %d", GetTrieSize(Trie)); }
ClearTrie(Trie); PrintToServer("Все ключи удалены. Осталось: %d", GetTrieSize(Trie)); CloseHandle(Trie); }
|
|
| |