A Discrete-Event Network Simulator
API
callback.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2005,2006 INRIA
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
19  */
20 
21 #ifndef CALLBACK_H
22 #define CALLBACK_H
23 
24 #include "ptr.h"
25 #include "fatal-error.h"
26 #include "empty.h"
27 #include "type-traits.h"
28 #include "attribute.h"
29 #include "attribute-helper.h"
30 #include "simple-ref-count.h"
31 #include <typeinfo>
32 
33 namespace ns3 {
34 
35 // Define the doxygen subgroups all at once,
36 // since the implementations are interleaved.
37 
106 template <typename T>
108 
115 template <typename T>
116 struct CallbackTraits<T *>
117 {
122  static T & GetReference (T * const p)
123  {
124  return *p;
125  }
126 };
127 
133 class CallbackImplBase : public SimpleRefCount<CallbackImplBase>
134 {
135 public:
137  virtual ~CallbackImplBase () {}
144  virtual bool IsEqual (Ptr<const CallbackImplBase> other) const = 0;
145 };
146 
151 template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
153 
161 template <typename R>
163 public:
164  virtual ~CallbackImpl () {}
165  virtual R operator() (void) = 0;
166 };
168 template <typename R, typename T1>
170 public:
171  virtual ~CallbackImpl () {}
172  virtual R operator() (T1) = 0;
173 };
175 template <typename R, typename T1, typename T2>
177 public:
178  virtual ~CallbackImpl () {}
179  virtual R operator() (T1, T2) = 0;
180 };
182 template <typename R, typename T1, typename T2, typename T3>
184 public:
185  virtual ~CallbackImpl () {}
186  virtual R operator() (T1, T2, T3) = 0;
187 };
189 template <typename R, typename T1, typename T2, typename T3, typename T4>
190 class CallbackImpl<R,T1,T2,T3,T4,empty,empty,empty,empty,empty> : public CallbackImplBase {
191 public:
192  virtual ~CallbackImpl () {}
193  virtual R operator() (T1, T2, T3, T4) = 0;
194 };
196 template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5>
197 class CallbackImpl<R,T1,T2,T3,T4,T5,empty,empty,empty,empty> : public CallbackImplBase {
198 public:
199  virtual ~CallbackImpl () {}
200  virtual R operator() (T1, T2, T3, T4, T5) = 0;
201 };
203 template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
204 class CallbackImpl<R,T1,T2,T3,T4,T5,T6,empty,empty,empty> : public CallbackImplBase {
205 public:
206  virtual ~CallbackImpl () {}
207  virtual R operator() (T1, T2, T3, T4, T5, T6) = 0;
208 };
210 template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
211 class CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,empty,empty> : public CallbackImplBase {
212 public:
213  virtual ~CallbackImpl () {}
214  virtual R operator() (T1, T2, T3, T4, T5, T6, T7) = 0;
215 };
217 template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
218 class CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,empty> : public CallbackImplBase {
219 public:
220  virtual ~CallbackImpl () {}
221  virtual R operator() (T1, T2, T3, T4, T5, T6, T7, T8) = 0;
222 };
224 template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
225 class CallbackImpl : public CallbackImplBase {
226 public:
227  virtual ~CallbackImpl () {}
228  virtual R operator() (T1, T2, T3, T4, T5, T6, T7, T8, T9) = 0;
229 };
237 template <typename T, typename R, typename T1, typename T2, typename T3, typename T4,typename T5, typename T6, typename T7, typename T8, typename T9>
238 class FunctorCallbackImpl : public CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> {
239 public:
245  FunctorCallbackImpl (T const &functor)
246  : m_functor (functor) {}
247  virtual ~FunctorCallbackImpl () {}
253  R operator() (void) {
254  return m_functor ();
255  }
260  R operator() (T1 a1) {
261  return m_functor (a1);
262  }
268  R operator() (T1 a1,T2 a2) {
269  return m_functor (a1,a2);
270  }
277  R operator() (T1 a1,T2 a2,T3 a3) {
278  return m_functor (a1,a2,a3);
279  }
287  R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
288  return m_functor (a1,a2,a3,a4);
289  }
298  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
299  return m_functor (a1,a2,a3,a4,a5);
300  }
310  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6) {
311  return m_functor (a1,a2,a3,a4,a5,a6);
312  }
323  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7) {
324  return m_functor (a1,a2,a3,a4,a5,a6,a7);
325  }
337  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8) {
338  return m_functor (a1,a2,a3,a4,a5,a6,a7,a8);
339  }
352  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8,T9 a9) {
353  return m_functor (a1,a2,a3,a4,a5,a6,a7,a8,a9);
354  }
362  virtual bool IsEqual (Ptr<const CallbackImplBase> other) const {
365  if (otherDerived == 0)
366  {
367  return false;
368  }
369  else if (otherDerived->m_functor != m_functor)
370  {
371  return false;
372  }
373  return true;
374  }
375 private:
377 };
378 
383 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>
384 class MemPtrCallbackImpl : public CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> {
385 public:
392  MemPtrCallbackImpl (OBJ_PTR const&objPtr, MEM_PTR memPtr)
393  : m_objPtr (objPtr), m_memPtr (memPtr) {}
394  virtual ~MemPtrCallbackImpl () {}
400  R operator() (void) {
402  }
407  R operator() (T1 a1) {
409  }
415  R operator() (T1 a1,T2 a2) {
417  }
424  R operator() (T1 a1,T2 a2,T3 a3) {
425  return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)(a1, a2, a3);
426  }
434  R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
435  return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)(a1, a2, a3, a4);
436  }
445  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
446  return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)(a1, a2, a3, a4, a5);
447  }
457  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6) {
458  return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)(a1, a2, a3, a4, a5, a6);
459  }
470  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7) {
471  return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)(a1, a2, a3, a4, a5, a6, a7);
472  }
484  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8) {
485  return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)(a1, a2, a3, a4, a5, a6, a7, a8);
486  }
499  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8, T9 a9) {
500  return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)(a1, a2, a3, a4, a5, a6, a7, a8, a9);
501  }
509  virtual bool IsEqual (Ptr<const CallbackImplBase> other) const {
512  if (otherDerived == 0)
513  {
514  return false;
515  }
516  else if (otherDerived->m_objPtr != m_objPtr ||
517  otherDerived->m_memPtr != m_memPtr)
518  {
519  return false;
520  }
521  return true;
522  }
523 private:
524  OBJ_PTR const m_objPtr;
525  MEM_PTR m_memPtr;
526 };
527 
532 template <typename T, typename R, typename TX, typename T1, typename T2, typename T3, typename T4,typename T5, typename T6, typename T7, typename T8>
533 class BoundFunctorCallbackImpl : public CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,empty> {
534 public:
540  template <typename FUNCTOR, typename ARG>
541  BoundFunctorCallbackImpl (FUNCTOR functor, ARG a)
542  : m_functor (functor), m_a (a) {}
549  R operator() (void) {
550  return m_functor (m_a);
551  }
556  R operator() (T1 a1) {
557  return m_functor (m_a,a1);
558  }
564  R operator() (T1 a1,T2 a2) {
565  return m_functor (m_a,a1,a2);
566  }
573  R operator() (T1 a1,T2 a2,T3 a3) {
574  return m_functor (m_a,a1,a2,a3);
575  }
583  R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
584  return m_functor (m_a,a1,a2,a3,a4);
585  }
594  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
595  return m_functor (m_a,a1,a2,a3,a4,a5);
596  }
606  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6) {
607  return m_functor (m_a,a1,a2,a3,a4,a5,a6);
608  }
619  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7) {
620  return m_functor (m_a,a1,a2,a3,a4,a5,a6,a7);
621  }
633  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8) {
634  return m_functor (m_a,a1,a2,a3,a4,a5,a6,a7,a8);
635  }
643  virtual bool IsEqual (Ptr<const CallbackImplBase> other) const {
646  if (otherDerived == 0)
647  {
648  return false;
649  }
650  else if (otherDerived->m_functor != m_functor ||
651  otherDerived->m_a != m_a)
652  {
653  return false;
654  }
655  return true;
656  }
657 private:
660 };
661 
666 template <typename T, typename R, typename TX1, typename TX2, typename T1, typename T2, typename T3, typename T4,typename T5, typename T6, typename T7>
667 class TwoBoundFunctorCallbackImpl : public CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,empty,empty> {
668 public:
675  template <typename FUNCTOR, typename ARG1, typename ARG2>
676  TwoBoundFunctorCallbackImpl (FUNCTOR functor, ARG1 arg1, ARG2 arg2)
677  : m_functor (functor), m_a1 (arg1), m_a2 (arg2) {}
684  R operator() (void) {
685  return m_functor (m_a1,m_a2);
686  }
691  R operator() (T1 a1) {
692  return m_functor (m_a1,m_a2,a1);
693  }
699  R operator() (T1 a1,T2 a2) {
700  return m_functor (m_a1,m_a2,a1,a2);
701  }
708  R operator() (T1 a1,T2 a2,T3 a3) {
709  return m_functor (m_a1,m_a2,a1,a2,a3);
710  }
718  R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
719  return m_functor (m_a1,m_a2,a1,a2,a3,a4);
720  }
729  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
730  return m_functor (m_a1,m_a2,a1,a2,a3,a4,a5);
731  }
741  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6) {
742  return m_functor (m_a1,m_a2,a1,a2,a3,a4,a5,a6);
743  }
754  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7) {
755  return m_functor (m_a1,m_a2,a1,a2,a3,a4,a5,a6,a7);
756  }
764  virtual bool IsEqual (Ptr<const CallbackImplBase> other) const {
767  if (otherDerived == 0)
768  {
769  return false;
770  }
771  else if (otherDerived->m_functor != m_functor ||
772  otherDerived->m_a1 != m_a1 || otherDerived->m_a2 != m_a2)
773  {
774  return false;
775  }
776  return true;
777  }
778 private:
782 };
783 
788 template <typename T, typename R, typename TX1, typename TX2, typename TX3, typename T1, typename T2, typename T3, typename T4,typename T5, typename T6>
789 class ThreeBoundFunctorCallbackImpl : public CallbackImpl<R,T1,T2,T3,T4,T5,T6,empty,empty,empty> {
790 public:
798  template <typename FUNCTOR, typename ARG1, typename ARG2, typename ARG3>
799  ThreeBoundFunctorCallbackImpl (FUNCTOR functor, ARG1 arg1, ARG2 arg2, ARG3 arg3)
800  : m_functor (functor), m_a1 (arg1), m_a2 (arg2), m_a3 (arg3) {}
807  R operator() (void) {
808  return m_functor (m_a1,m_a2,m_a3);
809  }
814  R operator() (T1 a1) {
815  return m_functor (m_a1,m_a2,m_a3,a1);
816  }
822  R operator() (T1 a1,T2 a2) {
823  return m_functor (m_a1,m_a2,m_a3,a1,a2);
824  }
831  R operator() (T1 a1,T2 a2,T3 a3) {
832  return m_functor (m_a1,m_a2,m_a3,a1,a2,a3);
833  }
841  R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
842  return m_functor (m_a1,m_a2,m_a3,a1,a2,a3,a4);
843  }
852  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
853  return m_functor (m_a1,m_a2,m_a3,a1,a2,a3,a4,a5);
854  }
864  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6) {
865  return m_functor (m_a1,m_a2,m_a3,a1,a2,a3,a4,a5,a6);
866  }
874  virtual bool IsEqual (Ptr<const CallbackImplBase> other) const {
877  if (otherDerived == 0)
878  {
879  return false;
880  }
881  else if (otherDerived->m_functor != m_functor ||
882  otherDerived->m_a1 != m_a1 || otherDerived->m_a2 != m_a2 || otherDerived->m_a3 != m_a3)
883  {
884  return false;
885  }
886  return true;
887  }
888 private:
893 };
894 
901 public:
902  CallbackBase () : m_impl () {}
904  Ptr<CallbackImplBase> GetImpl (void) const { return m_impl; }
905 protected:
912 
917  static std::string Demangle (const std::string& mangled);
918 };
919 
972 template<typename R,
973  typename T1 = empty, typename T2 = empty,
974  typename T3 = empty, typename T4 = empty,
975  typename T5 = empty, typename T6 = empty,
976  typename T7 = empty, typename T8 = empty,
977  typename T9 = empty>
978 class Callback : public CallbackBase {
979 public:
980  Callback () {}
981 
991  template <typename FUNCTOR>
992  Callback (FUNCTOR const &functor, bool, bool)
993  : CallbackBase (Create<FunctorCallbackImpl<FUNCTOR,R,T1,T2,T3,T4,T5,T6,T7,T8,T9> > (functor))
994  {}
995 
1002  template <typename OBJ_PTR, typename MEM_PTR>
1003  Callback (OBJ_PTR const &objPtr, MEM_PTR memPtr)
1004  : CallbackBase (Create<MemPtrCallbackImpl<OBJ_PTR,MEM_PTR,R,T1,T2,T3,T4,T5,T6,T7,T8,T9> > (objPtr, memPtr))
1005  {}
1006 
1013  : CallbackBase (impl)
1014  {}
1015 
1022  template <typename T>
1028  R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (*this, a), false);
1030  }
1031 
1039  template <typename TX1, typename TX2>
1045  R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (*this, a1, a2), false);
1046  return Callback<R,T3,T4,T5,T6,T7,T8,T9> (impl);
1047  }
1048 
1057  template <typename TX1, typename TX2, typename TX3>
1058  Callback<R,T4,T5,T6,T7,T8,T9> ThreeBind (TX1 a1, TX2 a2, TX3 a3) {
1063  R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (*this, a1, a2, a3), false);
1064  return Callback<R,T4,T5,T6,T7,T8,T9> (impl);
1065  }
1066 
1072  bool IsNull (void) const {
1073  return (DoPeekImpl () == 0) ? true : false;
1074  }
1076  void Nullify (void) {
1077  m_impl = 0;
1078  }
1079 
1085  R operator() (void) const {
1086  return (*(DoPeekImpl ()))();
1087  }
1092  R operator() (T1 a1) const {
1093  return (*(DoPeekImpl ()))(a1);
1094  }
1100  R operator() (T1 a1, T2 a2) const {
1101  return (*(DoPeekImpl ()))(a1,a2);
1102  }
1109  R operator() (T1 a1, T2 a2, T3 a3) const {
1110  return (*(DoPeekImpl ()))(a1,a2,a3);
1111  }
1119  R operator() (T1 a1, T2 a2, T3 a3, T4 a4) const {
1120  return (*(DoPeekImpl ()))(a1,a2,a3,a4);
1121  }
1130  R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5) const {
1131  return (*(DoPeekImpl ()))(a1,a2,a3,a4,a5);
1132  }
1142  R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6) const {
1143  return (*(DoPeekImpl ()))(a1,a2,a3,a4,a5,a6);
1144  }
1155  R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6,T7 a7) const {
1156  return (*(DoPeekImpl ()))(a1,a2,a3,a4,a5,a6,a7);
1157  }
1169  R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6,T7 a7,T8 a8) const {
1170  return (*(DoPeekImpl ()))(a1,a2,a3,a4,a5,a6,a7,a8);
1171  }
1184  R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6,T7 a7,T8 a8, T9 a9) const {
1185  return (*(DoPeekImpl ()))(a1,a2,a3,a4,a5,a6,a7,a8,a9);
1186  }
1195  bool IsEqual (const CallbackBase &other) const {
1196  return m_impl->IsEqual (other.GetImpl ());
1197  }
1198 
1205  bool CheckType (const CallbackBase & other) const {
1206  return DoCheckType (other.GetImpl ());
1207  }
1213  void Assign (const CallbackBase &other) {
1214  DoAssign (other.GetImpl ());
1215  }
1216 private:
1220  }
1228  if (other != 0 && dynamic_cast<const CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> *> (PeekPointer (other)) != 0)
1229  {
1230  return true;
1231  }
1232  else if (other == 0)
1233  {
1234  return true;
1235  }
1236  else
1237  {
1238  return false;
1239  }
1240  }
1247  if (!DoCheckType (other))
1248  {
1250  NS_FATAL_ERROR ("Incompatible types. (feed to \"c++filt -t\" if needed)" << std::endl <<
1251  "got=" << Demangle ( typeid (*other).name () ) << std::endl <<
1252  "expected=" << Demangle ( typeid (*expected).name () ));
1253  }
1254  m_impl = const_cast<CallbackImplBase *> (PeekPointer (other));
1255  }
1256 };
1257 
1258 
1267 template <typename R, typename T1, typename T2,
1268  typename T3, typename T4,
1269  typename T5, typename T6,
1270  typename T7, typename T8,
1271  typename T9>
1273 {
1274  return !a.IsEqual (b);
1275 }
1276 
1289 template <typename T, typename OBJ, typename R>
1290 Callback<R> MakeCallback (R (T::*memPtr)(void), OBJ objPtr) {
1291  return Callback<R> (objPtr, memPtr);
1292 }
1293 template <typename T, typename OBJ, typename R>
1294 Callback<R> MakeCallback (R (T::*memPtr)() const, OBJ objPtr) {
1295  return Callback<R> (objPtr, memPtr);
1296 }
1297 template <typename T, typename OBJ, typename R, typename T1>
1298 Callback<R,T1> MakeCallback (R (T::*memPtr)(T1), OBJ objPtr) {
1299  return Callback<R,T1> (objPtr, memPtr);
1300 }
1301 template <typename T, typename OBJ, typename R, typename T1>
1302 Callback<R,T1> MakeCallback (R (T::*memPtr)(T1) const, OBJ objPtr) {
1303  return Callback<R,T1> (objPtr, memPtr);
1304 }
1305 template <typename T, typename OBJ, typename R, typename T1, typename T2>
1306 Callback<R,T1,T2> MakeCallback (R (T::*memPtr)(T1,T2), OBJ objPtr) {
1307  return Callback<R,T1,T2> (objPtr, memPtr);
1308 }
1309 template <typename T, typename OBJ, typename R, typename T1, typename T2>
1310 Callback<R,T1,T2> MakeCallback (R (T::*memPtr)(T1,T2) const, OBJ objPtr) {
1311  return Callback<R,T1,T2> (objPtr, memPtr);
1312 }
1313 template <typename T, typename OBJ, typename R, typename T1,typename T2, typename T3>
1314 Callback<R,T1,T2,T3> MakeCallback (R (T::*memPtr)(T1,T2,T3), OBJ objPtr) {
1315  return Callback<R,T1,T2,T3> (objPtr, memPtr);
1316 }
1317 template <typename T, typename OBJ, typename R, typename T1,typename T2, typename T3>
1318 Callback<R,T1,T2,T3> MakeCallback (R (T::*memPtr)(T1,T2,T3) const, OBJ objPtr) {
1319  return Callback<R,T1,T2,T3> (objPtr, memPtr);
1320 }
1321 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4>
1322 Callback<R,T1,T2,T3,T4> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4), OBJ objPtr) {
1323  return Callback<R,T1,T2,T3,T4> (objPtr, memPtr);
1324 }
1325 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4>
1326 Callback<R,T1,T2,T3,T4> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4) const, OBJ objPtr) {
1327  return Callback<R,T1,T2,T3,T4> (objPtr, memPtr);
1328 }
1329 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5>
1330 Callback<R,T1,T2,T3,T4,T5> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4,T5), OBJ objPtr) {
1331  return Callback<R,T1,T2,T3,T4,T5> (objPtr, memPtr);
1332 }
1333 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5>
1334 Callback<R,T1,T2,T3,T4,T5> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4,T5) const, OBJ objPtr) {
1335  return Callback<R,T1,T2,T3,T4,T5> (objPtr, memPtr);
1336 }
1337 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5,typename T6>
1338 Callback<R,T1,T2,T3,T4,T5,T6> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4,T5,T6), OBJ objPtr) {
1339  return Callback<R,T1,T2,T3,T4,T5,T6> (objPtr, memPtr);
1340 }
1341 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5, typename T6>
1342 Callback<R,T1,T2,T3,T4,T5,T6> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4,T5,T6) const, OBJ objPtr) {
1343  return Callback<R,T1,T2,T3,T4,T5,T6> (objPtr, memPtr);
1344 }
1345 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5,typename T6, typename T7>
1346 Callback<R,T1,T2,T3,T4,T5,T6,T7> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4,T5,T6,T7), OBJ objPtr) {
1347  return Callback<R,T1,T2,T3,T4,T5,T6,T7> (objPtr, memPtr);
1348 }
1349 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5, typename T6, typename T7>
1350 Callback<R,T1,T2,T3,T4,T5,T6,T7> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4,T5,T6,T7) const, OBJ objPtr) {
1351  return Callback<R,T1,T2,T3,T4,T5,T6,T7> (objPtr, memPtr);
1352 }
1353 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5,typename T6, typename T7, typename T8>
1354 Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4,T5,T6,T7,T8), OBJ objPtr) {
1355  return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> (objPtr, memPtr);
1356 }
1357 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5, typename T6, typename T7, typename T8>
1358 Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4,T5,T6,T7,T8) const, OBJ objPtr) {
1359  return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> (objPtr, memPtr);
1360 }
1361 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>
1362 Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4,T5,T6,T7,T8,T9), OBJ objPtr) {
1363  return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (objPtr, memPtr);
1364 }
1365 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>
1366 Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4,T5,T6,T7,T8,T9) const, OBJ objPtr) {
1367  return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (objPtr, memPtr);
1368 }
1382 template <typename R>
1383 Callback<R> MakeCallback (R (*fnPtr)()) {
1384  return Callback<R> (fnPtr, true, true);
1385 }
1386 template <typename R, typename T1>
1387 Callback<R,T1> MakeCallback (R (*fnPtr)(T1)) {
1388  return Callback<R,T1> (fnPtr, true, true);
1389 }
1390 template <typename R, typename T1, typename T2>
1391 Callback<R,T1,T2> MakeCallback (R (*fnPtr)(T1,T2)) {
1392  return Callback<R,T1,T2> (fnPtr, true, true);
1393 }
1394 template <typename R, typename T1, typename T2,typename T3>
1395 Callback<R,T1,T2,T3> MakeCallback (R (*fnPtr)(T1,T2,T3)) {
1396  return Callback<R,T1,T2,T3> (fnPtr, true, true);
1397 }
1398 template <typename R, typename T1, typename T2,typename T3,typename T4>
1399 Callback<R,T1,T2,T3,T4> MakeCallback (R (*fnPtr)(T1,T2,T3,T4)) {
1400  return Callback<R,T1,T2,T3,T4> (fnPtr, true, true);
1401 }
1402 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5>
1403 Callback<R,T1,T2,T3,T4,T5> MakeCallback (R (*fnPtr)(T1,T2,T3,T4,T5)) {
1404  return Callback<R,T1,T2,T3,T4,T5> (fnPtr, true, true);
1405 }
1406 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6>
1407 Callback<R,T1,T2,T3,T4,T5,T6> MakeCallback (R (*fnPtr)(T1,T2,T3,T4,T5,T6)) {
1408  return Callback<R,T1,T2,T3,T4,T5,T6> (fnPtr, true, true);
1409 }
1410 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6, typename T7>
1411 Callback<R,T1,T2,T3,T4,T5,T6,T7> MakeCallback (R (*fnPtr)(T1,T2,T3,T4,T5,T6,T7)) {
1412  return Callback<R,T1,T2,T3,T4,T5,T6,T7> (fnPtr, true, true);
1413 }
1414 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6, typename T7, typename T8>
1415 Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> MakeCallback (R (*fnPtr)(T1,T2,T3,T4,T5,T6,T7,T8)) {
1416  return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> (fnPtr, true, true);
1417 }
1418 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6, typename T7, typename T8, typename T9>
1419 Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> MakeCallback (R (*fnPtr)(T1,T2,T3,T4,T5,T6,T7,T8,T9)) {
1420  return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (fnPtr, true, true);
1421 }
1435 template <typename R>
1437  return Callback<R> ();
1438 }
1439 template <typename R, typename T1>
1441  return Callback<R,T1> ();
1442 }
1443 template <typename R, typename T1, typename T2>
1445  return Callback<R,T1,T2> ();
1446 }
1447 template <typename R, typename T1, typename T2,typename T3>
1449  return Callback<R,T1,T2,T3> ();
1450 }
1451 template <typename R, typename T1, typename T2,typename T3,typename T4>
1453  return Callback<R,T1,T2,T3,T4> ();
1454 }
1455 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5>
1457  return Callback<R,T1,T2,T3,T4,T5> ();
1458 }
1459 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6>
1462 }
1463 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6, typename T7>
1466 }
1467 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6, typename T7, typename T8>
1470 }
1471 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6, typename T7, typename T8, typename T9>
1474 }
1486 template <typename R, typename TX, typename ARG>
1487 Callback<R> MakeBoundCallback (R (*fnPtr)(TX), ARG a1) {
1489  Create<BoundFunctorCallbackImpl<R (*)(TX),R,TX,empty,empty,empty,empty,empty,empty,empty,empty> >(fnPtr, a1);
1490  return Callback<R> (impl);
1491 }
1492 template <typename R, typename TX, typename ARG,
1493  typename T1>
1494 Callback<R,T1> MakeBoundCallback (R (*fnPtr)(TX,T1), ARG a1) {
1496  Create<BoundFunctorCallbackImpl<R (*)(TX,T1),R,TX,T1,empty,empty,empty,empty,empty,empty,empty> > (fnPtr, a1);
1497  return Callback<R,T1> (impl);
1498 }
1499 template <typename R, typename TX, typename ARG,
1500  typename T1, typename T2>
1501 Callback<R,T1,T2> MakeBoundCallback (R (*fnPtr)(TX,T1,T2), ARG a1) {
1503  Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2),R,TX,T1,T2,empty,empty,empty,empty,empty,empty> > (fnPtr, a1);
1504  return Callback<R,T1,T2> (impl);
1505 }
1506 template <typename R, typename TX, typename ARG,
1507  typename T1, typename T2,typename T3>
1508 Callback<R,T1,T2,T3> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3), ARG a1) {
1510  Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3),R,TX,T1,T2,T3,empty,empty,empty,empty,empty> > (fnPtr, a1);
1511  return Callback<R,T1,T2,T3> (impl);
1512 }
1513 template <typename R, typename TX, typename ARG,
1514  typename T1, typename T2,typename T3,typename T4>
1515 Callback<R,T1,T2,T3,T4> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3,T4), ARG a1) {
1517  Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3,T4),R,TX,T1,T2,T3,T4,empty,empty,empty,empty> > (fnPtr, a1);
1518  return Callback<R,T1,T2,T3,T4> (impl);
1519 }
1520 template <typename R, typename TX, typename ARG,
1521  typename T1, typename T2,typename T3,typename T4,typename T5>
1522 Callback<R,T1,T2,T3,T4,T5> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3,T4,T5), ARG a1) {
1524  Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3,T4,T5),R,TX,T1,T2,T3,T4,T5,empty,empty,empty> > (fnPtr, a1);
1525  return Callback<R,T1,T2,T3,T4,T5> (impl);
1526 }
1527 template <typename R, typename TX, typename ARG,
1528  typename T1, typename T2,typename T3,typename T4,typename T5, typename T6>
1529 Callback<R,T1,T2,T3,T4,T5,T6> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3,T4,T5,T6), ARG a1) {
1531  Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3,T4,T5,T6),R,TX,T1,T2,T3,T4,T5,T6,empty,empty> > (fnPtr, a1);
1532  return Callback<R,T1,T2,T3,T4,T5,T6> (impl);
1533 }
1534 template <typename R, typename TX, typename ARG,
1535  typename T1, typename T2,typename T3,typename T4,typename T5, typename T6, typename T7>
1536 Callback<R,T1,T2,T3,T4,T5,T6,T7> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3,T4,T5,T6,T7), ARG a1) {
1538  Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3,T4,T5,T6,T7),R,TX,T1,T2,T3,T4,T5,T6,T7,empty> > (fnPtr, a1);
1539  return Callback<R,T1,T2,T3,T4,T5,T6,T7> (impl);
1540 }
1541 template <typename R, typename TX, typename ARG,
1542  typename T1, typename T2,typename T3,typename T4,typename T5, typename T6, typename T7, typename T8>
1543 Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3,T4,T5,T6,T7,T8), ARG a1) {
1545  Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3,T4,T5,T6,T7,T8),R,TX,T1,T2,T3,T4,T5,T6,T7,T8> > (fnPtr, a1);
1547 }
1559 template <typename R, typename TX1, typename TX2, typename ARG1, typename ARG2>
1560 Callback<R> MakeBoundCallback (R (*fnPtr)(TX1,TX2), ARG1 a1, ARG2 a2) {
1562  Create<TwoBoundFunctorCallbackImpl<R (*)(TX1,TX2),R,TX1,TX2,empty,empty,empty,empty,empty,empty,empty> >(fnPtr, a1, a2);
1563  return Callback<R> (impl);
1564 }
1565 template <typename R, typename TX1, typename TX2, typename ARG1, typename ARG2,
1566  typename T1>
1567 Callback<R,T1> MakeBoundCallback (R (*fnPtr)(TX1,TX2,T1), ARG1 a1, ARG2 a2) {
1569  Create<TwoBoundFunctorCallbackImpl<R (*)(TX1,TX2,T1),R,TX1,TX2,T1,empty,empty,empty,empty,empty,empty> > (fnPtr, a1, a2);
1570  return Callback<R,T1> (impl);
1571 }
1572 template <typename R, typename TX1, typename TX2, typename ARG1, typename ARG2,
1573  typename T1, typename T2>
1574 Callback<R,T1,T2> MakeBoundCallback (R (*fnPtr)(TX1,TX2,T1,T2), ARG1 a1, ARG2 a2) {
1576  Create<TwoBoundFunctorCallbackImpl<R (*)(TX1,TX2,T1,T2),R,TX1,TX2,T1,T2,empty,empty,empty,empty,empty> > (fnPtr, a1, a2);
1577  return Callback<R,T1,T2> (impl);
1578 }
1579 template <typename R, typename TX1, typename TX2, typename ARG1, typename ARG2,
1580  typename T1, typename T2,typename T3>
1581 Callback<R,T1,T2,T3> MakeBoundCallback (R (*fnPtr)(TX1,TX2,T1,T2,T3), ARG1 a1, ARG2 a2) {
1583  Create<TwoBoundFunctorCallbackImpl<R (*)(TX1,TX2,T1,T2,T3),R,TX1,TX2,T1,T2,T3,empty,empty,empty,empty> > (fnPtr, a1, a2);
1584  return Callback<R,T1,T2,T3> (impl);
1585 }
1586 template <typename R, typename TX1, typename TX2, typename ARG1, typename ARG2,
1587  typename T1, typename T2,typename T3,typename T4>
1588 Callback<R,T1,T2,T3,T4> MakeBoundCallback (R (*fnPtr)(TX1,TX2,T1,T2,T3,T4), ARG1 a1, ARG2 a2) {
1590  Create<TwoBoundFunctorCallbackImpl<R (*)(TX1,TX2,T1,T2,T3,T4),R,TX1,TX2,T1,T2,T3,T4,empty,empty,empty> > (fnPtr, a1, a2);
1591  return Callback<R,T1,T2,T3,T4> (impl);
1592 }
1593 template <typename R, typename TX1, typename TX2, typename ARG1, typename ARG2,
1594  typename T1, typename T2,typename T3,typename T4,typename T5>
1595 Callback<R,T1,T2,T3,T4,T5> MakeBoundCallback (R (*fnPtr)(TX1,TX2,T1,T2,T3,T4,T5), ARG1 a1, ARG2 a2) {
1597  Create<TwoBoundFunctorCallbackImpl<R (*)(TX1,TX2,T1,T2,T3,T4,T5),R,TX1,TX2,T1,T2,T3,T4,T5,empty,empty> > (fnPtr, a1, a2);
1598  return Callback<R,T1,T2,T3,T4,T5> (impl);
1599 }
1600 template <typename R, typename TX1, typename TX2, typename ARG1, typename ARG2,
1601  typename T1, typename T2,typename T3,typename T4,typename T5, typename T6>
1602 Callback<R,T1,T2,T3,T4,T5,T6> MakeBoundCallback (R (*fnPtr)(TX1,TX2,T1,T2,T3,T4,T5,T6), ARG1 a1, ARG2 a2) {
1604  Create<TwoBoundFunctorCallbackImpl<R (*)(TX1,TX2,T1,T2,T3,T4,T5,T6),R,TX1,TX2,T1,T2,T3,T4,T5,T6,empty> > (fnPtr, a1, a2);
1605  return Callback<R,T1,T2,T3,T4,T5,T6> (impl);
1606 }
1607 template <typename R, typename TX1, typename TX2, typename ARG1, typename ARG2,
1608  typename T1, typename T2,typename T3,typename T4,typename T5, typename T6, typename T7>
1609 Callback<R,T1,T2,T3,T4,T5,T6,T7> MakeBoundCallback (R (*fnPtr)(TX1,TX2,T1,T2,T3,T4,T5,T6,T7), ARG1 a1, ARG2 a2) {
1611  Create<TwoBoundFunctorCallbackImpl<R (*)(TX1,TX2,T1,T2,T3,T4,T5,T6,T7),R,TX1,TX2,T1,T2,T3,T4,T5,T6,T7> > (fnPtr, a1, a2);
1612  return Callback<R,T1,T2,T3,T4,T5,T6,T7> (impl);
1613 }
1626 template <typename R, typename TX1, typename TX2, typename TX3, typename ARG1, typename ARG2, typename ARG3>
1627 Callback<R> MakeBoundCallback (R (*fnPtr)(TX1,TX2,TX3), ARG1 a1, ARG2 a2, ARG3 a3) {
1629  Create<ThreeBoundFunctorCallbackImpl<R (*)(TX1,TX2,TX3),R,TX1,TX2,TX3,empty,empty,empty,empty,empty,empty> >(fnPtr, a1, a2, a3);
1630  return Callback<R> (impl);
1631 }
1632 template <typename R, typename TX1, typename TX2, typename TX3, typename ARG1, typename ARG2, typename ARG3,
1633  typename T1>
1634 Callback<R,T1> MakeBoundCallback (R (*fnPtr)(TX1,TX2,TX3,T1), ARG1 a1, ARG2 a2, ARG3 a3) {
1636  Create<ThreeBoundFunctorCallbackImpl<R (*)(TX1,TX2,TX3,T1),R,TX1,TX2,TX3,T1,empty,empty,empty,empty,empty> > (fnPtr, a1, a2, a3);
1637  return Callback<R,T1> (impl);
1638 }
1639 template <typename R, typename TX1, typename TX2, typename TX3, typename ARG1, typename ARG2, typename ARG3,
1640  typename T1, typename T2>
1641 Callback<R,T1,T2> MakeBoundCallback (R (*fnPtr)(TX1,TX2,TX3,T1,T2), ARG1 a1, ARG2 a2, ARG3 a3) {
1643  Create<ThreeBoundFunctorCallbackImpl<R (*)(TX1,TX2,TX3,T1,T2),R,TX1,TX2,TX3,T1,T2,empty,empty,empty,empty> > (fnPtr, a1, a2, a3);
1644  return Callback<R,T1,T2> (impl);
1645 }
1646 template <typename R, typename TX1, typename TX2, typename TX3, typename ARG1, typename ARG2, typename ARG3,
1647  typename T1, typename T2,typename T3>
1648 Callback<R,T1,T2,T3> MakeBoundCallback (R (*fnPtr)(TX1,TX2,TX3,T1,T2,T3), ARG1 a1, ARG2 a2, ARG3 a3) {
1650  Create<ThreeBoundFunctorCallbackImpl<R (*)(TX1,TX2,TX3,T1,T2,T3),R,TX1,TX2,TX3,T1,T2,T3,empty,empty,empty> > (fnPtr, a1, a2, a3);
1651  return Callback<R,T1,T2,T3> (impl);
1652 }
1653 template <typename R, typename TX1, typename TX2, typename TX3, typename ARG1, typename ARG2, typename ARG3,
1654  typename T1, typename T2,typename T3,typename T4>
1655 Callback<R,T1,T2,T3,T4> MakeBoundCallback (R (*fnPtr)(TX1,TX2,TX3,T1,T2,T3,T4), ARG1 a1, ARG2 a2, ARG3 a3) {
1657  Create<ThreeBoundFunctorCallbackImpl<R (*)(TX1,TX2,TX3,T1,T2,T3,T4),R,TX1,TX2,TX3,T1,T2,T3,T4,empty,empty> > (fnPtr, a1, a2, a3);
1658  return Callback<R,T1,T2,T3,T4> (impl);
1659 }
1660 template <typename R, typename TX1, typename TX2, typename TX3, typename ARG1, typename ARG2, typename ARG3,
1661  typename T1, typename T2,typename T3,typename T4,typename T5>
1662 Callback<R,T1,T2,T3,T4,T5> MakeBoundCallback (R (*fnPtr)(TX1,TX2,TX3,T1,T2,T3,T4,T5), ARG1 a1, ARG2 a2, ARG3 a3) {
1664  Create<ThreeBoundFunctorCallbackImpl<R (*)(TX1,TX2,TX3,T1,T2,T3,T4,T5),R,TX1,TX2,TX3,T1,T2,T3,T4,T5,empty> > (fnPtr, a1, a2, a3);
1665  return Callback<R,T1,T2,T3,T4,T5> (impl);
1666 }
1667 template <typename R, typename TX1, typename TX2, typename TX3, typename ARG1, typename ARG2, typename ARG3,
1668  typename T1, typename T2,typename T3,typename T4,typename T5, typename T6>
1669 Callback<R,T1,T2,T3,T4,T5,T6> MakeBoundCallback (R (*fnPtr)(TX1,TX2,TX3,T1,T2,T3,T4,T5,T6), ARG1 a1, ARG2 a2, ARG3 a3) {
1671  Create<ThreeBoundFunctorCallbackImpl<R (*)(TX1,TX2,TX3,T1,T2,T3,T4,T5,T6),R,TX1,TX2,TX3,T1,T2,T3,T4,T5,T6> > (fnPtr, a1, a2, a3);
1672  return Callback<R,T1,T2,T3,T4,T5,T6> (impl);
1673 }
1677 } // namespace ns3
1678 
1679 namespace ns3 {
1680 
1682 {
1683 public:
1685  CallbackValue ();
1690  CallbackValue (const CallbackBase &base);
1692  virtual ~CallbackValue ();
1694  void Set (CallbackBase base);
1701  template <typename T>
1702  bool GetAccessor (T &value) const;
1704  virtual Ptr<AttributeValue> Copy (void) const;
1710  virtual std::string SerializeToString (Ptr<const AttributeChecker> checker) const;
1718  virtual bool DeserializeFromString (std::string value, Ptr<const AttributeChecker> checker);
1719 private:
1721 };
1722 
1725 
1726 } // namespace ns3
1727 
1728 namespace ns3 {
1729 
1730 template <typename T>
1731 bool CallbackValue::GetAccessor (T &value) const
1732 {
1733  if (value.CheckType (m_value))
1734  {
1735  value.Assign (m_value);
1736  return true;
1737  }
1738  return false;
1739 }
1740 
1741 } // namespace ns3
1742 
1743 
1744 #endif /* CALLBACK_H */
NS_FATAL_x macro definitions.
CallbackValue()
Constructor.
Definition: callback.cc:34
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:73
virtual ~MemPtrCallbackImpl()
Definition: callback.h:394
Callback template class.
Definition: callback.h:978
void DoAssign(Ptr< const CallbackImplBase > other)
Adopt the other's implementation, if type compatible.
Definition: callback.h:1246
virtual ~BoundFunctorCallbackImpl()
Definition: callback.h:543
virtual ~FunctorCallbackImpl()
Definition: callback.h:247
Smart pointer implementation.
Hold a value for an Attribute.
Definition: attribute.h:68
virtual bool IsEqual(Ptr< const CallbackImplBase > other) const =0
Equality test.
Callback< R > MakeBoundCallback(R(*fnPtr)(TX), ARG a1)
Make Callbacks with one bound argument.
Definition: callback.h:1487
Callback< R, T3, T4, T5, T6, T7, T8, T9 > TwoBind(TX1 a1, TX2 a2)
Bind the first two arguments.
Definition: callback.h:1040
bool IsNull(void) const
Check for null implementation.
Definition: callback.h:1072
U * PeekPointer(const Ptr< U > &p)
Definition: ptr.h:562
R operator()(void)
Functor with varying numbers of arguments.
Definition: callback.h:549
void Assign(const CallbackBase &other)
Adopt the other's implementation, if type compatible.
Definition: callback.h:1213
Callback< R, T2, T3, T4, T5, T6, T7, T8, T9 > Bind(T a)
Bind the first arguments.
Definition: callback.h:1023
Base class for Callback class.
Definition: callback.h:900
MemPtrCallbackImpl(OBJ_PTR const &objPtr, MEM_PTR memPtr)
Construct from an object pointer and member function pointer.
Definition: callback.h:392
#define NS_FATAL_ERROR(msg)
Fatal error handling.
Definition: fatal-error.h:100
virtual ~CallbackValue()
Destructor.
Definition: callback.cc:43
Callback< R > MakeNullCallback(void)
Definition: callback.h:1436
CallbackBase m_value
the CallbackBase
Definition: callback.h:1720
bool GetAccessor(T &value) const
Give value my callback, if type compatible.
Definition: callback.h:1731
CallbackImpl for functors with first three arguments bound at construction.
Definition: callback.h:789
AttributeValue implementation for Callback.
Definition: callback.h:1681
The unqualified CallbackImpl class.
Definition: callback.h:152
#define ATTRIBUTE_CHECKER_DEFINE(type)
Declare the AttributeChecker class Checker and the MakeTypeChecker function for class type...
R operator()(void)
Functor with varying numbers of arguments.
Definition: callback.h:253
TypeTraits< TX >::ReferencedType m_a
the bound argument
Definition: callback.h:659
make Callback use a separate empty type
Definition: empty.h:27
R operator()(void)
Functor with varying numbers of arguments.
Definition: callback.h:400
bool CheckType(const CallbackBase &other) const
Check for compatible types.
Definition: callback.h:1205
FunctorCallbackImpl(T const &functor)
Construct from a functor.
Definition: callback.h:245
Trait class to convert a pointer into a reference, used by MemPtrCallBackImpl.
Definition: callback.h:107
BoundFunctorCallbackImpl(FUNCTOR functor, ARG a)
Construct from functor and a bound argument.
Definition: callback.h:541
OBJ_PTR const m_objPtr
the object pointer
Definition: callback.h:524
ns3::AttributeValue, ns3::AttributeAccessor and ns3::AttributeChecker declarations.
MEM_PTR m_memPtr
the member function pointer
Definition: callback.h:525
virtual bool IsEqual(Ptr< const CallbackImplBase > other) const
Equality test.
Definition: callback.h:764
virtual bool IsEqual(Ptr< const CallbackImplBase > other) const
Equality test.
Definition: callback.h:643
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
Definition: callback.h:1290
CallbackImpl for pointer to member functions.
Definition: callback.h:384
Callback< R, T4, T5, T6, T7, T8, T9 > ThreeBind(TX1 a1, TX2 a2, TX3 a3)
Bind the first three arguments.
Definition: callback.h:1058
bool DoCheckType(Ptr< const CallbackImplBase > other) const
Check for compatible types.
Definition: callback.h:1227
Abstract base class for CallbackImpl Provides reference counting and equality test.
Definition: callback.h:133
CallbackImpl for functors with first two arguments bound at construction.
Definition: callback.h:667
virtual bool IsEqual(Ptr< const CallbackImplBase > other) const
Equality test.
Definition: callback.h:509
Callback(Ptr< CallbackImpl< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 > > const &impl)
Construct from a CallbackImpl pointer.
Definition: callback.h:1012
R operator()(void) const
Functor with varying numbers of arguments.
Definition: callback.h:1085
TypeTraits< TX3 >::ReferencedType m_a3
third bound argument
Definition: callback.h:892
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)
Inequality test.
Definition: callback.h:1272
virtual ~CallbackImplBase()
Virtual destructor.
Definition: callback.h:137
static std::string Demangle(const std::string &mangled)
Definition: callback.cc:129
Every class exported by the ns3 library is enclosed in the ns3 namespace.
bool IsEqual(const CallbackBase &other) const
Equality test.
Definition: callback.h:1195
Ptr< T > Create(void)
Create class instances by constructors with varying numbers of arguments and return them by Ptr...
Definition: ptr.h:514
static T & GetReference(T *const p)
Definition: callback.h:122
TypeTraits< TX1 >::ReferencedType m_a1
first bound argument
Definition: callback.h:890
Callback(OBJ_PTR const &objPtr, MEM_PTR memPtr)
Construct a member function pointer call back.
Definition: callback.h:1003
Declaration of Attribute helper macros.
T m_functor
the functor
Definition: callback.h:376
#define ATTRIBUTE_ACCESSOR_DEFINE(type)
Define the attribute accessor functions MakeTypeAccessor for class type.
R operator()(void)
Functor with varying numbers of arguments.
Definition: callback.h:684
virtual ~CallbackImpl()
Definition: callback.h:227
TypeTraits< TX1 >::ReferencedType m_a1
first bound argument
Definition: callback.h:780
Callback(FUNCTOR const &functor, bool, bool)
Construct a functor call back, supporting operator() calls.
Definition: callback.h:992
virtual bool IsEqual(Ptr< const CallbackImplBase > other) const
Equality test.
Definition: callback.h:362
CallbackImpl for functors with first argument bound at construction.
Definition: callback.h:533
TwoBoundFunctorCallbackImpl(FUNCTOR functor, ARG1 arg1, ARG2 arg2)
Construct from functor and two arguments.
Definition: callback.h:676
CallbackImpl with functors.
Definition: callback.h:238
virtual bool DeserializeFromString(std::string value, Ptr< const AttributeChecker > checker)
Deserialize from string (not implemented)
Definition: callback.cc:69
virtual R operator()(T1, T2, T3, T4, T5, T6, T7, T8, T9)=0
Abstract operator.
Type trait reference values.
Definition: type-traits.h:25
virtual std::string SerializeToString(Ptr< const AttributeChecker > checker) const
Serialize to string.
Definition: callback.cc:61
T m_functor
The functor.
Definition: callback.h:658
virtual bool IsEqual(Ptr< const CallbackImplBase > other) const
Equality test.
Definition: callback.h:874
void Nullify(void)
Discard the implementation, set it to null.
Definition: callback.h:1076
TypeTraits< TX2 >::ReferencedType m_a2
second bound argument
Definition: callback.h:891
CallbackBase(Ptr< CallbackImplBase > impl)
Construct from a pimpl.
Definition: callback.h:910
A template-based reference counting class.
virtual Ptr< AttributeValue > Copy(void) const
Definition: callback.cc:55
CallbackImpl< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 > * DoPeekImpl(void) const
Definition: callback.h:1218
Ptr< CallbackImplBase > m_impl
the pimpl
Definition: callback.h:911
void Set(CallbackBase base)
Definition: callback.cc:48
Reference counting for smart pointers.
TypeTraits< TX2 >::ReferencedType m_a2
second bound argument
Definition: callback.h:781
Ptr< CallbackImplBase > GetImpl(void) const
Definition: callback.h:904
ThreeBoundFunctorCallbackImpl(FUNCTOR functor, ARG1 arg1, ARG2 arg2, ARG3 arg3)
Construct from functor and three arguments.
Definition: callback.h:799
R operator()(void)
Functor with varying numbers of arguments.
Definition: callback.h:807