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

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

Ответ
 
DioD

offline
Опыт: 45,134
Активность:
SDARS
После того как системой стали хоть немного интересоваться, а затупов в ней очень много, я решил объяснить, что и зачем было сделано, в этой теме.

Всё будет расказываться по порядку, так что бы сами после прочтения могли собрать нечто подобное для себя, а не использовать чужую разработку.

Что нам надо:

Код:
globals
    
    integer array udg_SDARS_Index
    //Служебный массив, служит для сохранения и получения данных
    integer array udg_SDARS_Data
    //Служебный массив, служит для хранения данных
    point array udg_SDARS_Block
    //Служебный массив, сохраняет точку, координаты которой есть начало и конец группы слотов.
endglobals


Как вы видите система не позволяет пользователю напрямую использовать два этих массива, скорее всего вмешательство приведёт к потере информации.

Ретурн баг не используется, поэтому массивов данных может быть много, и они будут идти зеркалом.
Поэтому система является статичной, хотя, вы всегда знаете что где находится и можете вмешаться в действия.

Код:
function InitSDARS takes nothing returns nothing
    set udg_SDARS_Index[8191] = 8190
    //Айди 8191 используется в качестве служебного числа
    //Лучше не использовать его вне "СДАРС", хотя это вполне безопасно
    //Айди 0 содежрит в себе последний свободный слот, устанавлявается автоматически
    //Установив айди 0 на 8190 вы "очищаете" весь массив
    //Все функции всегда используют Айди1 для получения нового слота
    //Поэтому следует заранее выделять его, а сразу после выделения получать новый в отдельном потоке
    //Это поможет не задерживать поток, особенно это важно при частых вызовах
    //Функции будут менять первый и последний слот местами
    //1-2-3-4-5
    //После выделения станет
    //5-2-3-4-%1
    //Слот 1 окажется за границей свободных слотов и будет автоматически помечен как занятый
    //Как вы можете видеть массив заполняется с конца
    //Для исправления этого будет придпринято следующее
    loop
        
        set udg_SDARS_Index[udg_SDARS_Index[8191]] = 8191 - udg_SDARS_Index[8191]
        
        set udg_SDARS_Index[8191] = udg_SDARS_Index[8191] - 1
        exitwhen udg_SDARS_Index[8191] == 0
    endloop
    //Заполнения служебного массива создаст массив в котором
    //Слот 8190 будет хранить число 1
    //а слот 1 будет хранить число 8190
    //Таким образом массивы данных будут заполняться с начала
    //Можно было бы исправить выделение слотов таким образом что
    //5-4-3-2-1
    //Станет в последствии
    //1-4-3-2-%5
    //Но как можете видеть всё равно один массив будет считаться "перевёрнутым"
    
    //Теперь о добавочных величинах
    //Айди0 имеет изначальное значение 8190 так как это последний доступных слот в массиве
    //Каждый раз при выделении или освобождении слота эта величина меняется
    set udg_SDARS_Index[0]    = 8190
    
    //Последний слот оставлен для различных проверок, в том числе и проверок на падение потоков
    //Всегда в любой небезопасной функции следует устанавливать значение на любое выбраное вами
    set udg_SDARS_Index[8191] = 666
    //В этом случае при падении потока число будет различаться и вы сможете обнаружить ошибку
    //Я бы советовал вводить всем функциям айди, тогда это число будет иметь айди упавшей функции
    
    //Блок значение связывает начало и конец группы слотов используя точку, это достаточно быстро и удобно
    //Так как точка тоже объект можно добовлять параметры и на неё
    //В первом случае массив готов к применению сразу, во втором он должен быть запущен таким-же образом как и Индекс
endfunction
Старый 02.02.2007, 21:33
Ответ

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

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

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

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



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