vJass модуль list

Добавлен , опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
cJass
Тип:
Наработка
Модуль небольшой, который вывел из модуля дока, за что credits ему.
Использует interface теперь, и теперь можно запускать хоть методы, хоть функции вне него, короче как вам удобнее.
Также добавил пример использования функции.
Какие приемущества перед другими модулями?
  1. Невесомый, и может использоваться абсолютно в любой структуре, даже не в спеллах
  2. Можно использовать в структуре которая может инициилизировать несколько спеллов (грубо говоря у вас одна структура на все тригерные магии)
vJass
function interface push takes integer this returns nothing defaults nothing
//! nocjass
module list
    readonly static thistype array data
    readonly static integer count = 0
    boolean flush = false
    push    press

    method add takes nothing returns nothing
        set thistype.data[thistype.count] = this
        set thistype.count = thistype.count + 1
    endmethod
    
    method remove takes integer i returns nothing
        set thistype.count  = thistype.count - 1
        set thistype.data[i] = thistype.data[thistype.count]
    endmethod

    static method update takes nothing returns nothing
        local integer i = 0
        loop
            exitwhen i==thistype.count
            if thistype.data[i].flush then
                 call thistype.data[i].destroy()
                 call thistype.data[i].remove(i)
                 set i = i - 1
            else
                call thistype.data[i].press(thistype.data[i]).evaluate()
            endif
            set i = i + 1
        endloop
    endmethod

endmodule
//! endnocjass
cJass
function interface push takes integer this returns nothing defaults nothing
define <implement list>={
    readonly static thistype data[]
    readonly static integer count = 0
    boolean flush = false
    push     press
   
    nothing add(){thistype.data[thistype.count++] = this}
        
    nothing remove(integer i){thistype.data[i] = thistype.data[--thistype.count]}
        
    static nothing update(){
        integer i = 0
        whilenot(i == thistype.count){
        if (thistype.data[i].flush){
           thistype.data[i].destroy()
           thistype.data[i].remove(i--)
        } else {thistype.data[i].press(thistype.data[i]).evaluate()}i++}}
    }
}
Ну и собственно пример.
struct spell
    static timer tt=CreateTimer()
    unit cast
    unit targ
    real time
    implement list
endstruct

function onTimer takes spell this returns nothing
    set this.time = this.time - 0.04
    if this.time < 0.04 then
         if GetWidgetLife(this.targ)>.405 or GetWidgetLife(this.cast)>.405 then
             call SetUnitX(this.targ,GetUnitX(this.cast))
             call SetUnitY(this.targ,GetUnitY(this.cast))
         endif
         call this.remove(this)
         call this.destroy()
         if spell.count == 0 then
             call PauseTimer(spell.tt)
         endif
    endif
endfunction

function Cast takes nothing returns nothing
    local spell this = spell.create
    set this.cast = GetTriggerUnit()
    set this.targ = GetSpellTargetUnit()
    set this.time = GetUnitAbilityLevel(this.cast,GetSpellAbilityId())
    set this.push = onTimer
    call this.add()
    if spell.count==0 then
        call TimerStart(spell.tt,0.04,true,function this.update)
    endif
endfunction
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
24
12 лет назад
0
У тебя рак мозга? Повторяю для особо одаренных, юзер дата не имеет никакого отношения к концепции шаблонов. То что в конкретном примере используется она, это лишь частный случай, там могут использовать любые алгоритмы.
Ты смотришь на байты, а я смотрю на общее количество запускаемого дерьма получаемого в итоге.
Как раз на байты смотришь ТЫ. Я смотрю на процессорное время.
Ну короче кг\ам
0
19
12 лет назад
Отредактирован Nerevar
0
Faion:
Ты смотришь на байты, а я смотрю на общее количество запускаемого дерьма получаемого в итоге.
Как раз на байты смотришь ТЫ. Я смотрю на процессорное время.
Ну короче кг\ам
  SaveInteger(ObjectUserData,GetHandleId(h),Value,val)
  SaveInteger(ObjectUserData,GetHandleId(h),Value,val)
  SaveBoolean(ObjectUserData,GetHandleId(h),IsStatic,true)
  staticIndexes[staticIndexesCount] = val;
  staticIndexesCount++;
