Xonotic QuakeC
The free, fast arena FPS with crisp movement and a wide array of weapons
CallbackChain Class Reference
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

Definition at line 35 of file base.qh.

Constructor & Destructor Documentation

◆ CallbackChain()

CallbackChain::CallbackChain ( string _name)
inline

Definition at line 50 of file base.qh.

51 {
53 this.netname = _name;
54 }
CallbackChain(string _name)
Definition base.qh:50
string netname
Definition powerups.qc:20
#define CONSTRUCT(cname,...)
Definition oo.qh:126

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 56 of file base.qh.

57 {
58 if (order & CBC_ORDER_FIRST)
59 {
60 if (order & CBC_ORDER_LAST)
61 if (this.cbc_order & CBC_ORDER_ANY)
62 return false;
63 if (this.cbc_order & CBC_ORDER_FIRST)
64 return false;
65 }
66 else if (order & CBC_ORDER_LAST)
67 {
68 if (this.cbc_order & CBC_ORDER_LAST)
69 return false;
70 }
71 entity node = NEW(CallbackNode, cb, order);
72 if (order & CBC_ORDER_FIRST)
73 {
74 node.cbc_next = this.cbc_next;
75 this.cbc_next = node;
76 }
77 else if (order & CBC_ORDER_LAST)
78 {
79 CallbackNode prev = NULL, it = this.cbc_next;
80 while (it)
81 {
82 prev = it;
83 it = it.cbc_next;
84 }
85 if (prev)
86 prev.cbc_next = node;
87 else
88 this.cbc_next = node;
89 }
90 else
91 {
92 // by default we execute last, but before a possible CBC_ORDER_LAST callback
93 CallbackNode prev = NULL, it = this.cbc_next;
94 while (it && !(it.cbc_order & CBC_ORDER_LAST))
95 {
96 prev = it;
97 it = it.cbc_next;
98 }
99 node.cbc_next = it;
100 if (prev)
101 prev.cbc_next = node;
102 else
103 this.cbc_next = node;
104 }
105 this.cbc_order |= order | CBC_ORDER_ANY;
106 return true;
107 }
const int CBC_ORDER_FIRST
Definition base.qh:9
const int CBC_ORDER_LAST
Definition base.qh:10
const int CBC_ORDER_ANY
Definition base.qh:12
int cbc_order
Definition base.qh:49
entity() spawn
prev
Definition all.qh:53
#define NEW(cname,...)
Definition oo.qh:120
#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 129 of file base.qh.

130 {
131 bool r = false;
132 for (Callback it = this.cbc_next; it; it = it.cbc_next)
133 {
135 r |= it.cbc.cbc_func();
136 }
137 return r; // callbacks return an error status, so 0 is default return value
138 }
bool CallbackChain_ReturnValue
read-only field of the current return value
Definition base.qh:14

References CallbackChain(), and CallbackChain_ReturnValue.

◆ CallbackChain_Remove()

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

Definition at line 108 of file base.qh.

109 {
110 int n = 0, order = 0;
111 for (Callback prev = NULL, it = this.cbc_next; it; prev = it, it = it.cbc_next)
112 {
113 if (it.cbc == cb)
114 {
115 // remove it from the chain
116 Callback next = it.cbc_next;
117 if (prev)
118 prev.cbc_next = next;
119 else
120 this.cbc_next = next;
121 ++n;
122 }
123 // it is now something we want to keep
124 order |= it.cbc_order & CBC_ORDER_ANY;
125 }
126 this.cbc_order = order;
127 return n;
128 }
next
Definition all.qh:75

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

Member Data Documentation

◆ cbc_order

int CallbackChain::cbc_order = 0

Definition at line 49 of file base.qh.

Referenced by CallbackChain_Add(), and CallbackChain_Remove().


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