View | Details | Raw Unified | Return to bug 412
Collapse All | Expand All

(-)a/src/core/callback.h (-68 / +274 lines)
 Lines 94-183    Link Here 
94
};
94
};
95
95
96
// declare the CallbackImpl class
96
// declare the CallbackImpl class
97
template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
97
template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
98
class CallbackImpl;
98
class CallbackImpl;
99
// define CallbackImpl for 0 params
99
// define CallbackImpl for 0 params
100
template <typename R>
100
template <typename R>
101
class CallbackImpl<R,empty,empty,empty,empty,empty,empty> : public CallbackImplBase {
101
class CallbackImpl<R,empty,empty,empty,empty,empty,empty,empty,empty,empty> : public CallbackImplBase {
102
public:
102
public:
103
  virtual ~CallbackImpl () {}
103
  virtual ~CallbackImpl () {}
104
  virtual R operator() (void) = 0;
104
  virtual R operator() (void) = 0;
105
};
105
};
106
// define CallbackImpl for 1 params
106
// define CallbackImpl for 1 params
107
template <typename R, typename T1>
107
template <typename R, typename T1>
108
class CallbackImpl<R,T1,empty,empty,empty,empty,empty> : public CallbackImplBase {
108
class CallbackImpl<R,T1,empty,empty,empty,empty,empty,empty,empty,empty> : public CallbackImplBase {
109
public:
109
public:
110
  virtual ~CallbackImpl () {}
110
  virtual ~CallbackImpl () {}
111
  virtual R operator() (T1) = 0;
111
  virtual R operator() (T1) = 0;
112
};
112
};
113
// define CallbackImpl for 2 params
113
// define CallbackImpl for 2 params
114
template <typename R, typename T1, typename T2>
114
template <typename R, typename T1, typename T2>
115
class CallbackImpl<R,T1,T2,empty,empty,empty,empty> : public CallbackImplBase {
115
class CallbackImpl<R,T1,T2,empty,empty,empty,empty,empty,empty,empty> : public CallbackImplBase {
116
public:
116
public:
117
  virtual ~CallbackImpl () {}
117
  virtual ~CallbackImpl () {}
118
  virtual R operator() (T1, T2) = 0;
118
  virtual R operator() (T1, T2) = 0;
119
};
119
};
120
// define CallbackImpl for 3 params
120
// define CallbackImpl for 3 params
121
template <typename R, typename T1, typename T2, typename T3>
121
template <typename R, typename T1, typename T2, typename T3>
122
class CallbackImpl<R,T1,T2,T3,empty,empty,empty> : public CallbackImplBase {
122
class CallbackImpl<R,T1,T2,T3,empty,empty,empty,empty,empty,empty> : public CallbackImplBase {
123
public:
123
public:
124
  virtual ~CallbackImpl () {}
124
  virtual ~CallbackImpl () {}
125
  virtual R operator() (T1, T2, T3) = 0;
125
  virtual R operator() (T1, T2, T3) = 0;
126
};
126
};
127
// define CallbackImpl for 4 params
127
// define CallbackImpl for 4 params
128
template <typename R, typename T1, typename T2, typename T3, typename T4>
128
template <typename R, typename T1, typename T2, typename T3, typename T4>
129
class CallbackImpl<R,T1,T2,T3,T4,empty,empty> : public CallbackImplBase {
129
class CallbackImpl<R,T1,T2,T3,T4,empty,empty,empty,empty,empty> : public CallbackImplBase {
130
public:
130
public:
131
  virtual ~CallbackImpl () {}
131
  virtual ~CallbackImpl () {}
132
  virtual R operator() (T1, T2, T3, T4) = 0;
132
  virtual R operator() (T1, T2, T3, T4) = 0;
133
};
133
};
134
// define CallbackImpl for 5 params
134
// define CallbackImpl for 5 params
135
template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5>
135
template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5>
136
class CallbackImpl<R,T1,T2,T3,T4,T5,empty> : public CallbackImplBase {
136
class CallbackImpl<R,T1,T2,T3,T4,T5,empty,empty,empty,empty> : public CallbackImplBase {
137
public:
137
public:
138
  virtual ~CallbackImpl () {}
138
  virtual ~CallbackImpl () {}
139
  virtual R operator() (T1, T2, T3, T4, T5) = 0;
139
  virtual R operator() (T1, T2, T3, T4, T5) = 0;
140
};
140
};
141
// define CallbackImpl for 6 params
141
// define CallbackImpl for 6 params
142
  template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
142
template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
143
class CallbackImpl : public CallbackImplBase {
143
class CallbackImpl<R,T1,T2,T3,T4,T5,T6,empty,empty,empty> : public CallbackImplBase {
144
public:
144
public:
145
  virtual ~CallbackImpl () {}
145
  virtual ~CallbackImpl () {}
146
  virtual R operator() (T1, T2, T3, T4, T5, T6) = 0;
146
  virtual R operator() (T1, T2, T3, T4, T5, T6) = 0;
147
};
147
};
148
// define CallbackImpl for 7 params
149
template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
150
class CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,empty,empty> : public CallbackImplBase {
151
public:
152
  virtual ~CallbackImpl () {}
153
  virtual R operator() (T1, T2, T3, T4, T5, T6, T7) = 0;
154
};
155
// define CallbackImpl for 8 params
156
template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
157
class CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,empty> : public CallbackImplBase {
158
public:
159
  virtual ~CallbackImpl () {}
160
  virtual R operator() (T1, T2, T3, T4, T5, T6, T7, T8) = 0;
161
};
162
// define CallbackImpl for 9 params
163
template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
164
class CallbackImpl : public CallbackImplBase {
165
public:
166
  virtual ~CallbackImpl () {}
167
  virtual R operator() (T1, T2, T3, T4, T5, T6, T7, T8, T9) = 0;
168
};
148
169
149
170
150
// an impl for Functors:
171
// an impl for Functors:
151
template <typename T, typename R, typename T1, typename T2, typename T3, typename T4,typename T5, typename T6>
172
template <typename T, typename R, typename T1, typename T2, typename T3, typename T4,typename T5, typename T6, typename T7, typename T8, typename T9>
152
class FunctorCallbackImpl : public CallbackImpl<R,T1,T2,T3,T4,T5,T6> {
173
class FunctorCallbackImpl : public CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> {
153
public:
174
public:
154
  FunctorCallbackImpl (T const &functor)
175
  FunctorCallbackImpl (T const &functor)
155
    : m_functor (functor) {}
176
    : m_functor (functor) {}
156
  virtual ~FunctorCallbackImpl () {}
177
  virtual ~FunctorCallbackImpl () {}
157
  R operator() (void) {
178
  R operator() (void) {
158
      return m_functor ();
179
    return m_functor ();
159
  }
180
  }
160
  R operator() (T1 a1) {
181
  R operator() (T1 a1) {
161
      return m_functor (a1);
182
    return m_functor (a1);
162
  }
183
  }
163
  R operator() (T1 a1,T2 a2) {
184
  R operator() (T1 a1,T2 a2) {
164
      return m_functor (a1,a2);
185
    return m_functor (a1,a2);
165
  }
186
  }
166
  R operator() (T1 a1,T2 a2,T3 a3) {
187
  R operator() (T1 a1,T2 a2,T3 a3) {
167
      return m_functor (a1,a2,a3);
188
    return m_functor (a1,a2,a3);
168
  }
189
  }
169
  R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
190
  R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
170
      return m_functor (a1,a2,a3,a4);
191
    return m_functor (a1,a2,a3,a4);
171
  }
192
  }
172
  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
193
  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
173
      return m_functor (a1,a2,a3,a4,a5);
194
    return m_functor (a1,a2,a3,a4,a5);
174
  }
195
  }
175
  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6) {
196
  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6) {
176
    return m_functor (a1,a2,a3,a4,a5,a6);
197
    return m_functor (a1,a2,a3,a4,a5,a6);
177
  }
198
  }
199
  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7) {
200
    return m_functor (a1,a2,a3,a4,a5,a6,a7);
201
  }
202
  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8) {
203
    return m_functor (a1,a2,a3,a4,a5,a6,a7,a8);
204
  }
205
  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8,T9 a9) {
206
    return m_functor (a1,a2,a3,a4,a5,a6,a7,a8,a9);
207
  }
178
  virtual bool IsEqual (Ptr<const CallbackImplBase> other) const {
208
  virtual bool IsEqual (Ptr<const CallbackImplBase> other) const {
179
    FunctorCallbackImpl<T,R,T1,T2,T3,T4,T5,T6> const *otherDerived = 
209
    FunctorCallbackImpl<T,R,T1,T2,T3,T4,T5,T6,T7,T8,T9> const *otherDerived = 
180
      dynamic_cast<FunctorCallbackImpl<T,R,T1,T2,T3,T4,T5,T6> const *> (PeekPointer(other));
210
      dynamic_cast<FunctorCallbackImpl<T,R,T1,T2,T3,T4,T5,T6,T7,T8,T9> const *> (PeekPointer(other));
181
    if (otherDerived == 0)
211
    if (otherDerived == 0)
182
      {
212
      {
183
        return false;
213
        return false;
 Lines 193-200    Link Here 
193
};
223
};
194
224
195
// an impl for pointer to member functions
225
// an impl for pointer to member functions
196
template <typename OBJ_PTR, typename MEM_PTR, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
226
template <typename OBJ_PTR, typename MEM_PTR, typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
197
class MemPtrCallbackImpl : public CallbackImpl<R,T1,T2,T3,T4,T5,T6> {
227
class MemPtrCallbackImpl : public CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> {
198
public:
228
public:
199
  MemPtrCallbackImpl (OBJ_PTR const&objPtr, MEM_PTR mem_ptr)
229
  MemPtrCallbackImpl (OBJ_PTR const&objPtr, MEM_PTR mem_ptr)
200
    : m_objPtr (objPtr), m_memPtr (mem_ptr) {}
230
    : m_objPtr (objPtr), m_memPtr (mem_ptr) {}
 Lines 220-228    Link Here 
220
  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6) {
250
  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6) {
221
    return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr) (a1, a2, a3, a4, a5, a6);
251
    return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr) (a1, a2, a3, a4, a5, a6);
222
  }
252
  }
253
  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7) {
254
    return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr) (a1, a2, a3, a4, a5, a6, a7);
255
  }
256
  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8) {
257
    return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr) (a1, a2, a3, a4, a5, a6, a7, a8);
258
  }
259
  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8, T9 a9) {
260
    return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr) (a1, a2, a3, a4, a5, a6, a7, a8, a9);
261
  }
223
  virtual bool IsEqual (Ptr<const CallbackImplBase> other) const {
262
  virtual bool IsEqual (Ptr<const CallbackImplBase> other) const {
224
    MemPtrCallbackImpl<OBJ_PTR,MEM_PTR,R,T1,T2,T3,T4,T5,T6> const *otherDerived = 
263
    MemPtrCallbackImpl<OBJ_PTR,MEM_PTR,R,T1,T2,T3,T4,T5,T6,T7,T8,T9> const *otherDerived = 
225
      dynamic_cast<MemPtrCallbackImpl<OBJ_PTR,MEM_PTR,R,T1,T2,T3,T4,T5,T6> const *> (PeekPointer (other));
264
      dynamic_cast<MemPtrCallbackImpl<OBJ_PTR,MEM_PTR,R,T1,T2,T3,T4,T5,T6,T7,T8,T9> const *> (PeekPointer (other));
226
    if (otherDerived == 0)
265
    if (otherDerived == 0)
227
      {
266
      {
228
        return false;
267
        return false;
 Lines 240-273    Link Here 
240
};
279
};
241
280
242
// an impl for Bound Functors:
281
// an impl for Bound Functors:
243
template <typename T, typename R, typename TX, typename T1, typename T2, typename T3, typename T4,typename T5>
282
template <typename T, typename R, typename TX, typename T1, typename T2, typename T3, typename T4,typename T5, typename T6, typename T7, typename T8>
244
class BoundFunctorCallbackImpl : public CallbackImpl<R,T1,T2,T3,T4,T5,empty> {
283
class BoundFunctorCallbackImpl : public CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,empty> {
245
public:
284
public:
246
  template <typename FUNCTOR, typename ARG>
285
  template <typename FUNCTOR, typename ARG>
247
  BoundFunctorCallbackImpl (FUNCTOR functor, ARG a)
286
  BoundFunctorCallbackImpl (FUNCTOR functor, ARG a)
248
      : m_functor (functor), m_a (a) {}
287
    : m_functor (functor), m_a (a) {}
249
  virtual ~BoundFunctorCallbackImpl () {}
288
  virtual ~BoundFunctorCallbackImpl () {}
250
  R operator() (void) {
289
  R operator() (void) {
251
      return m_functor (m_a);
290
    return m_functor (m_a);
252
  }
291
  }
253
  R operator() (T1 a1) {
292
  R operator() (T1 a1) {
254
      return m_functor (m_a,a1);
293
    return m_functor (m_a,a1);
255
  }
294
  }
256
  R operator() (T1 a1,T2 a2) {
295
  R operator() (T1 a1,T2 a2) {
257
      return m_functor (m_a,a1,a2);
296
    return m_functor (m_a,a1,a2);
258
  }
297
  }
259
  R operator() (T1 a1,T2 a2,T3 a3) {
298
  R operator() (T1 a1,T2 a2,T3 a3) {
260
      return m_functor (m_a,a1,a2,a3);
299
    return m_functor (m_a,a1,a2,a3);
261
  }
300
  }
262
  R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
301
  R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
263
      return m_functor (m_a,a1,a2,a3,a4);
302
    return m_functor (m_a,a1,a2,a3,a4);
264
  }
303
  }
265
  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
304
  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
266
      return m_functor (m_a,a1,a2,a3,a4,a5);
305
    return m_functor (m_a,a1,a2,a3,a4,a5);
306
  }
307
  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6) {
308
    return m_functor (m_a,a1,a2,a3,a4,a5,a6);
309
  }
310
  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7) {
311
    return m_functor (m_a,a1,a2,a3,a4,a5,a6,a7);
312
  }
313
  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8) {
314
    return m_functor (m_a,a1,a2,a3,a4,a5,a6,a7,a8);
267
  }
315
  }
268
  virtual bool IsEqual (Ptr<const CallbackImplBase> other) const {
316
  virtual bool IsEqual (Ptr<const CallbackImplBase> other) const {
269
    BoundFunctorCallbackImpl<T,R,TX,T1,T2,T3,T4,T5> const *otherDerived = 
317
    BoundFunctorCallbackImpl<T,R,TX,T1,T2,T3,T4,T5,T6,T7,T8> const *otherDerived = 
270
      dynamic_cast<BoundFunctorCallbackImpl<T,R,TX,T1,T2,T3,T4,T5> const *> (PeekPointer (other));
318
      dynamic_cast<BoundFunctorCallbackImpl<T,R,TX,T1,T2,T3,T4,T5,T6,T7,T8> const *> (PeekPointer (other));
271
    if (otherDerived == 0)
319
    if (otherDerived == 0)
272
      {
320
      {
273
        return false;
321
        return false;
 Lines 324-332    Link Here 
324
 */
372
 */
325
373
326
template<typename R, 
374
template<typename R, 
327
   typename T1 = empty, typename T2 = empty, 
375
         typename T1 = empty, typename T2 = empty, 
328
   typename T3 = empty, typename T4 = empty,
376
         typename T3 = empty, typename T4 = empty,
329
   typename T5 = empty, typename T6 = empty>
377
         typename T5 = empty, typename T6 = empty,
378
         typename T7 = empty, typename T8 = empty,
379
         typename T9 = empty>
330
class Callback : public CallbackBase {
380
class Callback : public CallbackBase {
331
public:
381
public:
332
  Callback () {}
382
  Callback () {}
 Lines 335-360    Link Here 
335
  // always properly disambiguited by the c++ compiler
385
  // always properly disambiguited by the c++ compiler
336
  template <typename FUNCTOR>
386
  template <typename FUNCTOR>
337
  Callback (FUNCTOR const &functor, bool, bool) 
387
  Callback (FUNCTOR const &functor, bool, bool) 
338
    : CallbackBase (Create<FunctorCallbackImpl<FUNCTOR,R,T1,T2,T3,T4,T5,T6> > (functor))
388
    : CallbackBase (Create<FunctorCallbackImpl<FUNCTOR,R,T1,T2,T3,T4,T5,T6,T7,T8,T9> > (functor))
339
  {}
389
  {}
340
390
341
  template <typename OBJ_PTR, typename MEM_PTR>
391
  template <typename OBJ_PTR, typename MEM_PTR>
342
  Callback (OBJ_PTR const &objPtr, MEM_PTR mem_ptr)
392
  Callback (OBJ_PTR const &objPtr, MEM_PTR mem_ptr)
343
    : CallbackBase (Create<MemPtrCallbackImpl<OBJ_PTR,MEM_PTR,R,T1,T2,T3,T4,T5,T6> > (objPtr, mem_ptr))
393
    : CallbackBase (Create<MemPtrCallbackImpl<OBJ_PTR,MEM_PTR,R,T1,T2,T3,T4,T5,T6,T7,T8,T9> > (objPtr, mem_ptr))
344
  {}
394
  {}
345
395
346
  Callback (Ptr<CallbackImpl<R,T1,T2,T3,T4,T5,T6> > const &impl)
396
  Callback (Ptr<CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> > const &impl)
347
    : CallbackBase (impl)
397
    : CallbackBase (impl)
348
  {}
398
  {}
349
399
350
  template <typename T>
400
  template <typename T>
351
  Callback<R,T2,T3,T4,T5,T6> Bind (T a) {
401
  Callback<R,T2,T3,T4,T5,T6,T7,T8,T9> Bind (T a) {
352
    Ptr<CallbackImpl<R,T2,T3,T4,T5,T6,empty> > impl =
402
    Ptr<CallbackImpl<R,T2,T3,T4,T5,T6,T7,T8,T9,empty> > impl =
353
      Ptr<CallbackImpl<R,T2,T3,T4,T5,T6,empty> > (
403
      Ptr<CallbackImpl<R,T2,T3,T4,T5,T6,T7,T8,T9,empty> > (
354
                                            new BoundFunctorCallbackImpl<
404
                                                  new BoundFunctorCallbackImpl<
355
                                            Callback<R,T1,T2,T3,T4,T5,T6>,
405
                                                  Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9>,
356
                                            R,T1,T2,T3,T4,T5,T6> (*this, a), false);
406
                                                  R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (*this, a), false);
357
    return Callback<R,T2,T3,T4,T5,T6> (impl);
407
    return Callback<R,T2,T3,T4,T5,T6,T7,T8,T9> (impl);
358
  }
408
  }
359
409
360
  bool IsNull (void) const {
410
  bool IsNull (void) const {
 Lines 385-390    Link Here 
385
  R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6) const {
435
  R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6) const {
386
    return (*(DoPeekImpl ())) (a1,a2,a3,a4,a5,a6);
436
    return (*(DoPeekImpl ())) (a1,a2,a3,a4,a5,a6);
387
  }
437
  }
438
  R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6,T7 a7) const {
439
    return (*(DoPeekImpl ())) (a1,a2,a3,a4,a5,a6,a7);
440
  }
441
  R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6,T7 a7,T8 a8) const {
442
    return (*(DoPeekImpl ())) (a1,a2,a3,a4,a5,a6,a7,a8);
443
  }
444
  R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6,T7 a7,T8 a8, T9 a9) const {
445
    return (*(DoPeekImpl ())) (a1,a2,a3,a4,a5,a6,a7,a8,a9);
446
  }
388
447
389
  bool IsEqual (const CallbackBase &other) const {
448
  bool IsEqual (const CallbackBase &other) const {
390
    return m_impl->IsEqual (other.GetImpl ());
449
    return m_impl->IsEqual (other.GetImpl ());
 Lines 397-407    Link Here 
397
    DoAssign (other.GetImpl ());
456
    DoAssign (other.GetImpl ());
398
  }
457
  }
399
private:
458
private:
400
  CallbackImpl<R,T1,T2,T3,T4,T5,T6> *DoPeekImpl (void) const {
459
  CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> *DoPeekImpl (void) const {
401
    return static_cast<CallbackImpl<R,T1,T2,T3,T4,T5,T6> *> (PeekPointer (m_impl));
460
    return static_cast<CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> *> (PeekPointer (m_impl));
402
  }
461
  }
403
  bool DoCheckType (Ptr<const CallbackImplBase> other) const {
462
  bool DoCheckType (Ptr<const CallbackImplBase> other) const {
404
    if (other != 0 && dynamic_cast<const CallbackImpl<R,T1,T2,T3,T4,T5,T6> *> (PeekPointer (other)) != 0)
463
    if (other != 0 && dynamic_cast<const CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> *> (PeekPointer (other)) != 0)
405
      {
464
      {
406
        return true;
465
        return true;
407
      }
466
      }
 Lines 419-425    Link Here 
419
      {
478
      {
420
        NS_FATAL_ERROR ("Incompatible types. (feed to \"c++filt -t\")"
479
        NS_FATAL_ERROR ("Incompatible types. (feed to \"c++filt -t\")"
421
                        " got=" << typeid (*other).name () << 
480
                        " got=" << typeid (*other).name () << 
422
                        ", expected=" << typeid (CallbackImpl<R,T1,T2,T3,T4,T5,T6> *).name ());
481
                        ", expected=" << typeid (CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> *).name ());
423
      }
482
      }
424
    m_impl = const_cast<CallbackImplBase *> (PeekPointer (other));
483
    m_impl = const_cast<CallbackImplBase *> (PeekPointer (other));
425
  }
484
  }
 Lines 428-435    Link Here 
428
487
429
template <typename R, typename T1, typename T2,
488
template <typename R, typename T1, typename T2,
430
          typename T3, typename T4,
489
          typename T3, typename T4,
431
          typename T5, typename T6>
490
          typename T5, typename T6,
432
bool operator != (Callback<R,T1,T2,T3,T4,T5,T6> a, Callback<R,T1,T2,T3,T4,T5,T6> b)
491
          typename T7, typename T8,
492
          typename T9>
493
bool operator != (Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> a, Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> b)
433
{
494
{
434
  return !a.IsEqual (b);
495
  return !a.IsEqual (b);
435
}
496
}
 Lines 541-547    Link Here 
541
 * \param mem_ptr class method member pointer
602
 * \param mem_ptr class method member pointer
542
 * \param objPtr class instance
603
 * \param objPtr class instance
543
 * \return a wrapper Callback
604
 * \return a wrapper Callback
544
 * Build Callbacks for class method members which takes five arguments
605
 * Build Callbacks for class method members which takes six arguments
545
 * and potentially return a value.
606
 * and potentially return a value.
546
 */
607
 */
547
template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5,typename T6>
608
template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5,typename T6>
 Lines 551-556    Link Here 
551
template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5, typename T6>
612
template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5, typename T6>
552
Callback<R,T1,T2,T3,T4,T5,T6> MakeCallback (R (T::*mem_ptr) (T1,T2,T3,T4,T5,T6) const, OBJ objPtr) {
613
Callback<R,T1,T2,T3,T4,T5,T6> MakeCallback (R (T::*mem_ptr) (T1,T2,T3,T4,T5,T6) const, OBJ objPtr) {
553
  return Callback<R,T1,T2,T3,T4,T5,T6> (objPtr, mem_ptr);
614
  return Callback<R,T1,T2,T3,T4,T5,T6> (objPtr, mem_ptr);
615
}
616
617
/**
618
 * \ingroup MakeCallback
619
 * \param mem_ptr class method member pointer
620
 * \param objPtr class instance
621
 * \return a wrapper Callback
622
 * Build Callbacks for class method members which takes seven arguments
623
 * and potentially return a value.
624
 */
625
template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5,typename T6, typename T7>
626
Callback<R,T1,T2,T3,T4,T5,T6,T7> MakeCallback (R (T::*mem_ptr) (T1,T2,T3,T4,T5,T6,T7), OBJ objPtr) {
627
  return Callback<R,T1,T2,T3,T4,T5,T6,T7> (objPtr, mem_ptr);
628
}
629
template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5, typename T6, typename T7>
630
Callback<R,T1,T2,T3,T4,T5,T6,T7> MakeCallback (R (T::*mem_ptr) (T1,T2,T3,T4,T5,T6,T7) const, OBJ objPtr) {
631
  return Callback<R,T1,T2,T3,T4,T5,T6,T7> (objPtr, mem_ptr);
632
}
633
634
635
/**
636
 * \ingroup MakeCallback
637
 * \param mem_ptr class method member pointer
638
 * \param objPtr class instance
639
 * \return a wrapper Callback
640
 * Build Callbacks for class method members which takes eight arguments
641
 * and potentially return a value.
642
 */
643
template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5,typename T6, typename T7, typename T8>
644
Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> MakeCallback (R (T::*mem_ptr) (T1,T2,T3,T4,T5,T6,T7,T8), OBJ objPtr) {
645
  return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> (objPtr, mem_ptr);
646
}
647
template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5, typename T6, typename T7, typename T8>
648
Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> MakeCallback (R (T::*mem_ptr) (T1,T2,T3,T4,T5,T6,T7,T8) const, OBJ objPtr) {
649
  return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> (objPtr, mem_ptr);
650
}
651
652
/**
653
 * \ingroup MakeCallback
654
 * \param mem_ptr class method member pointer
655
 * \param objPtr class instance
656
 * \return a wrapper Callback
657
 * Build Callbacks for class method members which takes nine arguments
658
 * and potentially return a value.
659
 */
660
template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5,typename T6, typename T7, typename T8, typename T9>
661
Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> MakeCallback (R (T::*mem_ptr) (T1,T2,T3,T4,T5,T6,T7,T8,T9), OBJ objPtr) {
662
  return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (objPtr, mem_ptr);
663
}
664
template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5, typename T6, typename T7, typename T8, typename T9>
665
Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> MakeCallback (R (T::*mem_ptr) (T1,T2,T3,T4,T5,T6,T7,T8,T9) const, OBJ objPtr) {
666
  return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (objPtr, mem_ptr);
554
}
667
}
555
668
556
/**
669
/**
 Lines 623-634    Link Here 
623
 * \ingroup MakeCallback
736
 * \ingroup MakeCallback
624
 * \param fnPtr function pointer
737
 * \param fnPtr function pointer
625
 * \return a wrapper Callback
738
 * \return a wrapper Callback
626
 * Build Callbacks for functions which takes five arguments
739
 * Build Callbacks for functions which takes six arguments
627
 * and potentially return a value.
740
 * and potentially return a value.
628
 */
741
 */
629
template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6>
742
template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6>
630
Callback<R,T1,T2,T3,T4,T5,T6> MakeCallback (R (*fnPtr) (T1,T2,T3,T4,T5,T6)) {
743
Callback<R,T1,T2,T3,T4,T5,T6> MakeCallback (R (*fnPtr) (T1,T2,T3,T4,T5,T6)) {
631
  return Callback<R,T1,T2,T3,T4,T5,T6> (fnPtr, true, true);
744
  return Callback<R,T1,T2,T3,T4,T5,T6> (fnPtr, true, true);
745
}
746
747
/**
748
 * \ingroup MakeCallback
749
 * \param fnPtr function pointer
750
 * \return a wrapper Callback
751
 * Build Callbacks for functions which takes seven arguments
752
 * and potentially return a value.
753
 */
754
template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6, typename T7>
755
Callback<R,T1,T2,T3,T4,T5,T6,T7> MakeCallback (R (*fnPtr) (T1,T2,T3,T4,T5,T6,T7)) {
756
  return Callback<R,T1,T2,T3,T4,T5,T6,T7> (fnPtr, true, true);
757
}
758
759
/**
760
 * \ingroup MakeCallback
761
 * \param fnPtr function pointer
762
 * \return a wrapper Callback
763
 * Build Callbacks for functions which takes eight arguments
764
 * and potentially return a value.
765
 */
766
template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6, typename T7, typename T8>
767
Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> MakeCallback (R (*fnPtr) (T1,T2,T3,T4,T5,T6,T7,T8)) {
768
  return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> (fnPtr, true, true);
769
}
770
771
/**
772
 * \ingroup MakeCallback
773
 * \param fnPtr function pointer
774
 * \return a wrapper Callback
775
 * Build Callbacks for functions which takes nine arguments
776
 * and potentially return a value.
777
 */
778
template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6, typename T7, typename T8, typename T9>
779
Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> MakeCallback (R (*fnPtr) (T1,T2,T3,T4,T5,T6,T7,T8,T9)) {
780
  return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (fnPtr, true, true);
632
}
781
}
633
782
634
783
 Lines 702-713    Link Here 
702
 * \ingroup MakeCallback
851
 * \ingroup MakeCallback
703
 * \overload Callback<R> MakeNullCallback (void)
852
 * \overload Callback<R> MakeNullCallback (void)
704
 * \return a wrapper Callback
853
 * \return a wrapper Callback
705
 * Build a null callback which takes five arguments
854
 * Build a null callback which takes six arguments
706
 * and potentially return a value.
855
 * and potentially return a value.
707
 */
856
 */
708
template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6>
857
template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6>
709
Callback<R,T1,T2,T3,T4,T5,T6> MakeNullCallback (void) {
858
Callback<R,T1,T2,T3,T4,T5,T6> MakeNullCallback (void) {
710
  return Callback<R,T1,T2,T3,T4,T5,T6> ();
859
  return Callback<R,T1,T2,T3,T4,T5,T6> ();
860
}
861
862
/**
863
 * \ingroup MakeCallback
864
 * \overload Callback<R> MakeNullCallback (void)
865
 * \return a wrapper Callback
866
 * Build a null callback which takes seven arguments
867
 * and potentially return a value.
868
 */
869
template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6, typename T7>
870
Callback<R,T1,T2,T3,T4,T5,T6,T7> MakeNullCallback (void) {
871
  return Callback<R,T1,T2,T3,T4,T5,T6,T7> ();
872
}
873
874
/**
875
 * \ingroup MakeCallback
876
 * \overload Callback<R> MakeNullCallback (void)
877
 * \return a wrapper Callback
878
 * Build a null callback which takes eight arguments
879
 * and potentially return a value.
880
 */
881
template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6, typename T7, typename T8>
882
Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> MakeNullCallback (void) {
883
  return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> ();
884
}
885
886
/**
887
 * \ingroup MakeCallback
888
 * \overload Callback<R> MakeNullCallback (void)
889
 * \return a wrapper Callback
890
 * Build a null callback which takes nine arguments
891
 * and potentially return a value.
892
 */
893
template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6, typename T7, typename T8, typename T9>
894
Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> MakeNullCallback (void) {
895
  return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> ();
711
}
896
}
712
897
713
898
 Lines 719-763    Link Here 
719
904
720
template <typename R, typename TX, typename ARG>
905
template <typename R, typename TX, typename ARG>
721
Callback<R> MakeBoundCallback (R (*fnPtr) (TX), ARG a) {
906
Callback<R> MakeBoundCallback (R (*fnPtr) (TX), ARG a) {
722
  Ptr<CallbackImpl<R,empty,empty,empty,empty,empty,empty> > impl =
907
  Ptr<CallbackImpl<R,empty,empty,empty,empty,empty,empty,empty,empty,empty> > impl =
723
    Create<BoundFunctorCallbackImpl<R (*) (TX),R,TX,empty,empty,empty,empty,empty> >(fnPtr, a);
908
    Create<BoundFunctorCallbackImpl<R (*) (TX),R,TX,empty,empty,empty,empty,empty,empty,empty,empty> >(fnPtr, a);
724
  return Callback<R> (impl);
909
  return Callback<R> (impl);
725
}
910
}
726
911
727
template <typename R, typename TX, typename ARG, 
912
template <typename R, typename TX, typename ARG, 
728
          typename T1>
913
          typename T1>
729
Callback<R,T1> MakeBoundCallback (R (*fnPtr) (TX,T1), ARG a) {
914
Callback<R,T1> MakeBoundCallback (R (*fnPtr) (TX,T1), ARG a) {
730
  Ptr<CallbackImpl<R,T1,empty,empty,empty,empty,empty> > impl =
915
  Ptr<CallbackImpl<R,T1,empty,empty,empty,empty,empty,empty,empty,empty> > impl =
731
    Create<BoundFunctorCallbackImpl<R (*) (TX,T1),R,TX,T1,empty,empty,empty,empty> > (fnPtr, a);
916
    Create<BoundFunctorCallbackImpl<R (*) (TX,T1),R,TX,T1,empty,empty,empty,empty,empty,empty,empty> > (fnPtr, a);
732
  return Callback<R,T1> (impl);
917
  return Callback<R,T1> (impl);
733
}
918
}
734
template <typename R, typename TX, typename ARG, 
919
template <typename R, typename TX, typename ARG, 
735
          typename T1, typename T2>
920
          typename T1, typename T2>
736
Callback<R,T1,T2> MakeBoundCallback (R (*fnPtr) (TX,T1,T2), ARG a) {
921
Callback<R,T1,T2> MakeBoundCallback (R (*fnPtr) (TX,T1,T2), ARG a) {
737
  Ptr<CallbackImpl<R,T1,T2,empty,empty,empty,empty> > impl =
922
  Ptr<CallbackImpl<R,T1,T2,empty,empty,empty,empty,empty,empty,empty> > impl =
738
    Create<BoundFunctorCallbackImpl<R (*) (TX,T1,T2),R,TX,T1,T2,empty,empty,empty> > (fnPtr, a);
923
    Create<BoundFunctorCallbackImpl<R (*) (TX,T1,T2),R,TX,T1,T2,empty,empty,empty,empty,empty,empty> > (fnPtr, a);
739
  return Callback<R,T1,T2> (impl);
924
  return Callback<R,T1,T2> (impl);
740
}
925
}
741
template <typename R, typename TX, typename ARG,
926
template <typename R, typename TX, typename ARG,
742
          typename T1, typename T2,typename T3>
927
          typename T1, typename T2,typename T3>
743
Callback<R,T1,T2,T3> MakeBoundCallback (R (*fnPtr) (TX,T1,T2,T3), ARG a) {
928
Callback<R,T1,T2,T3> MakeBoundCallback (R (*fnPtr) (TX,T1,T2,T3), ARG a) {
744
  Ptr<CallbackImpl<R,T1,T2,T3,empty,empty,empty> > impl =
929
  Ptr<CallbackImpl<R,T1,T2,T3,empty,empty,empty,empty,empty,empty> > impl =
745
    Create<BoundFunctorCallbackImpl<R (*) (TX,T1,T2,T3),R,TX,T1,T2,T3,empty,empty> > (fnPtr, a);
930
    Create<BoundFunctorCallbackImpl<R (*) (TX,T1,T2,T3),R,TX,T1,T2,T3,empty,empty,empty,empty,empty> > (fnPtr, a);
746
  return Callback<R,T1,T2,T3> (impl);
931
  return Callback<R,T1,T2,T3> (impl);
747
}
932
}
748
template <typename R, typename TX, typename ARG,
933
template <typename R, typename TX, typename ARG,
749
          typename T1, typename T2,typename T3,typename T4>
934
          typename T1, typename T2,typename T3,typename T4>
750
Callback<R,T1,T2,T3,T4> MakeBoundCallback (R (*fnPtr) (TX,T1,T2,T3,T4), ARG a) {
935
Callback<R,T1,T2,T3,T4> MakeBoundCallback (R (*fnPtr) (TX,T1,T2,T3,T4), ARG a) {
751
  Ptr<CallbackImpl<R,T1,T2,T3,T4,empty,empty> > impl =
936
  Ptr<CallbackImpl<R,T1,T2,T3,T4,empty,empty,empty,empty,empty> > impl =
752
    Create<BoundFunctorCallbackImpl<R (*) (TX,T1,T2,T3,T4),R,TX,T1,T2,T3,T4,empty> > (fnPtr, a);
937
    Create<BoundFunctorCallbackImpl<R (*) (TX,T1,T2,T3,T4),R,TX,T1,T2,T3,T4,empty,empty,empty,empty> > (fnPtr, a);
753
  return Callback<R,T1,T2,T3,T4> (impl);
938
  return Callback<R,T1,T2,T3,T4> (impl);
754
}
939
}
755
template <typename R, typename TX, typename ARG,
940
template <typename R, typename TX, typename ARG,
756
          typename T1, typename T2,typename T3,typename T4,typename T5>
941
          typename T1, typename T2,typename T3,typename T4,typename T5>
757
Callback<R,T1,T2,T3,T4,T5> MakeBoundCallback (R (*fnPtr) (TX,T1,T2,T3,T4,T5), ARG a) {
942
Callback<R,T1,T2,T3,T4,T5> MakeBoundCallback (R (*fnPtr) (TX,T1,T2,T3,T4,T5), ARG a) {
758
  Ptr<CallbackImpl<R,T1,T2,T3,T4,T5,empty> > impl =
943
  Ptr<CallbackImpl<R,T1,T2,T3,T4,T5,empty,empty,empty,empty> > impl =
759
    Create<BoundFunctorCallbackImpl<R (*) (TX,T1,T2,T3,T4,T5),R,TX,T1,T2,T3,T4,T5> > (fnPtr, a);
944
    Create<BoundFunctorCallbackImpl<R (*) (TX,T1,T2,T3,T4,T5),R,TX,T1,T2,T3,T4,T5,empty,empty,empty> > (fnPtr, a);
760
  return Callback<R,T1,T2,T3,T4,T5> (impl);
945
  return Callback<R,T1,T2,T3,T4,T5> (impl);
946
}
947
template <typename R, typename TX, typename ARG,
948
          typename T1, typename T2,typename T3,typename T4,typename T5, typename T6>
949
Callback<R,T1,T2,T3,T4,T5,T6> MakeBoundCallback (R (*fnPtr) (TX,T1,T2,T3,T4,T5,T6), ARG a) {
950
  Ptr<CallbackImpl<R,T1,T2,T3,T4,T5,T6,empty,empty,empty> > impl =
951
    Create<BoundFunctorCallbackImpl<R (*) (TX,T1,T2,T3,T4,T5,T6),R,TX,T1,T2,T3,T4,T5,T6,empty,empty> > (fnPtr, a);
952
  return Callback<R,T1,T2,T3,T4,T5,T6> (impl);
953
}
954
template <typename R, typename TX, typename ARG,
955
          typename T1, typename T2,typename T3,typename T4,typename T5, typename T6, typename T7>
956
Callback<R,T1,T2,T3,T4,T5,T6,T7> MakeBoundCallback (R (*fnPtr) (TX,T1,T2,T3,T4,T5,T6,T7), ARG a) {
957
  Ptr<CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,empty,empty> > impl =
958
    Create<BoundFunctorCallbackImpl<R (*) (TX,T1,T2,T3,T4,T5,T6,T7),R,TX,T1,T2,T3,T4,T5,T6,T7,empty> > (fnPtr, a);
959
  return Callback<R,T1,T2,T3,T4,T5,T6,T7> (impl);
960
}
961
template <typename R, typename TX, typename ARG,
962
          typename T1, typename T2,typename T3,typename T4,typename T5, typename T6, typename T7, typename T8>
963
Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> MakeBoundCallback (R (*fnPtr) (TX,T1,T2,T3,T4,T5,T6,T7,T8), ARG a) {
964
  Ptr<CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,empty> > impl =
965
    Create<BoundFunctorCallbackImpl<R (*) (TX,T1,T2,T3,T4,T5,T6,T7,T8),R,TX,T1,T2,T3,T4,T5,T6,T7,T8> > (fnPtr, a);
966
  return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> (impl);
761
}
967
}
762
} // namespace ns3
968
} // namespace ns3
763
969
(-)a/src/core/traced-callback.h (-27 / +105 lines)
 Lines 37-43    Link Here 
37
 * the chain of callbacks.
37
 * the chain of callbacks.
38
 */
38
 */
39
template<typename T1 = empty, typename T2 = empty, 
39
template<typename T1 = empty, typename T2 = empty, 
40
         typename T3 = empty, typename T4 = empty>
40
         typename T3 = empty, typename T4 = empty,
41
         typename T5 = empty, typename T6 = empty,
42
         typename T7 = empty, typename T8 = empty>
41
class TracedCallback 
43
class TracedCallback 
42
{
44
{
43
public:
45
public:
 Lines 81-89    Link Here 
81
  void operator() (T1 a1, T2 a2) const;
83
  void operator() (T1 a1, T2 a2) const;
82
  void operator() (T1 a1, T2 a2, T3 a3) const;
84
  void operator() (T1 a1, T2 a2, T3 a3) const;
83
  void operator() (T1 a1, T2 a2, T3 a3, T4 a4) const;
85
  void operator() (T1 a1, T2 a2, T3 a3, T4 a4) const;
86
  void operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) const;
87
  void operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) const;
88
  void operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) const;
89
  void operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) const;
84
90
85
private:  
91
private:  
86
  typedef std::list<Callback<void,T1,T2,T3,T4> > CallbackList;
92
  typedef std::list<Callback<void,T1,T2,T3,T4,T5,T6,T7,T8> > CallbackList;
87
  CallbackList m_callbackList;
93
  CallbackList m_callbackList;
88
};
94
};
89
95
 Lines 94-126    Link Here 
94
namespace ns3 {
100
namespace ns3 {
95
101
96
template<typename T1, typename T2, 
102
template<typename T1, typename T2, 
97
         typename T3, typename T4>
103
         typename T3, typename T4,
98
TracedCallback<T1,T2,T3,T4>::TracedCallback ()
104
         typename T5, typename T6,
105
         typename T7, typename T8>
106
TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::TracedCallback ()
99
  : m_callbackList () 
107
  : m_callbackList () 
100
{}
108
{}
101
template<typename T1, typename T2, 
109
template<typename T1, typename T2, 
102
         typename T3, typename T4>
110
         typename T3, typename T4,
111
         typename T5, typename T6,
112
         typename T7, typename T8>
103
void 
113
void 
104
TracedCallback<T1,T2,T3,T4>::ConnectWithoutContext (const CallbackBase & callback)
114
TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::ConnectWithoutContext (const CallbackBase & callback)
105
{
115
{
106
  Callback<void,T1,T2,T3,T4> cb;
116
  Callback<void,T1,T2,T3,T4,T5,T6,T7,T8> cb;
107
  cb.Assign (callback);
117
  cb.Assign (callback);
108
  m_callbackList.push_back (cb);
118
  m_callbackList.push_back (cb);
109
}
119
}
110
template<typename T1, typename T2, 
120
template<typename T1, typename T2, 
111
         typename T3, typename T4>
121
         typename T3, typename T4,
122
         typename T5, typename T6,
123
         typename T7, typename T8>
112
void 
124
void 
113
TracedCallback<T1,T2,T3,T4>::Connect (const CallbackBase & callback, std::string path)
125
TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::Connect (const CallbackBase & callback, std::string path)
114
{
126
{
115
  Callback<void,std::string,T1,T2,T3,T4> cb;
127
  Callback<void,std::string,T1,T2,T3,T4,T5,T6,T7,T8> cb;
116
  cb.Assign (callback);
128
  cb.Assign (callback);
117
  Callback<void,T1,T2,T3,T4> realCb = cb.Bind (path);
129
  Callback<void,T1,T2,T3,T4,T5,T6,T7,T8> realCb = cb.Bind (path);
118
  m_callbackList.push_back (realCb);
130
  m_callbackList.push_back (realCb);
119
}
131
}
120
template<typename T1, typename T2, 
132
template<typename T1, typename T2, 
121
         typename T3, typename T4>
133
         typename T3, typename T4,
134
         typename T5, typename T6,
135
         typename T7, typename T8>
122
void 
136
void 
123
TracedCallback<T1,T2,T3,T4>::DisconnectWithoutContext (const CallbackBase & callback)
137
TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::DisconnectWithoutContext (const CallbackBase & callback)
124
{
138
{
125
  for (typename CallbackList::iterator i = m_callbackList.begin ();
139
  for (typename CallbackList::iterator i = m_callbackList.begin ();
126
       i != m_callbackList.end (); /* empty */)
140
       i != m_callbackList.end (); /* empty */)
 Lines 136-154    Link Here 
136
    }
150
    }
137
}
151
}
138
template<typename T1, typename T2, 
152
template<typename T1, typename T2, 
139
         typename T3, typename T4>
153
         typename T3, typename T4,
154
         typename T5, typename T6,
155
         typename T7, typename T8>
140
void 
156
void 
141
TracedCallback<T1,T2,T3,T4>::Disconnect (const CallbackBase & callback, std::string path)
157
TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::Disconnect (const CallbackBase & callback, std::string path)
142
{
158
{
143
  Callback<void,std::string,T1,T2,T3,T4> cb;
159
  Callback<void,std::string,T1,T2,T3,T4,T5,T6,T7,T8> cb;
144
  cb.Assign (callback);
160
  cb.Assign (callback);
145
  Callback<void,T1,T2,T3,T4> realCb = cb.Bind (path);
161
  Callback<void,T1,T2,T3,T4,T5,T6,T7,T8> realCb = cb.Bind (path);
146
  DisconnectWithoutContext (realCb);
162
  DisconnectWithoutContext (realCb);
147
}
163
}
148
template<typename T1, typename T2, 
164
template<typename T1, typename T2, 
149
         typename T3, typename T4>
165
         typename T3, typename T4,
166
         typename T5, typename T6,
167
         typename T7, typename T8>
150
void 
168
void 
151
TracedCallback<T1,T2,T3,T4>::operator() (void) const
169
TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::operator() (void) const
152
{
170
{
153
  for (typename CallbackList::const_iterator i = m_callbackList.begin ();
171
  for (typename CallbackList::const_iterator i = m_callbackList.begin ();
154
       i != m_callbackList.end (); i++)
172
       i != m_callbackList.end (); i++)
 Lines 157-165    Link Here 
157
    }
175
    }
158
}
176
}
159
template<typename T1, typename T2, 
177
template<typename T1, typename T2, 
160
         typename T3, typename T4>
178
         typename T3, typename T4,
179
         typename T5, typename T6,
180
         typename T7, typename T8>
161
void 
181
void 
162
TracedCallback<T1,T2,T3,T4>::operator() (T1 a1) const
182
TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::operator() (T1 a1) const
163
{
183
{
164
  for (typename CallbackList::const_iterator i = m_callbackList.begin ();
184
  for (typename CallbackList::const_iterator i = m_callbackList.begin ();
165
       i != m_callbackList.end (); i++)
185
       i != m_callbackList.end (); i++)
 Lines 168-176    Link Here 
168
    }
188
    }
169
}
189
}
170
template<typename T1, typename T2, 
190
template<typename T1, typename T2, 
171
         typename T3, typename T4>
191
         typename T3, typename T4,
192
         typename T5, typename T6,
193
         typename T7, typename T8>
172
void 
194
void 
173
TracedCallback<T1,T2,T3,T4>::operator() (T1 a1, T2 a2) const
195
TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::operator() (T1 a1, T2 a2) const
174
{
196
{
175
  for (typename CallbackList::const_iterator i = m_callbackList.begin ();
197
  for (typename CallbackList::const_iterator i = m_callbackList.begin ();
176
       i != m_callbackList.end (); i++)
198
       i != m_callbackList.end (); i++)
 Lines 179-187    Link Here 
179
    }
201
    }
180
}
202
}
181
template<typename T1, typename T2, 
203
template<typename T1, typename T2, 
182
         typename T3, typename T4>
204
         typename T3, typename T4,
205
         typename T5, typename T6,
206
         typename T7, typename T8>
183
void 
207
void 
184
TracedCallback<T1,T2,T3,T4>::operator() (T1 a1, T2 a2, T3 a3) const
208
TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::operator() (T1 a1, T2 a2, T3 a3) const
185
{
209
{
186
  for (typename CallbackList::const_iterator i = m_callbackList.begin ();
210
  for (typename CallbackList::const_iterator i = m_callbackList.begin ();
187
       i != m_callbackList.end (); i++)
211
       i != m_callbackList.end (); i++)
 Lines 190-198    Link Here 
190
    }
214
    }
191
}
215
}
192
template<typename T1, typename T2, 
216
template<typename T1, typename T2, 
193
         typename T3, typename T4>
217
         typename T3, typename T4,
218
         typename T5, typename T6,
219
         typename T7, typename T8>
194
void 
220
void 
195
TracedCallback<T1,T2,T3,T4>::operator() (T1 a1, T2 a2, T3 a3, T4 a4) const
221
TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::operator() (T1 a1, T2 a2, T3 a3, T4 a4) const
196
{
222
{
197
  for (typename CallbackList::const_iterator i = m_callbackList.begin ();
223
  for (typename CallbackList::const_iterator i = m_callbackList.begin ();
198
       i != m_callbackList.end (); i++)
224
       i != m_callbackList.end (); i++)
 Lines 200-205    Link Here 
200
      (*i) (a1, a2, a3, a4);
226
      (*i) (a1, a2, a3, a4);
201
    }
227
    }
202
}
228
}
229
template<typename T1, typename T2, 
230
         typename T3, typename T4,
231
         typename T5, typename T6,
232
         typename T7, typename T8>
233
void 
234
TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) const
235
{
236
  for (typename CallbackList::const_iterator i = m_callbackList.begin ();
237
       i != m_callbackList.end (); i++)
238
    {
239
      (*i) (a1, a2, a3, a4, a5);
240
    }
241
}
242
template<typename T1, typename T2, 
243
         typename T3, typename T4,
244
         typename T5, typename T6,
245
         typename T7, typename T8>
246
void 
247
TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) const
248
{
249
  for (typename CallbackList::const_iterator i = m_callbackList.begin ();
250
       i != m_callbackList.end (); i++)
251
    {
252
      (*i) (a1, a2, a3, a4, a5, a6);
253
    }
254
}
255
template<typename T1, typename T2, 
256
         typename T3, typename T4,
257
         typename T5, typename T6,
258
         typename T7, typename T8>
259
void 
260
TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) const
261
{
262
  for (typename CallbackList::const_iterator i = m_callbackList.begin ();
263
       i != m_callbackList.end (); i++)
264
    {
265
      (*i) (a1, a2, a3, a4, a5, a6, a7);
266
    }
267
}
268
template<typename T1, typename T2, 
269
         typename T3, typename T4,
270
         typename T5, typename T6,
271
         typename T7, typename T8>
272
void 
273
TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) const
274
{
275
  for (typename CallbackList::const_iterator i = m_callbackList.begin ();
276
       i != m_callbackList.end (); i++)
277
    {
278
      (*i) (a1, a2, a3, a4, a5, a6, a7, a8);
279
    }
280
}
203
281
204
}//namespace ns3
282
}//namespace ns3
205
283

Return to bug 412