EXTREMLY FAST FUNC really
прям даже зашёл чтобы посмотреть как оно работает.
чувак, ты знал (а если не знал, то попроси кого нить разложить хештейбл на составные чтобы подтвердить что ты человек который не знает, что первый индекс таблицы лучше не ставить высоких значений)
GetHandleId(h) <--> Value
Сохраняя в одном месте, я уверен что даже со flush я переполню имеющуюся таблицу и получу смещения в очень скором времени (20 минут активного использования хватило, твоя система не справилась с нагрузкой простой системки, получил смещение и удивительно начались рандомно умирать объекты, опять же это все аттач по первому параметру таблицы, и спам их количеством).
короче мне лень таки сидеть и париться с тобой, юзай своё говно, моё говно не трогай, ты прав, твоя быстрая, безбажная, но только не говори мне что я тебе не предупреждал, что будут рандомные баги
2 пункта от Nerevar: завуалированный мат
0
24
12 лет назад
Отредактирован Nerevar
0
Повторяю для особо одаренных, юзер дата не имеет никакого отношения к концепции шаблонов.
а если не знал, то попроси кого нить разложить хештейбл на составные чтобы подтвердить что ты человек который не знает, что первый индекс таблицы лучше не ставить высоких значений
ахахахаха учи мать часть и не позорься.
Сохраняя в одном месте, я уверен что даже со flush я переполню имеющуюся таблицу и получу смещения в очень скором времени (20 минут активного использования хватило, твоя система не справилась с нагрузкой простой системки, получил смещение и удивительно начались рандомно умирать объекты, опять же это все аттач по первому параметру таблицы, и спам их количеством).
Советую обратится в религию, которая позволяет создавать экземпляры объекта. Да, в паблик я не выкладывал, но я уверен, что не составит великого труда раскопировать либу, и юзать в разных предметных областях разные экземпляры ._.
0
37
12 лет назад
0
YellowStar, хештейбл работает по распределению, а не индексам
0
19
12 лет назад
0
Faion:
Советую обратится в религию, которая позволяет создавать экземпляры объекта. Да, в паблик я не выкладывал, но я уверен, что не составит великого труда раскопировать либу, и юзать в разных предметных областях разные экземпляры ._.
Понятно, ты предлагаешь в своей либе делать то, что в моей делать даже не нужно, ну и я промолчу про твою компетентность в плане кода я уже понял.
ScorpioT1000:
YellowStar, хештейбл работает по распределению, а не индексам
в вк3, создаются иначе они.
call savehashtable (hashtable,xxx,yyy,data)
xxx - сохранённая таблица в таблице, лол
ууу - ячейка, с сортировкой (первая не сортируется -__-)
data - данные, декодируются в индификатор (там в общем, все типы хендла декодируются в агент, потом в хендл, короче там тухлая рекодировка, быстрее чем cache медленее чем структуры и прямой доступ)
0
37
12 лет назад
Отредактирован Nerevar
0
нету вообще никаких сортировок, вы че какие непонятливые!
xgm.ru/forum/showthread.php?t=56772 вот читай уже сто раз обсуждали
2 пункта от Nerevar: 1.1 (ненормативная лексика)
0
19
12 лет назад
Отредактирован Nerevar
0
Да как сортировки [вырезано] нету, должна быть, если её нету, то вообще НЕНАДО юзать эту таблицу с такими значениями, это же полный крах если забить больше 100 данных на 1 таблицу.
2 пункта от Nerevar: 1.1 (ненормативная лексика)
0
37
12 лет назад
Отредактирован Nerevar
0
почитай почитай тред
ой я тред перепутал сори
хештейбл быстрее бинарного и красно-черного и любого дерева, он явно быстрее метода перебора, быстрее сортированного списка
0
24
12 лет назад
0
Ну короче еллоу нуб и опозорился ._.
1
19
12 лет назад
1
ScorpioT1000:
хештейбл быстрее бинарного и красно-черного и любого дерева, он явно быстрее метода перебора, быстрее сортированного списка
If this is set to true, UnitUserData will be used. You should only set
this to false if something else in your map already uses UnitUserData.
A hashtable will be used instead, but it is about 60% slower.
Also you can use struct data, but it is about 30% slower.
Немного интересностей от грима, которому я доверяю побольше.
Ну и дальнейшего смысла срача я не вижу, я вижу наглядность и удобства использования наработок, и этого достаточно. При том, что мой массив явно не будет выходить за рамки 5-6 значений, его перебор будет простым и безболезненным в отличии от ваших привязок :lol:
0
37
12 лет назад
0
Доверяй математике ;)
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.