diff options
Diffstat (limited to 'gensigs.bld')
-rw-r--r-- | gensigs.bld | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/gensigs.bld b/gensigs.bld index 6cdd5d5..6bb1e55 100644 --- a/gensigs.bld +++ b/gensigs.bld | |||
@@ -16,6 +16,7 @@ function genSigs( outName ) | |||
16 | "#ifndef BU_SIGNALS_H\n" | 16 | "#ifndef BU_SIGNALS_H\n" |
17 | "#define BU_SIGNALS_H\n" | 17 | "#define BU_SIGNALS_H\n" |
18 | "\n" | 18 | "\n" |
19 | "#include <typeinfo>\n" | ||
19 | "#include \"bu/util.h\"\n" | 20 | "#include \"bu/util.h\"\n" |
20 | "#include \"bu/exceptionbase.h\"\n" | 21 | "#include \"bu/exceptionbase.h\"\n" |
21 | "#include \"bu/list.h\"\n" | 22 | "#include \"bu/list.h\"\n" |
@@ -69,6 +70,7 @@ function genSigs( outName ) | |||
69 | " virtual ~_Slot${i}() { }\n" | 70 | " virtual ~_Slot${i}() { }\n" |
70 | " virtual ret operator()( ${funcParams} )=0;\n" | 71 | " virtual ret operator()( ${funcParams} )=0;\n" |
71 | " virtual _Slot${i}<${templCallParams}> *clone() const=0;\n" | 72 | " virtual _Slot${i}<${templCallParams}> *clone() const=0;\n" |
73 | " virtual bool operator==( const _Slot${i}<${templCallParams}> &rhs ) const=0;\n" | ||
72 | " };\n" | 74 | " };\n" |
73 | " \n" | 75 | " \n" |
74 | " template<typename cls, ${templParams}>\n" | 76 | " template<typename cls, ${templParams}>\n" |
@@ -89,6 +91,12 @@ function genSigs( outName ) | |||
89 | " return new __Slot${i}<cls, ${templCallParams}>( pCls, pFnc );\n" | 91 | " return new __Slot${i}<cls, ${templCallParams}>( pCls, pFnc );\n" |
90 | " }\n" | 92 | " }\n" |
91 | " \n" | 93 | " \n" |
94 | " virtual bool operator==( const _Slot${i}<${templCallParams}> &rhs ) const\n" | ||
95 | " {\n" | ||
96 | " const __Slot${i}<cls, ${templCallParams}> &rrhs = (const __Slot${i}<cls, ${templCallParams}> &)rhs;\n" | ||
97 | " return pCls == rrhs.pCls && pFnc == rrhs.pFnc;\n" | ||
98 | " }\n" | ||
99 | " \n" | ||
92 | " private:\n" | 100 | " private:\n" |
93 | " cls *pCls;\n" | 101 | " cls *pCls;\n" |
94 | " ret (cls::*pFnc)( ${funcAnonParams} );\n" | 102 | " ret (cls::*pFnc)( ${funcAnonParams} );\n" |
@@ -112,6 +120,11 @@ function genSigs( outName ) | |||
112 | " return new __Slot${i}F<${templCallParams}>( pFnc );\n" | 120 | " return new __Slot${i}F<${templCallParams}>( pFnc );\n" |
113 | " }\n" | 121 | " }\n" |
114 | " \n" | 122 | " \n" |
123 | " virtual bool operator==( const _Slot${i}<${templCallParams}> &rhs ) const\n" | ||
124 | " {\n" | ||
125 | " return pFnc == ((const __Slot${i}F<${templCallParams}> &)rhs).pFnc;\n" | ||
126 | " }\n" | ||
127 | " \n" | ||
115 | " private:\n" | 128 | " private:\n" |
116 | " ret (*pFnc)( ${funcAnonParams} );\n" | 129 | " ret (*pFnc)( ${funcAnonParams} );\n" |
117 | " };\n" | 130 | " };\n" |
@@ -141,6 +154,17 @@ function genSigs( outName ) | |||
141 | " return *this;\n" | 154 | " return *this;\n" |
142 | " }\n" | 155 | " }\n" |
143 | " \n" | 156 | " \n" |
157 | " bool operator==( const Signal${i}<${templCallParams}> &rhs ) const\n" | ||
158 | " {\n" | ||
159 | " if( pCb == rhs.pCb )\n" | ||
160 | " return true;\n" | ||
161 | " if( pCb == NULL || rhs.pCb == NULL )\n" | ||
162 | " return false;\n" | ||
163 | " if( typeid(pCb) != typeid(rhs.pCb) )\n" | ||
164 | " return false;\n" | ||
165 | " return *pCb == *rhs.pCb;\n" | ||
166 | " }\n" | ||
167 | " \n" | ||
144 | " private:\n" | 168 | " private:\n" |
145 | " _Slot${i}<${templCallParams}> *pCb;\n" | 169 | " _Slot${i}<${templCallParams}> *pCb;\n" |
146 | " };\n" | 170 | " };\n" |
@@ -187,7 +211,7 @@ function genSigs( outName ) | |||
187 | " else\n" | 211 | " else\n" |
188 | " return (*i)( ${funcCallParams} );\n" | 212 | " return (*i)( ${funcCallParams} );\n" |
189 | " }\n" | 213 | " }\n" |
190 | " throw Bu::ExceptionBase(\"Empty SignalList with non-void return value called.\");\n" | 214 | " throw Bu::SignalException(\"Empty SignalList with non-void return value called.\");\n" |
191 | " }\n" | 215 | " }\n" |
192 | " };\n" | 216 | " };\n" |
193 | " \n" | 217 | " \n" |