Заказать Сервер Заказать Плагин Контакты Поиск

[ вход ]
[ последние сообщения ]

Страница 1 из 11
Форум » SourceMod - Counter Strike Source && CS GO » Уроки SourceMod (SourcePawn) Скриптинга » adt_trie.inc - CreateTrie() (Создаём/храним ключи и их значения)
adt_trie.inc - CreateTrie()
_wS_ Дата: Воскресенье, 13.05.2012, 18:49:44 | Сообщение # 1
adt_trie.inc

Handle:CreateTrie();

Code
Создаёт структуру и возвращает её Handle, который в дальнейшем необходим для операций с этой структурой (запись/удаление/изменение данных и тд). Ниже он будет как Handle:trie

Каждый ключ в структуре должен быть уникальным (другое имя).

bool:SetTrieValue(Handle:trie, const String:key[], any:value, bool:replace=true);

Code
Позволяет установить ключу любое значение, кроме строк и массивов.
Если укажете 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); - возвращает количество элементов (ключей) в структуре.

Примеры:

Code
#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);
}

Прикрепления: kod.sp(1Kb)
 
Форум » SourceMod - Counter Strike Source && CS GO » Уроки SourceMod (SourcePawn) Скриптинга » adt_trie.inc - CreateTrie() (Создаём/храним ключи и их значения)
Страница 1 из 11
Поиск: