XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
adic3x

offline
Опыт: 107,539
Активность:
Патчи 1.24+ для картоделов.

Patch 1.24: подробности о реализации

В патч включены 97 новых функций и один тип (производный от handle) для облегчения жизни картоделам. Эти расширения также касаются и нового хранилища данных - хэш-таблицы (hashtable), которая по структуре похожа на gamecache (в дальнейшем - GC).
В GC разрешено хранить только юнитов и базисные типы (integer, real, boolean, string), в то время как хэш-таблицы располагают средствами для хранения большинства типов, производных от handle. Еще одно отличие заключается в том, что для ключей в хэш-таблице используются целые числа (integer) (в GC - строки (string)). Вдобавок, хранение и получение данных из хэш-таблиц производится намного быстрее и безопаснее, чем аналогичные операции с GC.

Хэш-функции

Новые функции GetHandleId и StringHash конвертируют handle или строку в число. Возвращаемые значения могут неявно использоваться в качестве ключей для хэш-таблиц.
StringHash (string): integer - похоже на функцию S2I с одним отличием - эта может принимать любую строку в качестве параметра. Возвращает хеш от строки.
GetHandleId (handle): integer - работает точно так же, как и функция H2I. Для уменьшения конфликтов с совпадением имен, функцию назвали GetHandleId.

Хэш-таблицы

Хэш-таблицы могут быть объявлены как переменные типа hashtable. Как упоминалось выше, принцип работы хэш-таблицы очень схож с GC. Чтобы создать новую хэш-таблицу используйте InitHashtable:
local hashtable ht = InitHashtable()
Все типы хендлов разделяют одно и то же именное пространство ключей. То есть, если вызвать SaveUnitHandle после SavePlayerHandle с одинаковыми ключами, значение player перезапишется на значение unit. Несмотря на то, что именное пространство одно, функции SaveXXXHandle и LoadXXXHandle будут возвращать результат корректно:
call SavePlayerHandle(key, ...)
set myunit = GetUnitHandle(key, ...)
// в myunit запишется null
Все хендлы, сохраненные или удаленные из хэш-таблицы, автоматически ссылочно нумеруются. Это позволяет сохранять объекты в хэш-таблицу без риска досрочного освобождения памяти. Нумерация ссылок обновляется при добавлении, удалении и перезаписи объекта в хэш-таблицу.

Смотрите также:

Прикрепленные файлы
Тип файла: rar common.j_1.24.rar (17.5 Кбайт, 1253 просмотров )
Тип файла: 7z tesh.7z (494.4 Кбайт, 732 просмотров )

Отредактировано Nekit1234007, 02.03.2011 в 23:21.
Старый 10.06.2009, 12:30
BK.Jugg
террорист из КиП
offline
Опыт: 26,966
Активность:
» раскрыть
Код:
The complete list of new jass functions are:

InitHashtable
GetHandleId
StringHash

SaveInteger
SaveReal
SaveBoolean
SaveStr
SavePlayerHandle
SaveWidgetHandle
SaveDestructableHandle
SaveItemHandle
SaveUnitHandle
SaveAbilityHandle
SaveTimerHandle
SaveTriggerHandle
SaveTriggerConditionHandle
SaveTriggerActionHandle
SaveTriggerEventHandle
SaveForceHandle
SaveGroupHandle
SaveLocationHandle
SaveRectHandle
SaveBooleanExprHandle
SaveSoundHandle
SaveEffectHandle
SaveUnitPoolHandle
SaveItemPoolHandle
SaveQuestHandle
SaveQuestItemHandle
SaveDefeatConditionHandle
SaveTimerDialogHandle
SaveLeaderboardHandle
SaveMultiboardHandle
SaveMultiboardItemHandle
SaveTrackableHandle
SaveDialogHandle
SaveButtonHandle
SaveTextTagHandle
SaveLightningHandle
SaveImageHandle
SaveUbersplatHandle
SaveRegionHandle
SaveFogStateHandle
SaveFogModifierHandle

LoadInteger
LoadReal
LoadBoolean
LoadStr
LoadPlayerHandle
LoadWidgetHandle
LoadDestructableHandle
LoadItemHandle
LoadUnitHandle
LoadAbilityHandle
LoadTimerHandle
LoadTriggerHandle
LoadTriggerConditionHandle
LoadTriggerActionHandle
LoadTriggerEventHandle
LoadForceHandle
LoadGroupHandle
LoadLocationHandle
LoadRectHandle
LoadBooleanExprHandle
LoadSoundHandle
LoadEffectHandle
LoadUnitPoolHandle
LoadItemPoolHandle
LoadQuestHandle
LoadQuestItemHandle
LoadDefeatConditionHandle
LoadTimerDialogHandle
LoadLeaderboardHandle
LoadMultiboardHandle
LoadMultiboardItemHandle
LoadTrackableHandle
LoadDialogHandle
LoadButtonHandle
LoadTextTagHandle
LoadLightningHandle
LoadImageHandle
LoadUbersplatHandle
LoadRegionHandle
LoadFogStateHandle
LoadFogModifierHandle

HaveSavedInteger
HaveSavedReal
HaveSavedBoolean
HaveSavedString
HaveSavedHandle

RemoveSavedInteger
RemoveSavedReal
RemoveSavedBoolean
RemoveSavedString
RemoveSavedHandle


FlushParentHashtable
FlushChildHashtable


o_O новые жасс функции чтоле?

Отредактировано ADOLF, 10.06.2009 в 12:45.
Старый 10.06.2009, 12:38
Reaver
I am Олдфаг!
offline
Опыт: 3,426
Активность:
Одни хэндлы)) Хотя ещё есть интересности)
Старый 10.06.2009, 12:40
Lolo_87

offline
Опыт: 1,810
Активность:
Я думаю вместо SCV они хотят сделать вот это) теперь КЭШь отдыхает, хм... страно куда он будет их сам сохранять...

Отредактировано Lolo_87, 10.06.2009 в 12:47.
Старый 10.06.2009, 12:42
SRes
1110101000
offline
Опыт: 9,997
Активность:
Близзы рулят ! Они убили РБ ! Я был прав :) ! Зато, они добавили аналог РБ как нативки ! Что может быть лучше ?
Если я чего-то не понял - пожалуйста не пинайте, т.к. я инглиш не сильно бум-бум
Старый 10.06.2009, 12:43
Ranger21
I love beatiul days XD
offline
Опыт: 13,274
Активность:
Ммм... теперь не придётся пользоваться функцией H2I?
=))) дык это же ништяк...
Надеюсь в СК2 редакторе они учтут все эти фичи
Старый 10.06.2009, 13:09
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
Для тех, у кого не лады с английским, перевел (и немного дополнил) текст:

Patch 1.24: подробности о реализации

В патч включены 97 новых функций и один тип (производный от handle) для облегчения жизни картоделам. Эти расширения также касаются и нового хранилища данных - хэш-таблицы (hashtable), которая по структуре похожа на gamecache (в дальнейшем - GC).
В GC разрешено хранить только юнитов и базисные типы (integer, real, boolean, string), в то время как хэш-таблицы располагают средствами для хранения большинства типов, производных от handle. Еще одно отличие заключается в том, что для ключей в хэш-таблице используются целые числа (integer) (в GC - строки (string)). Вдобавок, хранение и получение данных из хэш-таблиц производится намного быстрее и безопаснее, чем аналогичные операции с GC.

Хэш-функции

Новые функции GetHandleId и StringHash конвертируют handle или строку в число. Возвращаемые значения могут неявно использоваться в качестве ключей для хэш-таблиц.
StringHash (string): integer - похоже на функцию S2I с одним отличием - эта может принимать любую строку в качестве параметра. Возвращает хеш от строки.
GetHandleId (handle): integer - работает точно так же, как и функция H2I. Для уменьшения конфликтов с совпадением имен, функцию назвали GetHandleId.

Хэш-таблицы

Хэш-таблицы могут быть объявлены как переменные типа hashtable. Как упоминалось выше, принцип работы хэш-таблицы очень схож с GC. Чтобы создать новую хэш-таблицу используйте InitHashtable:
local hashtable ht = InitHashtable()
Все типы хендлов разделяют одно и то же именное пространство ключей. То есть, если вызвать SaveUnitHandle после SavePlayerHandle с одинаковыми ключами, значение player перезапишется на значение unit. Несмотря на то, что именное пространство одно, функции SaveXXXHandle и LoadXXXHandle будут возвращать результат корректно:
call SavePlayerHandle(key, ...)
set myunit = GetUnitHandle(key, ...)
// в myunit запишется null
Все хендлы, сохраненные или удаленные из хэш-таблицы, автоматически ссылочно нумеруются. Это позволяет сохранять объекты в хэш-таблицу без риска досрочного освобождения памяти. Нумерация ссылок обновляется при добавлении, удалении и перезаписи объекта в хэш-таблицу.
<Далее идет список функций>
Оригинал: Karune
Перевод: Shadow_Daemon

