Добавлен Vlod,
опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
vJass
Тип:
Алгоритм
Версия Warcraft:
1.26a+
Как известно, функцию InitHashtable() можно вызывать ограниченное количество раз. Поэтому для динамического выделения нативных хеш-таблиц нужен буфер, с помощью которого можно было бы переиспользовать уже созданные хеш-таблицы. Данная библиотека предоставляет 2 метода:
local hashtable ht = HT_create() // для получения hashtable из буфера
call HT_destroy(ht) // для отправки hashtable в буфер
Повторный вызов HT_destroy() ничего не сломает. Если использовать методы одной библиотеки внутри другой, то ее следует указать в зависимостях.
library HT
globals
private hashtable array ht
private boolean array allocated
private integer max = -1
endglobals
public function create takes nothing returns hashtable
local integer i = 0
loop
exitwhen i > max
if not allocated[i] then
set allocated[i] = true
return ht[i]
endif
set i = i+1
endloop
set max = max+1
set ht[max] = InitHashtable()
set allocated[max] = true
return ht[max]
endfunction
public function destroy takes hashtable h returns nothing
local integer i = 0
if h != null then
loop
exitwhen i > max
if ht[i] == h then
set allocated[i] = false
return
endif
set i = i+1
endloop
endif
endfunction
endlibrary
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
PT153, Они так разграничивают данные, StringhHash не научились юзать.
Отредактирован GetLocalPlayer
Реализовать список на хэш-таблице (+1 таблица)
Использовать в качестве ключа что-то кроме хэндл ид (хэш строки, например) избегая коллизий (+1 таблица).
У тебя может быть способность, которая должна сохранять данные на касетра + цель. При этом целей может быть несколько. Следовательно, в key идет ид кастера, в value ид всех целей. Если таких способностей несколько, +1 таблица на каждую.
Отредактирован KaneThaumaturge