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