1 /*
2
3 *************************************************************************
4
5 ArmageTron -- Just another Tron Lightcycle Game in 3D.
6 Copyright (C) 2000 Manuel Moos (manuel@moosnet.de)
7
8 **************************************************************************
9
10 This program is free software; you can redistribute it and/or
11 modify it under the terms of the GNU General Public License
12 as published by the Free Software Foundation; either version 2
13 of the License, or (at your option) any later version.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23
24 ***************************************************************************
25
26 */
27
28 #include "tCallback.h"
29 #include "tCallbackString.h"
30
tCallback(tCallback * & anchor,VOIDFUNC * f)31 tCallback::tCallback(tCallback*& anchor, VOIDFUNC *f)
32 :tListItem<tCallback>(anchor), func(f){
33 tASSERT(f != NULL);
34 }
35
Exec(tCallback * anchor)36 void tCallback::Exec(tCallback *anchor){
37 if (anchor){
38 (*anchor->func)();
39 Exec(anchor->Next());
40 }
41 }
42
43
44
tCallbackAnd(tCallbackAnd * & anchor,BOOLRETFUNC * f)45 tCallbackAnd::tCallbackAnd(tCallbackAnd*& anchor, BOOLRETFUNC *f)
46 :tListItem<tCallbackAnd>(anchor), func(f){
47 tASSERT(f);
48 }
49
Exec(tCallbackAnd * anchor)50 bool tCallbackAnd::Exec(tCallbackAnd *anchor){
51 if (anchor)
52 return (*anchor->func)() && Exec(anchor->Next());
53 else
54 return true;
55 }
56
57
tCallbackOr(tCallbackOr * & anchor,BOOLRETFUNC * f)58 tCallbackOr::tCallbackOr(tCallbackOr*& anchor, BOOLRETFUNC *f)
59 :tListItem<tCallbackOr>(anchor), func(f){
60 tASSERT(f);
61 }
62
Exec(tCallbackOr * anchor)63 bool tCallbackOr::Exec(tCallbackOr *anchor){
64 if (anchor)
65 return (*anchor->func)() || Exec(anchor->Next());
66 else
67 return false;
68 }
69
70
71
tCallbackString(tCallbackString * & anchor,STRINGRETFUNC * f)72 tCallbackString::tCallbackString(tCallbackString*& anchor, STRINGRETFUNC *f)
73 :tListItem<tCallbackString>(anchor), func(f){
74 tASSERT(f);
75 }
76
Exec(tCallbackString * anchor)77 tString tCallbackString::Exec(tCallbackString *anchor){
78 tString ret("");
79 if (anchor)
80 ret << (*anchor->func)() << Exec(anchor->Next());
81
82 return ret;
83 }
84
85