interface queries

hgkjfhfdsj

Active Member
Reaction score
55
i have a few questions regarding the inner workings of 'method interfaces' when converted to jass.

original vjass
JASS:
interface i
    method onApply takes unit u returns nothing 
endinterface

struct Data extends i
    method onApply takes unit u returns nothing
        call UnitAddAbility(u, 'A000')
    endmethod
endstruct

JASS:
globals
// converted

//JASSHelper struct globals:
//cleaned the code up a little <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class="smilie smilie--sprite smilie--sprite1" alt=":)" title="Smile    :)" loading="lazy" data-shortname=":)" />
constant integer si__i=1
integer topIndex=0
integer instanceCount=0
integer array recycle
integer array Type
trigger array onDestroy
trigger array onApply
constant integer si__Data=2
unit arg_unit1
integer arg_this

endglobals

//Generated method caller for i.onApply
function sc__i_onApply takes integer this,unit u returns nothing
    set arg_this=this
    set arg_unit1=u
    call TriggerEvaluate(onApply[Type[this]])
endfunction

//Generated method executor for i.onApply
function sx__i_onApply takes integer this,unit u returns nothing
    set arg_this=this
    set arg_unit1=u
    call TriggerExecute(onApply[Type[this]])
endfunction
//Generated destructor of i
function sc__i_deallocate takes integer this returns nothing
    if this==null then
            //null struct
        return
    elseif (recycle[this]!=-1) then
            //double free
        return
    endif
    set arg_this=this
    call TriggerEvaluate(onDestroy[Type[this]])
    set recycle[this]=topIndex
    set topIndex=this
endfunction

//Generated method caller for Data.onApply
function sc__Data_onApply takes integer this,unit u returns nothing
        call UnitAddAbility(u, &#039;A000&#039;)
endfunction

//Generated allocator of Data
function s__Data__allocate takes nothing returns integer
 local integer kthis
 local integer this=topIndex
    if (this!=0) then
        set topIndex=recycle[this]
    else
        set instanceCount=instanceCount+1
        set this=instanceCount
    endif
    if (this&gt;8190) then
        //exceed array limit
        return 0
    endif

    set Type[this]=2
    set kthis=this //&lt;------

    set recycle[this]=-1
 return this
endfunction

//===========================================================================
// Trigger: Buff
//===========================================================================

    function s__Data_onApply takes integer this,unit u returns nothing
        call UnitAddAbility(u, &#039;A000&#039;)
    endfunction

//===========================================================================
function InitCustomTriggers takes nothing returns nothing
    //Function not found: call InitTrig_Buff()
endfunction
//===========================================================================
function main takes nothing returns nothing
    call ExecuteFunc(&quot;jasshelper__initstructs19849015&quot;)
endfunction

//Struct method generated initializers/callers:
function sa__Data_onApply takes nothing returns boolean
    call s__Data_onApply(arg_this,arg_unit1)
   return true
endfunction

function jasshelper__initstructs19849015 takes nothing returns nothing
    set onApply[2]=CreateTrigger()
    call TriggerAddCondition(onApply[2],Condition( function sa__Data_onApply))
    call TriggerAddAction(onApply[2], function sa__Data_onApply)
    set onDestroy[2]=null
endfunction


- whats the purpose kthis??
- when is the [ljass]//Generated method caller for i.onApply[/ljass] used (what is it equivalent to in vjass)
- when is the [ljass]//Generated method executor for i.onApply[/ljass] used (what is it equivalent to in vjass)
- why is sa__Data_onApply both the condition and action of the trigger?

thanks
 

Romek

Super Moderator
Reaction score
963
> whats the purpose kthis??
...Nothing, it seems. :p

> when is the //Generated method caller for i.onApply used (what is it equivalent to in vjass)
[ljass]call Data.onApply(u)[/ljass]

> when is the //Generated method executor for i.onApply used (what is it equivalent to in vjass)
[ljass]call Data.onApply.execute(u)[/ljass]

> why is sa__Data_onApply both the condition and action of the trigger?
So that the two above will both work. The 'caller' evaluates the trigger (checks the conditions), and the 'executor' runs the actions.
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top