Отредактировано ShadoW DaemoN, 05.08.2009 в 16:47.
Старый 10.06.2009, 13:13
BK.Jugg
террорист из КиП
offline
Опыт: 26,966
Активность:
ShadoW DaemoN, ятп это для сис-мы Save/Load?
Старый 10.06.2009, 13:17
adic3x

offline
Опыт: 107,539
Активность:
свдн молодец=)

хм, ну я пока немогу ничего сказать... это надо пощупать)

ADOLF добавил:
BK.Jugg, нет
Старый 10.06.2009, 13:20
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,681
Активность:
Хорошо:
Цитата:
намного быстрее и безопаснее

Плохо:
много переделывать придется т_т у меня около 70 спеллов в карте на кеше...
Старый 10.06.2009, 13:20
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
BK.Jugg, не только. Близзы утверждают, их новоиспеченная хэш-таблица работает намного быстрее, чем GC, да и хранить можно практически любой тип. Если их заверения верны, то это значит, что системы аттача числа на хендл внезапно становятся бесполезными, так как в большинстве случаев новые нативные функции будут работать быстрее.
Старый 10.06.2009, 13:25
Lolo_87

offline
Опыт: 1,810
Активность:
Это замена РБ или просто нововведение?
Старый 10.06.2009, 13:26
agentex

offline
Опыт: 34,534
Активность:
охренеть, ведь этот патч перевернет весь мир
да не ожидал такой щедрости от близов.

agentex добавил:
а кода патчик станет доступен для качания? на офф фтп его еще нет

agentex добавил:
да, теперь ждем обновленный ЖНГП
Старый 10.06.2009, 13:32
Lolo_87

offline
Опыт: 1,810
Активность:
Молодец вирусаписател=) который вынудил близов сделать такую весчь, поистене внезапный и очень хороший подарок
Старый 10.06.2009, 13:33
Артте
Open up your eyes
offline
Опыт: 24,373
Активность:
Ну наконец-то, осталось это пощупать (с)
Старый 10.06.2009, 13:36
NETRAT

offline
Опыт: 83,762
Активность:
долой заплатки! даешь хеш вместо кеша!
мне совсем не нравится концепция подмены/дополнения старого велосипеда новым вместо того что бы просто залатать дырки старого... кто знает какие ошибки еще могут быть в этих хеш-таблицаъ =\
Старый 10.06.2009, 13:37
Артте
Open up your eyes
offline
Опыт: 24,373
Активность:
Благо еще не начал на структурах еще не начал делать много чего. Хотя хз что удобнее:)
Старый 10.06.2009, 13:37
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
Lolo_87, это и то, и другое. Для повышения стабильности карт они ввели нативки, которые примерно похожи по принципу работы на эти две функции:
Код:
// GetHandleId
function H2I takes handle h returns integer
  return h
  return 0
endfunction

// String Hash
function S2Ix takes string s returns integer
  return s
  return 0
endfunction


Вообще, мне кажется, что с выходом нового патча все будут потихоньку перебираться на хэш-таблицу. И так ясно, что она удобней будет... А вот что быстрее - хэш-таблица или массивы - было бы интересно узнать.

agentex, про дату выхода пока ничего неизвестно. Возможно, в середине/конце лета.
Старый 10.06.2009, 13:38
Ranger21
I love beatiul days XD
offline
Опыт: 13,274
Активность:
Короче поживём и увидим, заодно гляну стоит ли затрачивать время на переписывание кода или просто дождусь ск2 и там буду делать свою карту.
Старый 10.06.2009, 13:42
SRes
1110101000
offline
Опыт: 9,997
Активность:
Ох крутота ! ShadoW DaemoN, Спасиб за перевод. Думаю, таблицы будут очень и очень удобными. Замена глючному SCV ! Быстрее бы попробовать юзать своими руками...
Старый 10.06.2009, 13:48
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 12:36.