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

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

Ответ
 
ADOLF

offline
Опыт: 108,155
Активность: 4793
Участник проектов:
-Литература
-Rock'n'roll мертв
Патчи 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 Кбайт, 1245 просмотров )
Тип файла: 7z tesh.7z (494.4 Кбайт, 717 просмотров )
________________
war3 projects - SWS Murloc Expansion :: TcX 2009 :: cJass

Отредактировано Nekit1234007, 02.03.2011 в 23:21.
Старый 10.06.2009, 12:30
BK.Jugg
террорист из КиП
offline
Опыт: 27,066
Активность: 299
Участник проектов:
-Unreal Tournament
-Жучий бложик
» раскрыть
Код:
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
Активность: 44
Одни хэндлы)) Хотя ещё есть интересности)
Старый 10.06.2009, 12:40
Lolo_87

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

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

offline
Опыт: 36,798
Активность: 294
Участник проектов:
-Аниме
Для тех, у кого не лады с английским, перевел (и немного дополнил) текст:

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
________________
» Button Manager v1.8.2 » BLP Laboratory v0.5.0

Отредактировано ShadoW DaemoN, 05.08.2009 в 16:47.
Старый 10.06.2009, 13:13
BK.Jugg
террорист из КиП
offline
Опыт: 27,066
Активность: 299
Участник проектов:
-Unreal Tournament
-Жучий бложик
ShadoW DaemoN, ятп это для сис-мы Save/Load?
________________
"у меня нет денег на мак, а когда будут - не куплю его :DD" - Пиначет
Старый 10.06.2009, 13:17
ADOLF

offline
Опыт: 108,155
Активность: 4793
Участник проектов:
-Литература
-Rock'n'roll мертв
свдн молодец=)

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

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

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

offline
Опыт: 36,798
Активность: 294
Участник проектов:
-Аниме
BK.Jugg, не только. Близзы утверждают, их новоиспеченная хэш-таблица работает намного быстрее, чем GC, да и хранить можно практически любой тип. Если их заверения верны, то это значит, что системы аттача числа на хендл внезапно становятся бесполезными, так как в большинстве случаев новые нативные функции будут работать быстрее.
________________
» "Всё, что я вижу в этом сообщении - это задетое чувство ложного престижа." © sidious
» "/quit Shadow_Daemon" is not supported by XGM kernel.
Старый 10.06.2009, 13:25
Lolo_87

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

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

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

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

offline
Опыт: 1,810
Активность: 0
Молодец вирусаписател=) который вынудил близов сделать такую весчь, поистене внезапный и очень хороший подарок
Старый 10.06.2009, 13:33
Артте
Open up your eyes
offline
Опыт: 23,853
Активность: 51
Участник проектов:
-Counter-Strike
Ну наконец-то, осталось это пощупать (с)
________________
For Freedom!
Старый 10.06.2009, 13:36
NETRAT

offline
Опыт: 83,812
Активность: 0
Участник проектов:
-The Elder Scrolls
долой заплатки! даешь хеш вместо кеша!
мне совсем не нравится концепция подмены/дополнения старого велосипеда новым вместо того что бы просто залатать дырки старого... кто знает какие ошибки еще могут быть в этих хеш-таблицаъ =\
________________
"Когда уже трусы и носки в стиле XGM будут?" © Trok-Ferot
Старый 10.06.2009, 13:37
Артте
Open up your eyes
offline
Опыт: 23,853
Активность: 51
Участник проектов:
-Counter-Strike
Благо еще не начал на структурах еще не начал делать много чего. Хотя хз что удобнее:)
Старый 10.06.2009, 13:37
ShadoW DaemoN

offline
Опыт: 36,798
Активность: 294
Участник проектов:
-Аниме
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, про дату выхода пока ничего неизвестно. Возможно, в середине/конце лета.
________________
» Button Manager v1.8.2 » BLP Laboratory v0.5.0
Старый 10.06.2009, 13:38
Ranger21
I love beatiul days XD
offline
Опыт: 13,284
Активность: 150
Участник проектов:
-Nano-survival
-Блог им. Ranger21
Короче поживём и увидим, заодно гляну стоит ли затрачивать время на переписывание кода или просто дождусь ск2 и там буду делать свою карту.
________________
Starcraft2 attacke!
Старый 10.06.2009, 13:42
SRes
1110101000
offline
Опыт: 9,997
Активность: 0
Ох крутота ! ShadoW DaemoN, Спасиб за перевод. Думаю, таблицы будут очень и очень удобными. Замена глючному SCV ! Быстрее бы попробовать юзать своими руками...
Старый 10.06.2009, 13:48
Ответ

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

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

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

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



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