vJASS & Zinc Documentation
For the latest documentation about how it works vJASS and Zinc language layers for Warcraft III, please follow these links:
Jasshelper documentation - Zinc documentation - WC3 Optimizer documentation

Trigger

moyack · 467

0 Members and 1 Guest are viewing this topic.

Trigger
on: February 18, 2012, 05:59:47 AM
Category: Execution, Variables
Language: vJASS

Related Topics or Resources



by

by

by

by

by

by

Code: jass
  1. library Trigger /* v1.1.0.2
  2. ************************************************************************************
  3. *
  4. *   */ uses /*
  5. *  
  6. *       */ ErrorMessage         /*
  7. *       */ BooleanExpression    /*
  8. *       */ NxListT              /*
  9. *               */ UniqueNxListT                /*
  10. *       */ Init                 /*
  11. *               */ AllocT                               /*
  12. *
  13. ************************************************************************************
  14. *
  15. *   struct Trigger extends array
  16. *          
  17. *       Fields
  18. *       -------------------------
  19. *
  20. *           readonly trigger trigger
  21. *               -   use to register events, nothing else
  22. *               -   keep in mind that triggers referencing this trigger won't fire when events fire
  23. *               -   this trigger will fire when triggers referencing this trigger are fired
  24. *
  25. *           boolean enabled
  26. *
  27. *       Methods
  28. *       -------------------------
  29. *
  30. *           static method create takes boolean reversed returns Trigger
  31. *                               -       when reverse is true, the entire expression is run in reverse
  32. *
  33. *           method destroy takes nothing returns nothing
  34. *
  35. *           method register takes boolexpr expression returns TriggerCondition
  36. *
  37. *           method reference takes Trigger trig returns TriggerReference
  38. *               -   like register, but for triggers instead
  39. *
  40. *           method fire takes nothing returns nothing
  41. *
  42. *           method clear takes nothing returns nothing
  43. *               -   clears expressions
  44. *           method clearReferences takes nothing returns nothing
  45. *               -   clears trigger references
  46. *           method clearBackReferences takes nothing returns nothing
  47. *               -   removes references for all triggers referencing this trigger
  48. *           method clearEvents takes nothing returns nothing
  49. *               -   clears events
  50. *
  51. *           debug static method calculateMemoryUsage takes nothing returns integer
  52. *           debug static method getAllocatedMemoryAsString takes nothing returns string
  53. *
  54. ************************************************************************************
  55. *
  56. *   struct TriggerReference extends array
  57. *          
  58. *       Methods
  59. *       -------------------------
  60. *
  61. *           method destroy takes nothing returns nothing
  62. *
  63. *           method replace takes Trigger trigger returns nothing
  64. *
  65. ************************************************************************************
  66. *
  67. *   struct TriggerCondition extends array
  68. *
  69. *       Methods
  70. *       -------------------------
  71. *
  72. *           method destroy takes nothing returns nothing
  73. *
  74. *           method replace takes boolexpr expr returns nothing
  75. *
  76. ************************************************************************************/
  77.     private struct TriggerMemory extends array
  78.         //! runtextmacro CREATE_TABLE_FIELD("public", "trigger", "trig", "trigger")
  79.         //! runtextmacro CREATE_TABLE_FIELD("public", "triggercondition", "tc", "triggercondition")
  80.        
  81.         //! runtextmacro CREATE_TABLE_FIELD("public", "integer", "expression", "BooleanExpression")                 //the trigger's expression
  82.        
  83.         //! runtextmacro CREATE_TABLE_FIELD("public", "boolean", "enabled", "boolean")
  84.        
  85.         method updateTrigger takes nothing returns nothing
  86.             if (tc != null) then
  87.                 call TriggerRemoveCondition(trig, tc)
  88.             endif
  89.        
  90.             if (enabled and expression.expression != null) then
  91.                 set tc = TriggerAddCondition(trig, expression.expression)
  92.             else
  93.                                 call tc_clear()
  94.             endif
  95.         endmethod
  96.        
  97.         private static method init takes nothing returns nothing
  98.             //! runtextmacro INITIALIZE_TABLE_FIELD("trig")
  99.             //! runtextmacro INITIALIZE_TABLE_FIELD("tc")
  100.            
  101.             //! runtextmacro INITIALIZE_TABLE_FIELD("expression")
  102.            
  103.             //! runtextmacro INITIALIZE_TABLE_FIELD("enabled")
  104.         endmethod
  105.        
  106.         implement Init
  107.     endstruct
  108.  
  109.     private struct TriggerAllocator extends array
  110.         implement AllocT
  111.     endstruct
  112.    
  113.     private keyword TriggerReferencedList
  114.    
  115.     private struct TriggerReferenceListData extends array
  116.         //! runtextmacro CREATE_TABLE_FIELD("public", "integer", "trig", "TriggerMemory")           //the referenced trigger
  117.         //! runtextmacro CREATE_TABLE_FIELD("public", "integer", "ref", "TriggerReferencedList")    //the TriggerReferencedList data for that trigger (relationship in 2 places)
  118.         //! runtextmacro CREATE_TABLE_FIELD("public", "integer", "expr", "BooleanExpression")
  119.    
  120.         implement NxListT
  121.        
  122.         private static method init takes nothing returns nothing
  123.             //! runtextmacro INITIALIZE_TABLE_FIELD("trig")
  124.             //! runtextmacro INITIALIZE_TABLE_FIELD("ref")
  125.             //! runtextmacro INITIALIZE_TABLE_FIELD("expr")
  126.         endmethod
  127.        
  128.         implement Init
  129.     endstruct
  130.  
  131.     /*
  132.     *   List of triggers referencing current trigger
  133.     */
  134.     private struct TriggerReferencedList extends array
  135.         //! runtextmacro CREATE_TABLE_FIELD("public", "integer", "trig", "TriggerMemory")               //the trigger referencing this trigger
  136.         //! runtextmacro CREATE_TABLE_FIELD("public", "integer", "ref", "TriggerReferenceListData")     //the ref
  137.    
  138.         implement NxListT
  139.        
  140.         method updateExpression takes nothing returns nothing
  141.             local thistype node
  142.             local boolexpr expr
  143.            
  144.             /*
  145.             *   Retrieve the expression of the referenced trigger
  146.             */
  147.             if (TriggerMemory(this).enabled) then
  148.                 set expr = TriggerMemory(this).expression.expression
  149.             else
  150.                 set expr = null
  151.             endif
  152.            
  153.             /*
  154.             *   Iterate over all triggers referencing this trigger
  155.             */
  156.             set node = first
  157.             loop
  158.                 exitwhen node == 0
  159.                
  160.                 /*
  161.                 *   Replace expression and then update the target trigger
  162.                 */
  163.                 call node.ref.expr.replace(expr)
  164.                 call node.trig.updateTrigger()
  165.                 call TriggerReferencedList(node.trig).updateExpression()
  166.                
  167.                 set node = node.next
  168.             endloop
  169.            
  170.             set expr = null
  171.         endmethod
  172.        
  173.         method purge takes nothing returns nothing
  174.             local thistype node = first
  175.            
  176.             loop
  177.                 exitwhen node == 0
  178.                
  179.                 /*
  180.                 *   Unregister the expression from the referencing trigger
  181.                 *   Update that trigger
  182.                 */
  183.                 call node.ref.expr.unregister()
  184.                 call node.trig.updateTrigger()
  185.                 call node.ref.remove()
  186.                 call TriggerReferencedList(node.trig).updateExpression()
  187.                
  188.                 set node = node.next
  189.             endloop
  190.            
  191.             call destroy()
  192.         endmethod
  193.        
  194.         method clearReferences takes nothing returns nothing
  195.             local thistype node = first
  196.            
  197.             loop
  198.                 exitwhen node == 0
  199.                
  200.                 /*
  201.                 *   Unregister the expression from the referencing trigger
  202.                 *   Update that trigger
  203.                 */
  204.                 call node.ref.expr.unregister()
  205.                 call node.trig.updateTrigger()
  206.                 call node.ref.remove()
  207.                 call TriggerReferencedList(node.trig).updateExpression()
  208.                
  209.                 set node = node.next
  210.             endloop
  211.            
  212.             call clear()
  213.         endmethod
  214.        
  215.         private static method init takes nothing returns nothing
  216.             //! runtextmacro INITIALIZE_TABLE_FIELD("trig")
  217.             //! runtextmacro INITIALIZE_TABLE_FIELD("ref")
  218.         endmethod
  219.        
  220.         implement Init
  221.     endstruct
  222.    
  223.     /*
  224.     *   List of triggers current trigger references
  225.     */
  226.     private struct TriggerReferenceList extends array
  227.         method add takes TriggerReferencedList trig returns thistype
  228.             local TriggerReferenceListData node = TriggerReferenceListData(this).enqueue()
  229.            
  230.             /*
  231.             *   Register the trigger as a reference
  232.             */
  233.             set node.trig = trig
  234.             set node.ref = TriggerReferencedList(trig).enqueue()
  235.             set node.ref.trig = this
  236.             set node.ref.ref = node
  237.            
  238.             /*
  239.             *   Add the reference's expression
  240.             *
  241.             *   Add even if null to ensure correct order
  242.             */
  243.             if (TriggerMemory(trig).enabled) then
  244.                 set node.expr = TriggerMemory(this).expression.register(TriggerMemory(trig).expression.expression)
  245.             else
  246.                                 set node.expr = TriggerMemory(this).expression.register(null)
  247.             endif
  248.            
  249.             call TriggerMemory(this).updateTrigger()
  250.            
  251.             /*
  252.             *   Update the expressions of triggers referencing this trigger
  253.             */
  254.             call TriggerReferencedList(this).updateExpression()
  255.            
  256.             /*
  257.             *   Return the reference
  258.             */
  259.             return node
  260.         endmethod
  261.        
  262.         method erase takes nothing returns nothing
  263.             local TriggerReferenceListData node = this          //the node
  264.             set this = node.ref.trig                            //this trigger        
  265.            
  266.             call node.expr.unregister()
  267.             call TriggerMemory(this).updateTrigger()
  268.             call TriggerReferencedList(this).updateExpression()
  269.            
  270.             call node.ref.remove()
  271.             call node.remove()
  272.         endmethod
  273.        
  274.         method replace takes TriggerMemory trig returns nothing
  275.             local TriggerReferenceListData node = this
  276.             set this = node.list
  277.            
  278.             call node.ref.remove()
  279.            
  280.             set node.trig = trig
  281.             set node.ref = TriggerReferencedList(trig).enqueue()
  282.             set node.ref.trig = this
  283.             set node.ref.ref = node
  284.            
  285.             if (trig.enabled) then
  286.                 call node.expr.replace(trig.expression.expression)
  287.             else
  288.                 call node.expr.replace(null)
  289.             endif
  290.            
  291.             call TriggerMemory(this).updateTrigger()
  292.            
  293.             call TriggerReferencedList(this).updateExpression()
  294.         endmethod
  295.        
  296.         /*
  297.         *   Purges all references
  298.         */
  299.         method purge takes nothing returns nothing
  300.             local TriggerReferenceListData node = TriggerReferenceListData(this).first
  301.            
  302.             loop
  303.                 exitwhen node == 0
  304.                
  305.                 /*
  306.                 *   Removes the reference from the referenced list
  307.                 *   (triggers no longer referenced by this)
  308.                 */
  309.                 call node.ref.remove()
  310.                
  311.                 set node = node.next
  312.             endloop
  313.            
  314.             /*
  315.             *   Destroy all references by triggers referencing this
  316.             */
  317.             call TriggerReferencedList(this).purge()
  318.            
  319.             call TriggerReferenceListData(this).destroy()
  320.         endmethod
  321.        
  322.         method clearReferences takes nothing returns nothing
  323.             local TriggerReferenceListData node = TriggerReferenceListData(this).first
  324.            
  325.             loop
  326.                 exitwhen node == 0
  327.                
  328.                 /*
  329.                 *   Removes the reference from the referenced list
  330.                 *   (triggers no longer referenced by this)
  331.                 */
  332.                 call node.ref.remove()
  333.                                
  334.                                 /*
  335.                                 *       unregisters code
  336.                                 */
  337.                                 call node.expr.unregister()
  338.                
  339.                 set node = node.next
  340.             endloop
  341.            
  342.             call TriggerReferenceListData(this).clear()
  343.         endmethod
  344.     endstruct
  345.    
  346.     private struct TriggerReferenceData extends array
  347.         static if DEBUG_MODE then
  348.             //! runtextmacro CREATE_TABLE_FIELD("private", "boolean", "isTriggerReference", "boolean")
  349.         endif
  350.        
  351.         static method create takes TriggerReferenceList origin, TriggerMemory ref returns thistype
  352.             local thistype this = origin.add(ref)
  353.            
  354.             debug set isTriggerReference = true
  355.            
  356.             return this
  357.         endmethod
  358.        
  359.         method destroy takes nothing returns nothing
  360.             debug call ThrowError(this == 0,                "Trigger", "destroy", "TriggerReferenceData", this, "Attempted To Destroy Null TriggerReferenceData.")
  361.             debug call ThrowError(not isTriggerReference,   "Trigger", "destroy", "TriggerReferenceData", this, "Attempted To Destroy Invalid TriggerReferenceData.")
  362.            
  363.             debug set isTriggerReference = false
  364.            
  365.             call TriggerReferenceList(this).erase()
  366.         endmethod
  367.        
  368.         method replace takes Trigger trig returns nothing
  369.             debug call ThrowError(this == 0,                "Trigger", "destroy", "TriggerReferenceData", this, "Attempted To Destroy Null TriggerReferenceData.")
  370.             debug call ThrowError(not isTriggerReference,   "Trigger", "destroy", "TriggerReferenceData", this, "Attempted To Destroy Invalid TriggerReferenceData.")
  371.            
  372.             call TriggerReferenceList(this).replace(trig)
  373.         endmethod
  374.        
  375.         private static method init takes nothing returns nothing
  376.             static if DEBUG_MODE then
  377.                 //! runtextmacro INITIALIZE_TABLE_FIELD("isTriggerReference")
  378.             endif
  379.         endmethod
  380.        
  381.         implement Init
  382.     endstruct
  383.    
  384.         private struct TriggerConditionDataCollection extends array
  385.                 implement UniqueNxListT
  386.         endstruct
  387.        
  388.     private struct TriggerConditionData extends array
  389.         static if DEBUG_MODE then
  390.             //! runtextmacro CREATE_TABLE_FIELD("private", "boolean", "isCondition", "boolean")
  391.         endif
  392.        
  393.         //! runtextmacro CREATE_TABLE_FIELD("private", "integer", "trig", "TriggerMemory")
  394.        
  395.         private static method updateTrigger takes TriggerMemory trig returns nothing
  396.             call trig.updateTrigger()
  397.             call TriggerReferencedList(trig).updateExpression()
  398.         endmethod
  399.    
  400.         static method create takes TriggerMemory trig, boolexpr expression returns thistype
  401.             local thistype this = trig.expression.register(expression)
  402.            
  403.             set this.trig = trig
  404.            
  405.             debug set isCondition = true
  406.                        
  407.                         call TriggerConditionDataCollection(trig).enqueue(this)
  408.            
  409.             call updateTrigger(trig)
  410.            
  411.             return this
  412.         endmethod
  413.        
  414.         method destroy takes nothing returns nothing
  415.             debug call ThrowError(this == 0,        "Trigger", "destroy", "TriggerConditionData", this, "Attempted To Destroy Null TriggerConditionData.")
  416.             debug call ThrowError(not isCondition,  "Trigger", "destroy", "TriggerConditionData", this, "Attempted To Destroy Invalid TriggerConditionData.")
  417.            
  418.             call BooleanExpression(this).unregister()
  419.                        
  420.                         call TriggerConditionDataCollection(this).remove()
  421.            
  422.             debug set isCondition = false
  423.            
  424.             /*
  425.             *   Update the expression
  426.             */
  427.             call updateTrigger(trig)
  428.         endmethod
  429.        
  430.         method replace takes boolexpr expr returns nothing
  431.             debug call ThrowError(this == 0,        "Trigger", "destroy", "TriggerConditionData", this, "Attempted To Destroy Null TriggerConditionData.")
  432.             debug call ThrowError(not isCondition,  "Trigger", "destroy", "TriggerConditionData", this, "Attempted To Destroy Invalid TriggerConditionData.")
  433.            
  434.             call BooleanExpression(this).replace(expr)
  435.            
  436.             call updateTrigger(trig)
  437.         endmethod
  438.                
  439.         private static method init takes nothing returns nothing
  440.             static if DEBUG_MODE then
  441.                 //! runtextmacro INITIALIZE_TABLE_FIELD("isCondition")
  442.             endif
  443.            
  444.             //! runtextmacro INITIALIZE_TABLE_FIELD("trig")
  445.         endmethod
  446.        
  447.         implement Init
  448.     endstruct
  449.    
  450.     struct TriggerReference extends array
  451.         method destroy takes nothing returns nothing
  452.             call TriggerReferenceData(this).destroy()
  453.         endmethod
  454.         method replace takes Trigger trig returns nothing
  455.             call TriggerReferenceData(this).replace(trig)
  456.         endmethod
  457.     endstruct
  458.    
  459.     struct TriggerCondition extends array
  460.         method destroy takes nothing returns nothing
  461.             call TriggerConditionData(this).destroy()
  462.         endmethod
  463.         method replace takes boolexpr expr returns nothing
  464.             call TriggerConditionData(this).replace(expr)
  465.         endmethod
  466.     endstruct
  467.    
  468.     struct Trigger extends array
  469.         static if DEBUG_MODE then
  470.             //! runtextmacro CREATE_TABLE_FIELD("private", "boolean", "isTrigger", "boolean")
  471.         endif
  472.    
  473.         static method create takes boolean reversed returns thistype
  474.             local thistype this = TriggerAllocator.allocate()
  475.            
  476.             debug set isTrigger = true
  477.            
  478.             set TriggerMemory(this).enabled = true
  479.            
  480.             call TriggerReferencedList(this).clear()
  481.             call TriggerReferenceListData(this).clear()
  482.                         call TriggerConditionDataCollection(this).clear()
  483.            
  484.             set TriggerMemory(this).expression = BooleanExpression.create(reversed)
  485.            
  486.             set TriggerMemory(this).trig = CreateTrigger()
  487.            
  488.             return this
  489.         endmethod
  490.                
  491.                 static if DEBUG_MODE then
  492.                         method destroy takes nothing returns nothing
  493.                                 call destroy_p()
  494.                         endmethod
  495.                
  496.                         private method destroy_p takes nothing returns nothing
  497.                                 debug call ThrowError(this == 0,        "Trigger", "destroy", "Trigger", this, "Attempted To Destroy Null Trigger.")
  498.                                 debug call ThrowError(not isTrigger,    "Trigger", "destroy", "Trigger", this, "Attempted To Destroy Invalid Trigger.")
  499.                                
  500.                                 debug set isTrigger = false
  501.                        
  502.                                 call TriggerReferenceList(this).purge()
  503.                                 call TriggerConditionDataCollection(this).destroy()
  504.                                
  505.                                 if (TriggerMemory(this).tc != null) then
  506.                                         call TriggerRemoveCondition(TriggerMemory(this).trig, TriggerMemory(this).tc)
  507.                                 endif
  508.                                 call TriggerMemory(this).tc_clear()
  509.                                 call DestroyTrigger(TriggerMemory(this).trig)
  510.                                 call TriggerMemory(this).trig_clear()
  511.                                
  512.                                 call TriggerMemory(this).expression.destroy()
  513.                                
  514.                                 call TriggerAllocator(this).deallocate()
  515.                         endmethod
  516.                 else
  517.                         method destroy takes nothing returns nothing
  518.                                 debug call ThrowError(this == 0,        "Trigger", "destroy", "Trigger", this, "Attempted To Destroy Null Trigger.")
  519.                                 debug call ThrowError(not isTrigger,    "Trigger", "destroy", "Trigger", this, "Attempted To Destroy Invalid Trigger.")
  520.                                
  521.                                 debug set isTrigger = false
  522.                        
  523.                                 call TriggerReferenceList(this).purge()
  524.                                 call TriggerConditionDataCollection(this).destroy()
  525.                                
  526.                                 if (TriggerMemory(this).tc != null) then
  527.                                         call TriggerRemoveCondition(TriggerMemory(this).trig, TriggerMemory(this).tc)
  528.                                 endif
  529.                                 call TriggerMemory(this).tc_clear()
  530.                                 call DestroyTrigger(TriggerMemory(this).trig)
  531.                                 call TriggerMemory(this).trig_clear()
  532.                                
  533.                                 call TriggerMemory(this).expression.destroy()
  534.                                
  535.                                 call TriggerAllocator(this).deallocate()
  536.                         endmethod
  537.                 endif
  538.  
  539.                 static if DEBUG_MODE then
  540.                         method register takes boolexpr expression returns TriggerCondition
  541.                                 return register_p(expression)
  542.                         endmethod
  543.                         private method register_p takes boolexpr expression returns TriggerCondition
  544.                                 debug call ThrowError(this == 0,            "Trigger", "register", "Trigger", this, "Attempted To Register To Null Trigger.")
  545.                                 debug call ThrowError(not isTrigger,        "Trigger", "register", "Trigger", this, "Attempted To Register To Invalid Trigger.")
  546.                        
  547.                                 /*
  548.                                 *   Register the expression
  549.                                 */
  550.                                 return TriggerConditionData.create(this, expression)
  551.                         endmethod
  552.                 else
  553.                         method register takes boolexpr expression returns TriggerCondition
  554.                                 debug call ThrowError(this == 0,            "Trigger", "register", "Trigger", this, "Attempted To Register To Null Trigger.")
  555.                                 debug call ThrowError(not isTrigger,        "Trigger", "register", "Trigger", this, "Attempted To Register To Invalid Trigger.")
  556.                        
  557.                                 /*
  558.                                 *   Register the expression
  559.                                 */
  560.                                 return TriggerConditionData.create(this, expression)
  561.                         endmethod
  562.                 endif
  563.        
  564.                 static if DEBUG_MODE then
  565.                         method clear takes nothing returns nothing
  566.                                 call clear_p()
  567.                         endmethod
  568.                         private method clear_p takes nothing returns nothing
  569.                                 local TriggerConditionDataCollection node = TriggerConditionDataCollection(this).first
  570.                        
  571.                                 debug call ThrowError(this == 0,        "Trigger", "clear", "Trigger", this, "Attempted To Clear Null Trigger.")
  572.                                 debug call ThrowError(not isTrigger,    "Trigger", "clear", "Trigger", this, "Attempted To Clear Invalid Trigger.")
  573.                                
  574.                                 loop
  575.                                         exitwhen node == 0
  576.                                        
  577.                                         call BooleanExpression(node).unregister()
  578.                                        
  579.                                         set node = node.next
  580.                                 endloop
  581.                                
  582.                                 call TriggerConditionDataCollection(this).clear()
  583.                                
  584.                                 call TriggerMemory(this).updateTrigger()
  585.                                 call TriggerReferencedList(this).updateExpression()
  586.                         endmethod
  587.                 else
  588.                         method clear takes nothing returns nothing
  589.                                 local TriggerConditionDataCollection node = TriggerConditionDataCollection(this).first
  590.                        
  591.                                 debug call ThrowError(this == 0,        "Trigger", "clear", "Trigger", this, "Attempted To Clear Null Trigger.")
  592.                                 debug call ThrowError(not isTrigger,    "Trigger", "clear", "Trigger", this, "Attempted To Clear Invalid Trigger.")
  593.                                
  594.                                 loop
  595.                                         exitwhen node == 0
  596.                                        
  597.                                         call BooleanExpression(node).unregister()
  598.                                        
  599.                                         set node = node.next
  600.                                 endloop
  601.                                
  602.                                 call TriggerConditionDataCollection(this).clear()
  603.                                
  604.                                 call TriggerMemory(this).updateTrigger()
  605.                                 call TriggerReferencedList(this).updateExpression()
  606.                         endmethod
  607.                 endif
  608.                
  609.                 static if DEBUG_MODE then
  610.                         method clearReferences takes nothing returns nothing
  611.                                 call clearReferences_p()
  612.                         endmethod
  613.                         private method clearReferences_p takes nothing returns nothing
  614.                                 debug call ThrowError(this == 0,        "Trigger", "clearReferences", "Trigger", this, "Attempted To Clear References Of Null Trigger.")
  615.                                 debug call ThrowError(not isTrigger,    "Trigger", "clearReferences", "Trigger", this, "Attempted To Clear References Of Invalid Trigger.")
  616.                                
  617.                                 call TriggerReferenceList(this).clearReferences()
  618.                                
  619.                                 call TriggerMemory(this).updateTrigger()
  620.                                 call TriggerReferencedList(this).updateExpression()
  621.                         endmethod
  622.                 else
  623.                         method clearReferences takes nothing returns nothing
  624.                                 debug call ThrowError(this == 0,        "Trigger", "clearReferences", "Trigger", this, "Attempted To Clear References Of Null Trigger.")
  625.                                 debug call ThrowError(not isTrigger,    "Trigger", "clearReferences", "Trigger", this, "Attempted To Clear References Of Invalid Trigger.")
  626.                                
  627.                                 call TriggerReferenceList(this).clearReferences()
  628.                                
  629.                                 call TriggerMemory(this).updateTrigger()
  630.                                 call TriggerReferencedList(this).updateExpression()
  631.                         endmethod
  632.                 endif
  633.        
  634.                 static if DEBUG_MODE then
  635.                         method clearBackReferences takes nothing returns nothing
  636.                                 call clearBackReferences_p()
  637.                         endmethod
  638.                        
  639.                         private method clearBackReferences_p takes nothing returns nothing
  640.                                 debug call ThrowError(this == 0,        "Trigger", "clearReferences", "Trigger", this, "Attempted To Clear Back References Of Null Trigger.")
  641.                                 debug call ThrowError(not isTrigger,    "Trigger", "clearReferences", "Trigger", this, "Attempted To Clear Back References Of Invalid Trigger.")
  642.                                
  643.                                 call TriggerReferencedList(this).clearReferences()
  644.                         endmethod
  645.                 else
  646.                         method clearBackReferences takes nothing returns nothing
  647.                                 debug call ThrowError(this == 0,        "Trigger", "clearReferences", "Trigger", this, "Attempted To Clear Back References Of Null Trigger.")
  648.                                 debug call ThrowError(not isTrigger,    "Trigger", "clearReferences", "Trigger", this, "Attempted To Clear Back References Of Invalid Trigger.")
  649.                                
  650.                                 call TriggerReferencedList(this).clearReferences()
  651.                         endmethod
  652.                 endif
  653.        
  654.                 static if DEBUG_MODE then
  655.                         method reference takes thistype trig returns TriggerReference
  656.                                 return reference_p(trig)
  657.                         endmethod
  658.                        
  659.                         private method reference_p takes thistype trig returns TriggerReference
  660.                                 debug call ThrowError(this == 0,            "Trigger", "reference", "Trigger", this, "Attempted To Make Null Trigger Reference Trigger.")
  661.                                 debug call ThrowError(not isTrigger,        "Trigger", "reference", "Trigger", this, "Attempted To Make Invalid Trigger Reference Trigger.")
  662.                                 debug call ThrowError(trig == 0,            "Trigger", "reference", "Trigger", this, "Attempted To Reference Null Trigger (" + I2S(trig) + ").")
  663.                                 debug call ThrowError(not trig.isTrigger,   "Trigger", "reference", "Trigger", this, "Attempted To Reference Invalid Trigger (" + I2S(trig) + ").")
  664.                                
  665.                                 return TriggerReferenceData.create(this, trig)
  666.                         endmethod
  667.                 else
  668.                         method reference takes thistype trig returns TriggerReference
  669.                                 debug call ThrowError(this == 0,            "Trigger", "reference", "Trigger", this, "Attempted To Make Null Trigger Reference Trigger.")
  670.                                 debug call ThrowError(not isTrigger,        "Trigger", "reference", "Trigger", this, "Attempted To Make Invalid Trigger Reference Trigger.")
  671.                                 debug call ThrowError(trig == 0,            "Trigger", "reference", "Trigger", this, "Attempted To Reference Null Trigger (" + I2S(trig) + ").")
  672.                                 debug call ThrowError(not trig.isTrigger,   "Trigger", "reference", "Trigger", this, "Attempted To Reference Invalid Trigger (" + I2S(trig) + ").")
  673.                                
  674.                                 return TriggerReferenceData.create(this, trig)
  675.                         endmethod
  676.                 endif
  677.                
  678.                 static if DEBUG_MODE then
  679.                         method clearEvents takes nothing returns nothing
  680.                                 call clearEvents_p()
  681.                         endmethod
  682.                        
  683.                         private method clearEvents_p takes nothing returns nothing
  684.                                 debug call ThrowError(this == 0,        "Trigger", "clearEvents", "Trigger", this, "Attempted To Clear Events Of Null Trigger.")
  685.                                 debug call ThrowError(not isTrigger,    "Trigger", "clearEvents", "Trigger", this, "Attempted To Clear Events Of Invalid Trigger.")
  686.                        
  687.                                 if (TriggerMemory(this).tc != null) then
  688.                                         call TriggerRemoveCondition(TriggerMemory(this).trig, TriggerMemory(this).tc)
  689.                                 endif
  690.                                 call DestroyTrigger(TriggerMemory(this).trig)
  691.                                
  692.                                 set TriggerMemory(this).trig = CreateTrigger()
  693.                                 if (TriggerMemory(this).enabled) then
  694.                                         set TriggerMemory(this).tc = TriggerAddCondition(TriggerMemory(this).trig, TriggerMemory(this).expression.expression)
  695.                                 else
  696.                                         call TriggerMemory(this).tc_clear()
  697.                                 endif
  698.                         endmethod
  699.                 else
  700.                         method clearEvents takes nothing returns nothing
  701.                                 debug call ThrowError(this == 0,        "Trigger", "clearEvents", "Trigger", this, "Attempted To Clear Events Of Null Trigger.")
  702.                                 debug call ThrowError(not isTrigger,    "Trigger", "clearEvents", "Trigger", this, "Attempted To Clear Events Of Invalid Trigger.")
  703.                        
  704.                                 if (TriggerMemory(this).tc != null) then
  705.                                         call TriggerRemoveCondition(TriggerMemory(this).trig, TriggerMemory(this).tc)
  706.                                 endif
  707.                                 call DestroyTrigger(TriggerMemory(this).trig)
  708.                                
  709.                                 set TriggerMemory(this).trig = CreateTrigger()
  710.                                 if (TriggerMemory(this).enabled) then
  711.                                         set TriggerMemory(this).tc = TriggerAddCondition(TriggerMemory(this).trig, TriggerMemory(this).expression.expression)
  712.                                 else
  713.                                         call TriggerMemory(this).tc_clear()
  714.                                 endif
  715.                         endmethod
  716.                 endif
  717.        
  718.         method fire takes nothing returns nothing
  719.             debug call ThrowError(this == 0,        "Trigger", "fire", "Trigger", this, "Attempted To Fire Null Trigger.")
  720.             debug call ThrowError(not isTrigger,    "Trigger", "fire", "Trigger", this, "Attempted To Fire Invalid Trigger.")
  721.        
  722.             call TriggerEvaluate(TriggerMemory(this).trig)
  723.         endmethod
  724.        
  725.         method operator trigger takes nothing returns trigger
  726.             debug call ThrowError(this == 0,        "Trigger", "trigger", "Trigger", this, "Attempted To Read Null Trigger.")
  727.             debug call ThrowError(not isTrigger,    "Trigger", "trigger", "Trigger", this, "Attempted To Read Invalid Trigger.")
  728.        
  729.             return TriggerMemory(this).trig
  730.         endmethod
  731.        
  732.         method operator enabled takes nothing returns boolean
  733.             debug call ThrowError(this == 0,                                "Trigger", "enabled", "Trigger", this, "Attempted To Read Null Trigger.")
  734.             debug call ThrowError(not isTrigger,                            "Trigger", "enabled", "Trigger", this, "Attempted To Read Invalid Trigger.")
  735.            
  736.             return TriggerMemory(this).enabled
  737.         endmethod
  738.                
  739.                 static if DEBUG_MODE then
  740.                         method operator enabled= takes boolean enable returns nothing
  741.                                 set enabled_p = enable
  742.                         endmethod
  743.                         private method operator enabled_p= takes boolean enable returns nothing
  744.                                 debug call ThrowError(this == 0,                                "Trigger", "enabled=", "Trigger", this, "Attempted To Set Null Trigger.")
  745.                                 debug call ThrowError(not isTrigger,                            "Trigger", "enabled=", "Trigger", this, "Attempted To Set Invalid Trigger.")
  746.                                 debug call ThrowWarning(TriggerMemory(this).enabled == enable,  "Trigger", "enabled=", "Trigger", this, "Setting Enabled To Its Value.")
  747.                        
  748.                                 set TriggerMemory(this).enabled = enable
  749.                                
  750.                                 call TriggerMemory(this).updateTrigger()
  751.                                 call TriggerReferencedList(this).updateExpression()
  752.                         endmethod
  753.                 else
  754.                         method operator enabled= takes boolean enable returns nothing
  755.                                 debug call ThrowError(this == 0,                                "Trigger", "enabled=", "Trigger", this, "Attempted To Set Null Trigger.")
  756.                                 debug call ThrowError(not isTrigger,                            "Trigger", "enabled=", "Trigger", this, "Attempted To Set Invalid Trigger.")
  757.                                 debug call ThrowWarning(TriggerMemory(this).enabled == enable,  "Trigger", "enabled=", "Trigger", this, "Setting Enabled To Its Value.")
  758.                        
  759.                                 set TriggerMemory(this).enabled = enable
  760.                                
  761.                                 call TriggerMemory(this).updateTrigger()
  762.                                 call TriggerReferencedList(this).updateExpression()
  763.                         endmethod
  764.                 endif
  765.        
  766.         static if DEBUG_MODE then
  767.             static method calculateMemoryUsage takes nothing returns integer
  768.                 return /*
  769.                                 */      TriggerAllocator.calculateMemoryUsage() + /*
  770.                                 */      TriggerConditionDataCollection.calculateMemoryUsage() + /*
  771.                                 */      TriggerReferenceListData.calculateMemoryUsage() + /*
  772.                                 */      TriggerReferencedList.calculateMemoryUsage() + /*
  773.                                 */      BooleanExpression.calculateMemoryUsage()
  774.             endmethod
  775.            
  776.             static method getAllocatedMemoryAsString takes nothing returns string
  777.                 return /*
  778.                                 */      "(Trigger)[" + TriggerAllocator.getAllocatedMemoryAsString() + "], " + /*
  779.                                 */      "(Trigger TriggerConditionDataCollection)[" + TriggerConditionDataCollection.getAllocatedMemoryAsString() + "], " + /*
  780.                                 */      "(Trigger Reference)[" + TriggerReferenceListData.getAllocatedMemoryAsString() + "], " + /*
  781.                                 */      "(Trigger Reference Back)[" + TriggerReferencedList.getAllocatedMemoryAsString() + "], " + /*
  782.                                 */      "(Boolean Expression (all))[" + BooleanExpression.getAllocatedMemoryAsString() + "]"
  783.             endmethod
  784.         endif
  785.        
  786.         private static method init takes nothing returns nothing
  787.             static if DEBUG_MODE then
  788.                 //! runtextmacro INITIALIZE_TABLE_FIELD("isTrigger")
  789.             endif
  790.         endmethod
  791.        
  792.         implement Init
  793.     endstruct
  794. endlibrary
« Last Edit: December 19, 2017, 01:14:29 AM by moyack »



 

Vivir aprendiendo.co - A place for learning stuff, in Spanish   Chaos Realm - The world of Game modders and wc3 addicts   Diplo, a gaming community   WC3JASS.com - The JASS Vault + vJASS and Zinc   Jetcraft - A Starcraft II mod   WormTastic Clan (wTc)