Добавлен Singularity,
не публикуется
Здравствуйте,
В рамках улучшения моей статьи о JASS провёл небольшое исследование о типах данных в JASS и их структуре. В своём текущем виде типы не распределены должным образом, что затрудняет понимание. Нужно подтверждение или опровержение того, верно ли я понял, что собой представляет тот или иной тип.
В рамках улучшения моей статьи о JASS провёл небольшое исследование о типах данных в JASS и их структуре. В своём текущем виде типы не распределены должным образом, что затрудняет понимание. Нужно подтверждение или опровержение того, верно ли я понял, что собой представляет тот или иной тип.
Итак...
Текста много, спрятано под кат
- integer, boolean: Прямые наследники типа __int32 языка программирования Си. Обладают теми же свойствами, что и этот тип.
- real: Прямой наследник типа float языка программирования Си.
- string: Изначально задаётся как массив типа char до 1023 байт, который затем отсылается на добавление в хеш-таблицу(Хеш-таблица), где содержатся иные массивы типа char. Скорее всего, при работе с этим типом также используется ассоциативный массив, который сначала хэширует строку (функция StringHash в JASS), потом этот хэш строки (число) переводится в строку и становится индексом ассоциативного массива. Если по этому адресу в массиве нет никакой ячейки в хэш-таблице, то в тип string записывается ссылка на новую ячейку, куда заносится строка. Если ячейка обнаруживается, то заносится адрес существующей ячейки. В дальнейшем тип string действует как указатель, но не на адрес в памяти, а на адрес в хэш-таблице. При этом конкатенация строки, выделение из неё подстроки или любая иная операция с ней повторяет операцию с отсылкой на добавление в хэш-таблицу и прогон через ассоциативный массив.
- agent: Просто одна большая группа данных, которую возможно сохранить в hashtable. Скорее всего, это указатель, который указывает на указатель, который указывает на указатель (:[)... (например, agent ссылается на определённый widget, а widget ссылается на определённого unit, который ссылается на таблицу в памяти со всеми свойствами боевой единицы).
- Везде, где я писал "ссылка на идентификатор": На самом деле, не что иное, как битовые поля. gamestate, igamestate и fgamestate, возможно, тоже реализованы через битовые поля.
- group, force, dialog, multiboard, leaderboard (возможно): Связные списки, наверняка однонаправленные. group содержит список объектов типа unit, force содержит список объектов типа player, dialog содержит список объектов типа button, multiboard содержит список объектов типа multiboarditem, leaderboard содержит списки объектов player и integer.
- Прочее: Просто таблицы со свойствами.
Заранее благодарен за пояснение.
С уважением,
Singularity, 03.07.2017
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Раньше была фишка fogstate exploit
Про диалог и мультиборд бред, это хендлы самих обьектов, кнопки и текст вовсе отдельные обьекты, такие как dialog button и multiboarditem.
Отредактирован quq_CCCP
Fogstate exploit это один из многих не досмотров близзардов, как и ретурн баг и прочие ошибки.