[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Форум » Уроки SourceMod (SourcePawn) Скриптинга » adt_trie.inc - CreateTrie() (Создаём/храним ключи и их значения Взято с world-source.ru)
adt_trie.inc - CreateTrie()
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);  
}

kod.sp(1.0 Kb)
 
Форум » Форум » Уроки SourceMod (SourcePawn) Скриптинга » adt_trie.inc - CreateTrie() (Создаём/храним ключи и их значения Взято с world-source.ru)
  • Страница 1 из 1
  • 1
Поиск: