14 years
edited 8 years
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 array16 * 17 * Fields18 * -------------------------19 *20 * readonly trigger trigger21 * - use to register events, nothing else22 * - keep in mind that triggers referencing this trigger won't fire when events fire23 * - this trigger will fire when triggers referencing this trigger are fired24 *25 * boolean enabled26 *27 * Methods28 * -------------------------29 *30 * static method create takes boolean reversed returns Trigger31 * - when reverse is true, the entire expression is run in reverse32 *33 * method destroy takes nothing returns nothing34 *35 * method register takes boolexpr expression returns TriggerCondition36 *37 * method reference takes Trigger trig returns TriggerReference38 * - like register, but for triggers instead39 *40 * method fire takes nothing returns nothing41 *42 * method clear takes nothing returns nothing43 * - clears expressions44 * method clearReferences takes nothing returns nothing45 * - clears trigger references46 * method clearBackReferences takes nothing returns nothing47 * - removes references for all triggers referencing this trigger48 * method clearEvents takes nothing returns nothing49 * - clears events50 *51 * debug static method calculateMemoryUsage takes nothing returns integer52 * debug static method getAllocatedMemoryAsString takes nothing returns string53 *54 ************************************************************************************55 *56 * struct TriggerReference extends array57 * 58 * Methods59 * -------------------------60 *61 * method destroy takes nothing returns nothing62 *63 * method replace takes Trigger trigger returns nothing64 *65 ************************************************************************************66 *67 * struct TriggerCondition extends array68 *69 * Methods70 * -------------------------71 *72 * method destroy takes nothing returns nothing73 *74 * method replace takes boolexpr expr returns nothing75 *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 expression82
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 endif89
90 if (enabled and expression.expression != null) then
91 set tc = TriggerAddCondition(trig, expression.expression)
92 else93 call tc_clear()
94 endif95 endmethod96
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 endmethod105
106 implement Init107 endstruct108 109 private struct TriggerAllocator extends array
110 implement AllocT111 endstruct112
113 private keyword TriggerReferencedList
114
115 private struct TriggerReferenceListData extends array
116 //! runtextmacro CREATE_TABLE_FIELD("public", "integer", "trig", "TriggerMemory") //the referenced trigger117 //! 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 NxListT121
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 endmethod127
128 implement Init129 endstruct130 131 /*132 * List of triggers referencing current trigger133 */134 private struct TriggerReferencedList extends array
135 //! runtextmacro CREATE_TABLE_FIELD("public", "integer", "trig", "TriggerMemory") //the trigger referencing this trigger136 //! runtextmacro CREATE_TABLE_FIELD("public", "integer", "ref", "TriggerReferenceListData") //the ref 137
138 implement NxListT139
140 method updateExpression takes nothing returns nothing
141 local thistype node
142 local boolexpr expr
143
144 /*145 * Retrieve the expression of the referenced trigger146 */147 if (TriggerMemory(this).enabled) then
148 set expr = TriggerMemory(this).expression.expression
149 else150 set expr = null
151 endif152
153 /*154 * Iterate over all triggers referencing this trigger155 */156 set node = first
157 loop158 exitwhen node == 0
159
160 /*161 * Replace expression and then update the target trigger162 */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 endloop169
170 set expr = null
171 endmethod172
173 method purge takes nothing returns nothing
174 local thistype node = first
175
176 loop177 exitwhen node == 0
178
179 /*180 * Unregister the expression from the referencing trigger181 * Update that trigger182 */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 endloop190
191 call destroy()
192 endmethod193
194 method clearReferences takes nothing returns nothing
195 local thistype node = first
196
197 loop198 exitwhen node == 0
199
200 /*201 * Unregister the expression from the referencing trigger202 * Update that trigger203 */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 endloop211
212 call clear()
213 endmethod214
215 private static method init takes nothing returns nothing
216 //! runtextmacro INITIALIZE_TABLE_FIELD("trig")217 //! runtextmacro INITIALIZE_TABLE_FIELD("ref")218 endmethod219
220 implement Init221 endstruct222
223 /*224 * List of triggers current trigger references225 */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 reference232 */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 expression240 *241 * Add even if null to ensure correct order242 */243 if (TriggerMemory(trig).enabled) then
244 set node.expr = TriggerMemory(this).expression.register(TriggerMemory(trig).expression.expression)
245 else246 set node.expr = TriggerMemory(this).expression.register(null)
247 endif248
249 call TriggerMemory(this).updateTrigger()
250
251 /*252 * Update the expressions of triggers referencing this trigger253 */254 call TriggerReferencedList(this).updateExpression()
255
256 /*257 * Return the reference258 */259 return node260 endmethod261
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 endmethod273
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 else288 call node.expr.replace(null)
289 endif290
291 call TriggerMemory(this).updateTrigger()
292
293 call TriggerReferencedList(this).updateExpression()
294 endmethod295
296 /*297 * Purges all references298 */299 method purge takes nothing returns nothing
300 local TriggerReferenceListData node = TriggerReferenceListData(this).first
301
302 loop303 exitwhen node == 0
304
305 /*306 * Removes the reference from the referenced list307 * (triggers no longer referenced by this)308 */309 call node.ref.remove()
310
311 set node = node.next
312 endloop313
314 /*315 * Destroy all references by triggers referencing this316 */317 call TriggerReferencedList(this).purge()
318
319 call TriggerReferenceListData(this).destroy()
320 endmethod321
322 method clearReferences takes nothing returns nothing
323 local TriggerReferenceListData node = TriggerReferenceListData(this).first
324
325 loop326 exitwhen node == 0
327
328 /*329 * Removes the reference from the referenced list330 * (triggers no longer referenced by this)331 */332 call node.ref.remove()
333
334 /*335 * unregisters code336 */337 call node.expr.unregister()
338
339 set node = node.next
340 endloop341
342 call TriggerReferenceListData(this).clear()
343 endmethod344 endstruct345
346 private struct TriggerReferenceData extends array
347 static if DEBUG_MODE then
348 //! runtextmacro CREATE_TABLE_FIELD("private", "boolean", "isTriggerReference", "boolean")349 endif350
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 endmethod358
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 endmethod367
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 endmethod374
375 private static method init takes nothing returns nothing
376 static if DEBUG_MODE then
377 //! runtextmacro INITIALIZE_TABLE_FIELD("isTriggerReference")378 endif379 endmethod380
381 implement Init382 endstruct383
384 private struct TriggerConditionDataCollection extends array
385 implement UniqueNxListT386 endstruct387
388 private struct TriggerConditionData extends array
389 static if DEBUG_MODE then
390 //! runtextmacro CREATE_TABLE_FIELD("private", "boolean", "isCondition", "boolean")391 endif392
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 endmethod399
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 endmethod413
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 expression426 */427 call updateTrigger(trig)
428 endmethod429
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 endmethod438
439 private static method init takes nothing returns nothing
440 static if DEBUG_MODE then
441 //! runtextmacro INITIALIZE_TABLE_FIELD("isCondition")442 endif443
444 //! runtextmacro INITIALIZE_TABLE_FIELD("trig")445 endmethod446
447 implement Init448 endstruct449
450 struct TriggerReference extends array
451 method destroy takes nothing returns nothing
452 call TriggerReferenceData(this).destroy()
453 endmethod454 method replace takes Trigger trig returns nothing
455 call TriggerReferenceData(this).replace(trig)
456 endmethod457 endstruct458
459 struct TriggerCondition extends array
460 method destroy takes nothing returns nothing
461 call TriggerConditionData(this).destroy()
462 endmethod463 method replace takes boolexpr expr returns nothing
464 call TriggerConditionData(this).replace(expr)
465 endmethod466 endstruct467
468 struct Trigger extends array
469 static if DEBUG_MODE then
470 //! runtextmacro CREATE_TABLE_FIELD("private", "boolean", "isTrigger", "boolean")471 endif472
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 endmethod490
491 static if DEBUG_MODE then
492 method destroy takes nothing returns nothing
493 call destroy_p()
494 endmethod495
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 endif508 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 endmethod516 else517 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 endif529 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 endmethod537 endif538 539 static if DEBUG_MODE then
540 method register takes boolexpr expression returns TriggerCondition
541 return register_p(expression)
542 endmethod543 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 expression549 */550 return TriggerConditionData.create(this, expression)
551 endmethod552 else553 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 expression559 */560 return TriggerConditionData.create(this, expression)
561 endmethod562 endif563
564 static if DEBUG_MODE then
565 method clear takes nothing returns nothing
566 call clear_p()
567 endmethod568 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 loop575 exitwhen node == 0
576
577 call BooleanExpression(node).unregister()
578
579 set node = node.next
580 endloop581
582 call TriggerConditionDataCollection(this).clear()
583
584 call TriggerMemory(this).updateTrigger()
585 call TriggerReferencedList(this).updateExpression()
586 endmethod587 else588 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 loop595 exitwhen node == 0
596
597 call BooleanExpression(node).unregister()
598
599 set node = node.next
600 endloop601
602 call TriggerConditionDataCollection(this).clear()
603
604 call TriggerMemory(this).updateTrigger()
605 call TriggerReferencedList(this).updateExpression()
606 endmethod607 endif608
609 static if DEBUG_MODE then
610 method clearReferences takes nothing returns nothing
611 call clearReferences_p()
612 endmethod613 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 endmethod622 else623 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 endmethod632 endif633
634 static if DEBUG_MODE then
635 method clearBackReferences takes nothing returns nothing
636 call clearBackReferences_p()
637 endmethod638
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 endmethod645 else646 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 endmethod652 endif653
654 static if DEBUG_MODE then
655 method reference takes thistype trig returns TriggerReference
656 return reference_p(trig)
657 endmethod658
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 endmethod667 else668 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 endmethod676 endif677
678 static if DEBUG_MODE then
679 method clearEvents takes nothing returns nothing
680 call clearEvents_p()
681 endmethod682
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 endif690 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 else696 call TriggerMemory(this).tc_clear()
697 endif698 endmethod699 else700 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 endif707 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 else713 call TriggerMemory(this).tc_clear()
714 endif715 endmethod716 endif717
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 endmethod724
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 endmethod731
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 endmethod738
739 static if DEBUG_MODE then
740 method operator enabled= takes boolean enable returns nothing
741 set enabled_p = enable
742 endmethod743 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 endmethod753 else754 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 endmethod764 endif765
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 endmethod775
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 endmethod784 endif785
786 private static method init takes nothing returns nothing
787 static if DEBUG_MODE then
788 //! runtextmacro INITIALIZE_TABLE_FIELD("isTrigger")789 endif790 endmethod791
792 implement Init793 endstruct794 endlibrary