Xonotic QuakeC
The free, fast arena FPS with crisp movement and a wide array of weapons
CallbackChain Class Reference

Callback chains contain zero or more callbacks. More...

Inheritance diagram for CallbackChain:
Collaboration diagram for CallbackChain:

Classes

class  CallbackNode

Public Member Functions

 CallbackChain (string _name)
 ATTRIB (CallbackChain, cbc_next, CallbackNode)
bool CallbackChain_Add (CallbackChain this, Callback cb, int order)
bool CallbackChain_Call (CallbackChain this)
int CallbackChain_Remove (CallbackChain this, Callback cb)

Public Attributes

int cbc_order = 0

Detailed Description

Callback chains contain zero or more callbacks.

Definition at line 39 of file base.qh.

Constructor & Destructor Documentation

◆ CallbackChain()

CallbackChain::CallbackChain ( string _name)
inline

Definition at line 53 of file base.qh.

53 {
55 this.netname = _name;
56 }
CallbackChain(string _name)
Definition base.qh:53
string netname
Definition powerups.qc:20
#define CONSTRUCT(cname,...)
Definition oo.qh:123

References CallbackChain(), CONSTRUCT, CONSTRUCTOR, and netname.

Referenced by CallbackChain(), ATTRIB(), CallbackChain_Add(), CallbackChain_Call(), and CallbackChain_Remove().

Member Function Documentation

◆ ATTRIB()

CallbackChain::ATTRIB ( CallbackChain ,
cbc_next ,
CallbackNode  )

References CallbackChain(), and ATTRIB().

Referenced by ATTRIB().

◆ CallbackChain_Add()

bool CallbackChain::CallbackChain_Add ( CallbackChain this,
Callback cb,
int order )
inline

Definition at line 58 of file base.qh.

59 {
60 if (order & CBC_ORDER_FIRST) {
61 if (order & CBC_ORDER_LAST)
62 if (this.cbc_order & CBC_ORDER_ANY)
63 return false;
64 if (this.cbc_order & CBC_ORDER_FIRST)
65 return false;
66 } else if (order & CBC_ORDER_LAST) {
67 if (this.cbc_order & CBC_ORDER_LAST)
68 return false;
69 }
70 entity node = NEW(CallbackNode, cb, order);
71 if (order & CBC_ORDER_FIRST) {
72 node.cbc_next = this.cbc_next;
73 this.cbc_next = node;
74 } else if (order & CBC_ORDER_LAST) {
75 CallbackNode prev = NULL, it = this.cbc_next;
76 while (it) { prev = it, it = it.cbc_next; }
77 if (prev) prev.cbc_next = node;
78 else this.cbc_next = node;
79 } else {
80 // by default we execute last, but before a possible CBC_ORDER_LAST callback
81 CallbackNode prev = NULL, it = this.cbc_next;
82 while (it && !(it.cbc_order & CBC_ORDER_LAST)) { prev = it, it = it.cbc_next; }
83 node.cbc_next = it;
84 if (prev) prev.cbc_next = node;
85 else this.cbc_next = node;
86 }
87 this.cbc_order |= (order | CBC_ORDER_ANY);
88 return true;
89 }
const int CBC_ORDER_FIRST
Definition base.qh:10
const int CBC_ORDER_LAST
Definition base.qh:11
const int CBC_ORDER_ANY
Definition base.qh:13
int cbc_order
Definition base.qh:52
entity() spawn
prev
Definition all.qh:71
#define NEW(cname,...)
Definition oo.qh:117
#define NULL
Definition post.qh:14

References CallbackChain(), cbc_order, CBC_ORDER_ANY, CBC_ORDER_FIRST, CBC_ORDER_LAST, entity(), NEW, NULL, and prev.

◆ CallbackChain_Call()

bool CallbackChain::CallbackChain_Call ( CallbackChain this)
inline

Definition at line 107 of file base.qh.

108 {
109 bool r = false;
110 for (Callback it = this.cbc_next; it; it = it.cbc_next) {
112 r |= it.cbc.cbc_func();
113 }
114 return r; // callbacks return an error status, so 0 is default return value
115 }
bool CallbackChain_ReturnValue
Definition base.qh:15

References CallbackChain(), and CallbackChain_ReturnValue.

◆ CallbackChain_Remove()

int CallbackChain::CallbackChain_Remove ( CallbackChain this,
Callback cb )
inline

Definition at line 90 of file base.qh.

91 {
92 int n = 0, order = 0;
93 for (Callback prev = NULL, it = this.cbc_next; it; prev = it, it = it.cbc_next) {
94 if (it.cbc == cb) {
95 // remove it from the chain
96 Callback next = it.cbc_next;
97 if (prev) prev.cbc_next = next;
98 else this.cbc_next = next;
99 ++n;
100 }
101 // it is now something we want to keep
102 order |= (it.cbc_order & CBC_ORDER_ANY);
103 }
104 this.cbc_order = order;
105 return n;
106 }
next
Definition all.qh:93

References CallbackChain(), cbc_order, CBC_ORDER_ANY, next, NULL, and prev.

Member Data Documentation

◆ cbc_order

int CallbackChain::cbc_order = 0

Definition at line 52 of file base.qh.

Referenced by CallbackChain_Add(), and CallbackChain_Remove().


The documentation for this class was generated from the following file: