A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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 
51 template <typename T>
53 
58 template <typename T>
59 struct CallbackTraits<T *>
60 {
65  static T & GetReference (T * const p)
66  {
67  return *p;
68  }
69 };
82 class CallbackImplBase : public SimpleRefCount<CallbackImplBase>
83 {
84 public:
86  virtual ~CallbackImplBase () {}
93  virtual bool IsEqual (Ptr<const CallbackImplBase> other) const = 0;
94 };
95 
100 template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
102 
109 template <typename R>
111 public:
112  virtual ~CallbackImpl () {}
113  virtual R operator() (void) = 0;
114 };
116 template <typename R, typename T1>
118 public:
119  virtual ~CallbackImpl () {}
120  virtual R operator() (T1) = 0;
121 };
123 template <typename R, typename T1, typename T2>
125 public:
126  virtual ~CallbackImpl () {}
127  virtual R operator() (T1, T2) = 0;
128 };
130 template <typename R, typename T1, typename T2, typename T3>
132 public:
133  virtual ~CallbackImpl () {}
134  virtual R operator() (T1, T2, T3) = 0;
135 };
137 template <typename R, typename T1, typename T2, typename T3, typename T4>
138 class CallbackImpl<R,T1,T2,T3,T4,empty,empty,empty,empty,empty> : public CallbackImplBase {
139 public:
140  virtual ~CallbackImpl () {}
141  virtual R operator() (T1, T2, T3, T4) = 0;
142 };
144 template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5>
145 class CallbackImpl<R,T1,T2,T3,T4,T5,empty,empty,empty,empty> : public CallbackImplBase {
146 public:
147  virtual ~CallbackImpl () {}
148  virtual R operator() (T1, T2, T3, T4, T5) = 0;
149 };
151 template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
152 class CallbackImpl<R,T1,T2,T3,T4,T5,T6,empty,empty,empty> : public CallbackImplBase {
153 public:
154  virtual ~CallbackImpl () {}
155  virtual R operator() (T1, T2, T3, T4, T5, T6) = 0;
156 };
158 template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
159 class CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,empty,empty> : public CallbackImplBase {
160 public:
161  virtual ~CallbackImpl () {}
162  virtual R operator() (T1, T2, T3, T4, T5, T6, T7) = 0;
163 };
165 template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
166 class CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,empty> : public CallbackImplBase {
167 public:
168  virtual ~CallbackImpl () {}
169  virtual R operator() (T1, T2, T3, T4, T5, T6, T7, T8) = 0;
170 };
172 template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
173 class CallbackImpl : public CallbackImplBase {
174 public:
175  virtual ~CallbackImpl () {}
176  virtual R operator() (T1, T2, T3, T4, T5, T6, T7, T8, T9) = 0;
177 };
185 template <typename T, typename R, typename T1, typename T2, typename T3, typename T4,typename T5, typename T6, typename T7, typename T8, typename T9>
186 class FunctorCallbackImpl : public CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> {
187 public:
193  FunctorCallbackImpl (T const &functor)
194  : m_functor (functor) {}
195  virtual ~FunctorCallbackImpl () {}
201  R operator() (void) {
202  return m_functor ();
203  }
208  R operator() (T1 a1) {
209  return m_functor (a1);
210  }
216  R operator() (T1 a1,T2 a2) {
217  return m_functor (a1,a2);
218  }
225  R operator() (T1 a1,T2 a2,T3 a3) {
226  return m_functor (a1,a2,a3);
227  }
235  R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
236  return m_functor (a1,a2,a3,a4);
237  }
246  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
247  return m_functor (a1,a2,a3,a4,a5);
248  }
258  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6) {
259  return m_functor (a1,a2,a3,a4,a5,a6);
260  }
271  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7) {
272  return m_functor (a1,a2,a3,a4,a5,a6,a7);
273  }
285  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8) {
286  return m_functor (a1,a2,a3,a4,a5,a6,a7,a8);
287  }
300  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8,T9 a9) {
301  return m_functor (a1,a2,a3,a4,a5,a6,a7,a8,a9);
302  }
310  virtual bool IsEqual (Ptr<const CallbackImplBase> other) const {
313  if (otherDerived == 0)
314  {
315  return false;
316  }
317  else if (otherDerived->m_functor != m_functor)
318  {
319  return false;
320  }
321  return true;
322  }
323 private:
325 };
326 
331 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>
332 class MemPtrCallbackImpl : public CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> {
333 public:
340  MemPtrCallbackImpl (OBJ_PTR const&objPtr, MEM_PTR memPtr)
341  : m_objPtr (objPtr), m_memPtr (memPtr) {}
342  virtual ~MemPtrCallbackImpl () {}
348  R operator() (void) {
350  }
355  R operator() (T1 a1) {
357  }
363  R operator() (T1 a1,T2 a2) {
365  }
372  R operator() (T1 a1,T2 a2,T3 a3) {
373  return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)(a1, a2, a3);
374  }
382  R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
383  return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)(a1, a2, a3, a4);
384  }
393  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
394  return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)(a1, a2, a3, a4, a5);
395  }
405  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6) {
406  return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)(a1, a2, a3, a4, a5, a6);
407  }
418  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7) {
419  return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)(a1, a2, a3, a4, a5, a6, a7);
420  }
432  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8) {
433  return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)(a1, a2, a3, a4, a5, a6, a7, a8);
434  }
447  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8, T9 a9) {
448  return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)(a1, a2, a3, a4, a5, a6, a7, a8, a9);
449  }
457  virtual bool IsEqual (Ptr<const CallbackImplBase> other) const {
460  if (otherDerived == 0)
461  {
462  return false;
463  }
464  else if (otherDerived->m_objPtr != m_objPtr ||
465  otherDerived->m_memPtr != m_memPtr)
466  {
467  return false;
468  }
469  return true;
470  }
471 private:
472  OBJ_PTR const m_objPtr;
473  MEM_PTR m_memPtr;
474 };
475 
480 template <typename T, typename R, typename TX, typename T1, typename T2, typename T3, typename T4,typename T5, typename T6, typename T7, typename T8>
481 class BoundFunctorCallbackImpl : public CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,empty> {
482 public:
488  template <typename FUNCTOR, typename ARG>
489  BoundFunctorCallbackImpl (FUNCTOR functor, ARG a)
490  : m_functor (functor), m_a (a) {}
497  R operator() (void) {
498  return m_functor (m_a);
499  }
504  R operator() (T1 a1) {
505  return m_functor (m_a,a1);
506  }
512  R operator() (T1 a1,T2 a2) {
513  return m_functor (m_a,a1,a2);
514  }
521  R operator() (T1 a1,T2 a2,T3 a3) {
522  return m_functor (m_a,a1,a2,a3);
523  }
531  R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
532  return m_functor (m_a,a1,a2,a3,a4);
533  }
542  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
543  return m_functor (m_a,a1,a2,a3,a4,a5);
544  }
554  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6) {
555  return m_functor (m_a,a1,a2,a3,a4,a5,a6);
556  }
567  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7) {
568  return m_functor (m_a,a1,a2,a3,a4,a5,a6,a7);
569  }
581  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8) {
582  return m_functor (m_a,a1,a2,a3,a4,a5,a6,a7,a8);
583  }
591  virtual bool IsEqual (Ptr<const CallbackImplBase> other) const {
594  if (otherDerived == 0)
595  {
596  return false;
597  }
598  else if (otherDerived->m_functor != m_functor ||
599  otherDerived->m_a != m_a)
600  {
601  return false;
602  }
603  return true;
604  }
605 private:
608 };
609 
614 template <typename T, typename R, typename TX1, typename TX2, typename T1, typename T2, typename T3, typename T4,typename T5, typename T6, typename T7>
615 class TwoBoundFunctorCallbackImpl : public CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,empty,empty> {
616 public:
623  template <typename FUNCTOR, typename ARG1, typename ARG2>
624  TwoBoundFunctorCallbackImpl (FUNCTOR functor, ARG1 arg1, ARG2 arg2)
625  : m_functor (functor), m_a1 (arg1), m_a2 (arg2) {}
632  R operator() (void) {
633  return m_functor (m_a1,m_a2);
634  }
639  R operator() (T1 a1) {
640  return m_functor (m_a1,m_a2,a1);
641  }
647  R operator() (T1 a1,T2 a2) {
648  return m_functor (m_a1,m_a2,a1,a2);
649  }
656  R operator() (T1 a1,T2 a2,T3 a3) {
657  return m_functor (m_a1,m_a2,a1,a2,a3);
658  }
666  R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
667  return m_functor (m_a1,m_a2,a1,a2,a3,a4);
668  }
677  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
678  return m_functor (m_a1,m_a2,a1,a2,a3,a4,a5);
679  }
689  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6) {
690  return m_functor (m_a1,m_a2,a1,a2,a3,a4,a5,a6);
691  }
702  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7) {
703  return m_functor (m_a1,m_a2,a1,a2,a3,a4,a5,a6,a7);
704  }
712  virtual bool IsEqual (Ptr<const CallbackImplBase> other) const {
715  if (otherDerived == 0)
716  {
717  return false;
718  }
719  else if (otherDerived->m_functor != m_functor ||
720  otherDerived->m_a1 != m_a1 || otherDerived->m_a2 != m_a2)
721  {
722  return false;
723  }
724  return true;
725  }
726 private:
730 };
731 
736 template <typename T, typename R, typename TX1, typename TX2, typename TX3, typename T1, typename T2, typename T3, typename T4,typename T5, typename T6>
737 class ThreeBoundFunctorCallbackImpl : public CallbackImpl<R,T1,T2,T3,T4,T5,T6,empty,empty,empty> {
738 public:
746  template <typename FUNCTOR, typename ARG1, typename ARG2, typename ARG3>
747  ThreeBoundFunctorCallbackImpl (FUNCTOR functor, ARG1 arg1, ARG2 arg2, ARG3 arg3)
748  : m_functor (functor), m_a1 (arg1), m_a2 (arg2), m_a3 (arg3) {}
755  R operator() (void) {
756  return m_functor (m_a1,m_a2,m_a3);
757  }
762  R operator() (T1 a1) {
763  return m_functor (m_a1,m_a2,m_a3,a1);
764  }
770  R operator() (T1 a1,T2 a2) {
771  return m_functor (m_a1,m_a2,m_a3,a1,a2);
772  }
779  R operator() (T1 a1,T2 a2,T3 a3) {
780  return m_functor (m_a1,m_a2,m_a3,a1,a2,a3);
781  }
789  R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
790  return m_functor (m_a1,m_a2,m_a3,a1,a2,a3,a4);
791  }
800  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
801  return m_functor (m_a1,m_a2,m_a3,a1,a2,a3,a4,a5);
802  }
812  R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6) {
813  return m_functor (m_a1,m_a2,m_a3,a1,a2,a3,a4,a5,a6);
814  }
822  virtual bool IsEqual (Ptr<const CallbackImplBase> other) const {
825  if (otherDerived == 0)
826  {
827  return false;
828  }
829  else if (otherDerived->m_functor != m_functor ||
830  otherDerived->m_a1 != m_a1 || otherDerived->m_a2 != m_a2 || otherDerived->m_a3 != m_a3)
831  {
832  return false;
833  }
834  return true;
835  }
836 private:
841 };
842 
849 public:
850  CallbackBase () : m_impl () {}
852  Ptr<CallbackImplBase> GetImpl (void) const { return m_impl; }
853 protected:
860 
865  static std::string Demangle (const std::string& mangled);
866 };
867 
918 template<typename R,
919  typename T1 = empty, typename T2 = empty,
920  typename T3 = empty, typename T4 = empty,
921  typename T5 = empty, typename T6 = empty,
922  typename T7 = empty, typename T8 = empty,
923  typename T9 = empty>
924 class Callback : public CallbackBase {
925 public:
926  Callback () {}
927 
937  template <typename FUNCTOR>
938  Callback (FUNCTOR const &functor, bool, bool)
939  : CallbackBase (Create<FunctorCallbackImpl<FUNCTOR,R,T1,T2,T3,T4,T5,T6,T7,T8,T9> > (functor))
940  {}
941 
948  template <typename OBJ_PTR, typename MEM_PTR>
949  Callback (OBJ_PTR const &objPtr, MEM_PTR memPtr)
950  : CallbackBase (Create<MemPtrCallbackImpl<OBJ_PTR,MEM_PTR,R,T1,T2,T3,T4,T5,T6,T7,T8,T9> > (objPtr, memPtr))
951  {}
952 
959  : CallbackBase (impl)
960  {}
961 
968  template <typename T>
974  R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (*this, a), false);
976  }
977 
985  template <typename TX1, typename TX2>
991  R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (*this, a1, a2), false);
992  return Callback<R,T3,T4,T5,T6,T7,T8,T9> (impl);
993  }
994 
1003  template <typename TX1, typename TX2, typename TX3>
1004  Callback<R,T4,T5,T6,T7,T8,T9> ThreeBind (TX1 a1, TX2 a2, TX3 a3) {
1009  R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (*this, a1, a2, a3), false);
1010  return Callback<R,T4,T5,T6,T7,T8,T9> (impl);
1011  }
1012 
1018  bool IsNull (void) const {
1019  return (DoPeekImpl () == 0) ? true : false;
1020  }
1022  void Nullify (void) {
1023  m_impl = 0;
1024  }
1025 
1031  R operator() (void) const {
1032  return (*(DoPeekImpl ()))();
1033  }
1038  R operator() (T1 a1) const {
1039  return (*(DoPeekImpl ()))(a1);
1040  }
1046  R operator() (T1 a1, T2 a2) const {
1047  return (*(DoPeekImpl ()))(a1,a2);
1048  }
1055  R operator() (T1 a1, T2 a2, T3 a3) const {
1056  return (*(DoPeekImpl ()))(a1,a2,a3);
1057  }
1065  R operator() (T1 a1, T2 a2, T3 a3, T4 a4) const {
1066  return (*(DoPeekImpl ()))(a1,a2,a3,a4);
1067  }
1076  R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5) const {
1077  return (*(DoPeekImpl ()))(a1,a2,a3,a4,a5);
1078  }
1088  R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6) const {
1089  return (*(DoPeekImpl ()))(a1,a2,a3,a4,a5,a6);
1090  }
1101  R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6,T7 a7) const {
1102  return (*(DoPeekImpl ()))(a1,a2,a3,a4,a5,a6,a7);
1103  }
1115  R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6,T7 a7,T8 a8) const {
1116  return (*(DoPeekImpl ()))(a1,a2,a3,a4,a5,a6,a7,a8);
1117  }
1130  R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6,T7 a7,T8 a8, T9 a9) const {
1131  return (*(DoPeekImpl ()))(a1,a2,a3,a4,a5,a6,a7,a8,a9);
1132  }
1141  bool IsEqual (const CallbackBase &other) const {
1142  return m_impl->IsEqual (other.GetImpl ());
1143  }
1144 
1151  bool CheckType (const CallbackBase & other) const {
1152  return DoCheckType (other.GetImpl ());
1153  }
1159  void Assign (const CallbackBase &other) {
1160  DoAssign (other.GetImpl ());
1161  }
1162 private:
1166  }
1174  if (other != 0 && dynamic_cast<const CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> *> (PeekPointer (other)) != 0)
1175  {
1176  return true;
1177  }
1178  else if (other == 0)
1179  {
1180  return true;
1181  }
1182  else
1183  {
1184  return false;
1185  }
1186  }
1193  if (!DoCheckType (other))
1194  {
1195  NS_FATAL_ERROR ("Incompatible types. (feed to \"c++filt -t\" if needed)" << std::endl <<
1196  "got=" << Demangle ( typeid (*other).name () ) << std::endl <<
1197  "expected=" << Demangle ( typeid (CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> *).name () ));
1198  }
1199  m_impl = const_cast<CallbackImplBase *> (PeekPointer (other));
1200  }
1201 };
1202 
1203 
1212 template <typename R, typename T1, typename T2,
1213  typename T3, typename T4,
1214  typename T5, typename T6,
1215  typename T7, typename T8,
1216  typename T9>
1218 {
1219  return !a.IsEqual (b);
1220 }
1221 
1241 template <typename T, typename OBJ, typename R>
1242 Callback<R> MakeCallback (R (T::*memPtr)(void), OBJ objPtr) {
1243  return Callback<R> (objPtr, memPtr);
1244 }
1245 template <typename T, typename OBJ, typename R>
1246 Callback<R> MakeCallback (R (T::*memPtr)() const, OBJ objPtr) {
1247  return Callback<R> (objPtr, memPtr);
1248 }
1249 template <typename T, typename OBJ, typename R, typename T1>
1250 Callback<R,T1> MakeCallback (R (T::*memPtr)(T1), OBJ objPtr) {
1251  return Callback<R,T1> (objPtr, memPtr);
1252 }
1253 template <typename T, typename OBJ, typename R, typename T1>
1254 Callback<R,T1> MakeCallback (R (T::*memPtr)(T1) const, OBJ objPtr) {
1255  return Callback<R,T1> (objPtr, memPtr);
1256 }
1257 template <typename T, typename OBJ, typename R, typename T1, typename T2>
1258 Callback<R,T1,T2> MakeCallback (R (T::*memPtr)(T1,T2), OBJ objPtr) {
1259  return Callback<R,T1,T2> (objPtr, memPtr);
1260 }
1261 template <typename T, typename OBJ, typename R, typename T1, typename T2>
1262 Callback<R,T1,T2> MakeCallback (R (T::*memPtr)(T1,T2) const, OBJ objPtr) {
1263  return Callback<R,T1,T2> (objPtr, memPtr);
1264 }
1265 template <typename T, typename OBJ, typename R, typename T1,typename T2, typename T3>
1266 Callback<R,T1,T2,T3> MakeCallback (R (T::*memPtr)(T1,T2,T3), OBJ objPtr) {
1267  return Callback<R,T1,T2,T3> (objPtr, memPtr);
1268 }
1269 template <typename T, typename OBJ, typename R, typename T1,typename T2, typename T3>
1270 Callback<R,T1,T2,T3> MakeCallback (R (T::*memPtr)(T1,T2,T3) const, OBJ objPtr) {
1271  return Callback<R,T1,T2,T3> (objPtr, memPtr);
1272 }
1273 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4>
1274 Callback<R,T1,T2,T3,T4> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4), OBJ objPtr) {
1275  return Callback<R,T1,T2,T3,T4> (objPtr, memPtr);
1276 }
1277 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4>
1278 Callback<R,T1,T2,T3,T4> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4) const, OBJ objPtr) {
1279  return Callback<R,T1,T2,T3,T4> (objPtr, memPtr);
1280 }
1281 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5>
1282 Callback<R,T1,T2,T3,T4,T5> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4,T5), OBJ objPtr) {
1283  return Callback<R,T1,T2,T3,T4,T5> (objPtr, memPtr);
1284 }
1285 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5>
1286 Callback<R,T1,T2,T3,T4,T5> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4,T5) const, OBJ objPtr) {
1287  return Callback<R,T1,T2,T3,T4,T5> (objPtr, memPtr);
1288 }
1289 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5,typename T6>
1290 Callback<R,T1,T2,T3,T4,T5,T6> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4,T5,T6), OBJ objPtr) {
1291  return Callback<R,T1,T2,T3,T4,T5,T6> (objPtr, memPtr);
1292 }
1293 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5, typename T6>
1294 Callback<R,T1,T2,T3,T4,T5,T6> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4,T5,T6) const, OBJ objPtr) {
1295  return Callback<R,T1,T2,T3,T4,T5,T6> (objPtr, memPtr);
1296 }
1297 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5,typename T6, typename T7>
1298 Callback<R,T1,T2,T3,T4,T5,T6,T7> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4,T5,T6,T7), OBJ objPtr) {
1299  return Callback<R,T1,T2,T3,T4,T5,T6,T7> (objPtr, memPtr);
1300 }
1301 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5, typename T6, typename T7>
1302 Callback<R,T1,T2,T3,T4,T5,T6,T7> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4,T5,T6,T7) const, OBJ objPtr) {
1303  return Callback<R,T1,T2,T3,T4,T5,T6,T7> (objPtr, memPtr);
1304 }
1305 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5,typename T6, typename T7, typename T8>
1306 Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> MakeCallback (R (T::*memPtr)(T1,T2,T3,T4,T5,T6,T7,T8), OBJ objPtr) {
1307  return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> (objPtr, memPtr);
1308 }
1309 template <typename T, typename OBJ, typename R, typename T1, typename T2, typename T3, typename T4,typename T5, typename T6, typename T7, typename T8>
1310 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) {
1311  return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> (objPtr, memPtr);
1312 }
1313 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>
1314 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) {
1315  return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (objPtr, memPtr);
1316 }
1317 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>
1318 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) {
1319  return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (objPtr, memPtr);
1320 }
1341 template <typename R>
1342 Callback<R> MakeCallback (R (*fnPtr)()) {
1343  return Callback<R> (fnPtr, true, true);
1344 }
1345 template <typename R, typename T1>
1346 Callback<R,T1> MakeCallback (R (*fnPtr)(T1)) {
1347  return Callback<R,T1> (fnPtr, true, true);
1348 }
1349 template <typename R, typename T1, typename T2>
1350 Callback<R,T1,T2> MakeCallback (R (*fnPtr)(T1,T2)) {
1351  return Callback<R,T1,T2> (fnPtr, true, true);
1352 }
1353 template <typename R, typename T1, typename T2,typename T3>
1354 Callback<R,T1,T2,T3> MakeCallback (R (*fnPtr)(T1,T2,T3)) {
1355  return Callback<R,T1,T2,T3> (fnPtr, true, true);
1356 }
1357 template <typename R, typename T1, typename T2,typename T3,typename T4>
1358 Callback<R,T1,T2,T3,T4> MakeCallback (R (*fnPtr)(T1,T2,T3,T4)) {
1359  return Callback<R,T1,T2,T3,T4> (fnPtr, true, true);
1360 }
1361 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5>
1362 Callback<R,T1,T2,T3,T4,T5> MakeCallback (R (*fnPtr)(T1,T2,T3,T4,T5)) {
1363  return Callback<R,T1,T2,T3,T4,T5> (fnPtr, true, true);
1364 }
1365 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6>
1366 Callback<R,T1,T2,T3,T4,T5,T6> MakeCallback (R (*fnPtr)(T1,T2,T3,T4,T5,T6)) {
1367  return Callback<R,T1,T2,T3,T4,T5,T6> (fnPtr, true, true);
1368 }
1369 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6, typename T7>
1370 Callback<R,T1,T2,T3,T4,T5,T6,T7> MakeCallback (R (*fnPtr)(T1,T2,T3,T4,T5,T6,T7)) {
1371  return Callback<R,T1,T2,T3,T4,T5,T6,T7> (fnPtr, true, true);
1372 }
1373 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6, typename T7, typename T8>
1374 Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> MakeCallback (R (*fnPtr)(T1,T2,T3,T4,T5,T6,T7,T8)) {
1375  return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> (fnPtr, true, true);
1376 }
1377 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6, typename T7, typename T8, typename T9>
1378 Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> MakeCallback (R (*fnPtr)(T1,T2,T3,T4,T5,T6,T7,T8,T9)) {
1379  return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (fnPtr, true, true);
1380 }
1398 template <typename R>
1400  return Callback<R> ();
1401 }
1402 template <typename R, typename T1>
1404  return Callback<R,T1> ();
1405 }
1406 template <typename R, typename T1, typename T2>
1408  return Callback<R,T1,T2> ();
1409 }
1410 template <typename R, typename T1, typename T2,typename T3>
1412  return Callback<R,T1,T2,T3> ();
1413 }
1414 template <typename R, typename T1, typename T2,typename T3,typename T4>
1416  return Callback<R,T1,T2,T3,T4> ();
1417 }
1418 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5>
1420  return Callback<R,T1,T2,T3,T4,T5> ();
1421 }
1422 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6>
1425 }
1426 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6, typename T7>
1429 }
1430 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6, typename T7, typename T8>
1433 }
1434 template <typename R, typename T1, typename T2,typename T3,typename T4,typename T5,typename T6, typename T7, typename T8, typename T9>
1437 }
1466 template <typename R, typename TX, typename ARG>
1467 Callback<R> MakeBoundCallback (R (*fnPtr)(TX), ARG a1) {
1469  Create<BoundFunctorCallbackImpl<R (*)(TX),R,TX,empty,empty,empty,empty,empty,empty,empty,empty> >(fnPtr, a1);
1470  return Callback<R> (impl);
1471 }
1472 template <typename R, typename TX, typename ARG,
1473  typename T1>
1474 Callback<R,T1> MakeBoundCallback (R (*fnPtr)(TX,T1), ARG a1) {
1476  Create<BoundFunctorCallbackImpl<R (*)(TX,T1),R,TX,T1,empty,empty,empty,empty,empty,empty,empty> > (fnPtr, a1);
1477  return Callback<R,T1> (impl);
1478 }
1479 template <typename R, typename TX, typename ARG,
1480  typename T1, typename T2>
1481 Callback<R,T1,T2> MakeBoundCallback (R (*fnPtr)(TX,T1,T2), ARG a1) {
1483  Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2),R,TX,T1,T2,empty,empty,empty,empty,empty,empty> > (fnPtr, a1);
1484  return Callback<R,T1,T2> (impl);
1485 }
1486 template <typename R, typename TX, typename ARG,
1487  typename T1, typename T2,typename T3>
1488 Callback<R,T1,T2,T3> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3), ARG a1) {
1490  Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3),R,TX,T1,T2,T3,empty,empty,empty,empty,empty> > (fnPtr, a1);
1491  return Callback<R,T1,T2,T3> (impl);
1492 }
1493 template <typename R, typename TX, typename ARG,
1494  typename T1, typename T2,typename T3,typename T4>
1495 Callback<R,T1,T2,T3,T4> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3,T4), ARG a1) {
1497  Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3,T4),R,TX,T1,T2,T3,T4,empty,empty,empty,empty> > (fnPtr, a1);
1498  return Callback<R,T1,T2,T3,T4> (impl);
1499 }
1500 template <typename R, typename TX, typename ARG,
1501  typename T1, typename T2,typename T3,typename T4,typename T5>
1502 Callback<R,T1,T2,T3,T4,T5> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3,T4,T5), ARG a1) {
1504  Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3,T4,T5),R,TX,T1,T2,T3,T4,T5,empty,empty,empty> > (fnPtr, a1);
1505  return Callback<R,T1,T2,T3,T4,T5> (impl);
1506 }
1507 template <typename R, typename TX, typename ARG,
1508  typename T1, typename T2,typename T3,typename T4,typename T5, typename T6>
1509 Callback<R,T1,T2,T3,T4,T5,T6> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3,T4,T5,T6), ARG a1) {
1511  Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3,T4,T5,T6),R,TX,T1,T2,T3,T4,T5,T6,empty,empty> > (fnPtr, a1);
1512  return Callback<R,T1,T2,T3,T4,T5,T6> (impl);
1513 }
1514 template <typename R, typename TX, typename ARG,
1515  typename T1, typename T2,typename T3,typename T4,typename T5, typename T6, typename T7>
1516 Callback<R,T1,T2,T3,T4,T5,T6,T7> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3,T4,T5,T6,T7), ARG a1) {
1518  Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3,T4,T5,T6,T7),R,TX,T1,T2,T3,T4,T5,T6,T7,empty> > (fnPtr, a1);
1519  return Callback<R,T1,T2,T3,T4,T5,T6,T7> (impl);
1520 }
1521 template <typename R, typename TX, typename ARG,
1522  typename T1, typename T2,typename T3,typename T4,typename T5, typename T6, typename T7, typename T8>
1523 Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3,T4,T5,T6,T7,T8), ARG a1) {
1525  Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3,T4,T5,T6,T7,T8),R,TX,T1,T2,T3,T4,T5,T6,T7,T8> > (fnPtr, a1);
1527 }
1537 template <typename R, typename TX1, typename TX2, typename ARG1, typename ARG2>
1538 Callback<R> MakeBoundCallback (R (*fnPtr)(TX1,TX2), ARG1 a1, ARG2 a2) {
1540  Create<TwoBoundFunctorCallbackImpl<R (*)(TX1,TX2),R,TX1,TX2,empty,empty,empty,empty,empty,empty,empty> >(fnPtr, a1, a2);
1541  return Callback<R> (impl);
1542 }
1543 template <typename R, typename TX1, typename TX2, typename ARG1, typename ARG2,
1544  typename T1>
1545 Callback<R,T1> MakeBoundCallback (R (*fnPtr)(TX1,TX2,T1), ARG1 a1, ARG2 a2) {
1547  Create<TwoBoundFunctorCallbackImpl<R (*)(TX1,TX2,T1),R,TX1,TX2,T1,empty,empty,empty,empty,empty,empty> > (fnPtr, a1, a2);
1548  return Callback<R,T1> (impl);
1549 }
1550 template <typename R, typename TX1, typename TX2, typename ARG1, typename ARG2,
1551  typename T1, typename T2>
1552 Callback<R,T1,T2> MakeBoundCallback (R (*fnPtr)(TX1,TX2,T1,T2), ARG1 a1, ARG2 a2) {
1554  Create<TwoBoundFunctorCallbackImpl<R (*)(TX1,TX2,T1,T2),R,TX1,TX2,T1,T2,empty,empty,empty,empty,empty> > (fnPtr, a1, a2);
1555  return Callback<R,T1,T2> (impl);
1556 }
1557 template <typename R, typename TX1, typename TX2, typename ARG1, typename ARG2,
1558  typename T1, typename T2,typename T3>
1559 Callback<R,T1,T2,T3> MakeBoundCallback (R (*fnPtr)(TX1,TX2,T1,T2,T3), ARG1 a1, ARG2 a2) {
1561  Create<TwoBoundFunctorCallbackImpl<R (*)(TX1,TX2,T1,T2,T3),R,TX1,TX2,T1,T2,T3,empty,empty,empty,empty> > (fnPtr, a1, a2);
1562  return Callback<R,T1,T2,T3> (impl);
1563 }
1564 template <typename R, typename TX1, typename TX2, typename ARG1, typename ARG2,
1565  typename T1, typename T2,typename T3,typename T4>
1566 Callback<R,T1,T2,T3,T4> MakeBoundCallback (R (*fnPtr)(TX1,TX2,T1,T2,T3,T4), ARG1 a1, ARG2 a2) {
1568  Create<TwoBoundFunctorCallbackImpl<R (*)(TX1,TX2,T1,T2,T3,T4),R,TX1,TX2,T1,T2,T3,T4,empty,empty,empty> > (fnPtr, a1, a2);
1569  return Callback<R,T1,T2,T3,T4> (impl);
1570 }
1571 template <typename R, typename TX1, typename TX2, typename ARG1, typename ARG2,
1572  typename T1, typename T2,typename T3,typename T4,typename T5>
1573 Callback<R,T1,T2,T3,T4,T5> MakeBoundCallback (R (*fnPtr)(TX1,TX2,T1,T2,T3,T4,T5), ARG1 a1, ARG2 a2) {
1575  Create<TwoBoundFunctorCallbackImpl<R (*)(TX1,TX2,T1,T2,T3,T4,T5),R,TX1,TX2,T1,T2,T3,T4,T5,empty,empty> > (fnPtr, a1, a2);
1576  return Callback<R,T1,T2,T3,T4,T5> (impl);
1577 }
1578 template <typename R, typename TX1, typename TX2, typename ARG1, typename ARG2,
1579  typename T1, typename T2,typename T3,typename T4,typename T5, typename T6>
1580 Callback<R,T1,T2,T3,T4,T5,T6> MakeBoundCallback (R (*fnPtr)(TX1,TX2,T1,T2,T3,T4,T5,T6), ARG1 a1, ARG2 a2) {
1582  Create<TwoBoundFunctorCallbackImpl<R (*)(TX1,TX2,T1,T2,T3,T4,T5,T6),R,TX1,TX2,T1,T2,T3,T4,T5,T6,empty> > (fnPtr, a1, a2);
1583  return Callback<R,T1,T2,T3,T4,T5,T6> (impl);
1584 }
1585 template <typename R, typename TX1, typename TX2, typename ARG1, typename ARG2,
1586  typename T1, typename T2,typename T3,typename T4,typename T5, typename T6, typename T7>
1587 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) {
1589  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);
1590  return Callback<R,T1,T2,T3,T4,T5,T6,T7> (impl);
1591 }
1602 template <typename R, typename TX1, typename TX2, typename TX3, typename ARG1, typename ARG2, typename ARG3>
1603 Callback<R> MakeBoundCallback (R (*fnPtr)(TX1,TX2,TX3), ARG1 a1, ARG2 a2, ARG3 a3) {
1605  Create<ThreeBoundFunctorCallbackImpl<R (*)(TX1,TX2,TX3),R,TX1,TX2,TX3,empty,empty,empty,empty,empty,empty> >(fnPtr, a1, a2, a3);
1606  return Callback<R> (impl);
1607 }
1608 template <typename R, typename TX1, typename TX2, typename TX3, typename ARG1, typename ARG2, typename ARG3,
1609  typename T1>
1610 Callback<R,T1> MakeBoundCallback (R (*fnPtr)(TX1,TX2,TX3,T1), ARG1 a1, ARG2 a2, ARG3 a3) {
1612  Create<ThreeBoundFunctorCallbackImpl<R (*)(TX1,TX2,TX3,T1),R,TX1,TX2,TX3,T1,empty,empty,empty,empty,empty> > (fnPtr, a1, a2, a3);
1613  return Callback<R,T1> (impl);
1614 }
1615 template <typename R, typename TX1, typename TX2, typename TX3, typename ARG1, typename ARG2, typename ARG3,
1616  typename T1, typename T2>
1617 Callback<R,T1,T2> MakeBoundCallback (R (*fnPtr)(TX1,TX2,TX3,T1,T2), ARG1 a1, ARG2 a2, ARG3 a3) {
1619  Create<ThreeBoundFunctorCallbackImpl<R (*)(TX1,TX2,TX3,T1,T2),R,TX1,TX2,TX3,T1,T2,empty,empty,empty,empty> > (fnPtr, a1, a2, a3);
1620  return Callback<R,T1,T2> (impl);
1621 }
1622 template <typename R, typename TX1, typename TX2, typename TX3, typename ARG1, typename ARG2, typename ARG3,
1623  typename T1, typename T2,typename T3>
1624 Callback<R,T1,T2,T3> MakeBoundCallback (R (*fnPtr)(TX1,TX2,TX3,T1,T2,T3), ARG1 a1, ARG2 a2, ARG3 a3) {
1626  Create<ThreeBoundFunctorCallbackImpl<R (*)(TX1,TX2,TX3,T1,T2,T3),R,TX1,TX2,TX3,T1,T2,T3,empty,empty,empty> > (fnPtr, a1, a2, a3);
1627  return Callback<R,T1,T2,T3> (impl);
1628 }
1629 template <typename R, typename TX1, typename TX2, typename TX3, typename ARG1, typename ARG2, typename ARG3,
1630  typename T1, typename T2,typename T3,typename T4>
1631 Callback<R,T1,T2,T3,T4> MakeBoundCallback (R (*fnPtr)(TX1,TX2,TX3,T1,T2,T3,T4), ARG1 a1, ARG2 a2, ARG3 a3) {
1633  Create<ThreeBoundFunctorCallbackImpl<R (*)(TX1,TX2,TX3,T1,T2,T3,T4),R,TX1,TX2,TX3,T1,T2,T3,T4,empty,empty> > (fnPtr, a1, a2, a3);
1634  return Callback<R,T1,T2,T3,T4> (impl);
1635 }
1636 template <typename R, typename TX1, typename TX2, typename TX3, typename ARG1, typename ARG2, typename ARG3,
1637  typename T1, typename T2,typename T3,typename T4,typename T5>
1638 Callback<R,T1,T2,T3,T4,T5> MakeBoundCallback (R (*fnPtr)(TX1,TX2,TX3,T1,T2,T3,T4,T5), ARG1 a1, ARG2 a2, ARG3 a3) {
1640  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);
1641  return Callback<R,T1,T2,T3,T4,T5> (impl);
1642 }
1643 template <typename R, typename TX1, typename TX2, typename TX3, typename ARG1, typename ARG2, typename ARG3,
1644  typename T1, typename T2,typename T3,typename T4,typename T5, typename T6>
1645 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) {
1647  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);
1648  return Callback<R,T1,T2,T3,T4,T5,T6> (impl);
1649 }
1654 } // namespace ns3
1655 
1656 namespace ns3 {
1657 
1663 {
1664 public:
1666  CallbackValue ();
1671  CallbackValue (const CallbackBase &base);
1673  virtual ~CallbackValue ();
1675  void Set (CallbackBase base);
1682  template <typename T>
1683  bool GetAccessor (T &value) const;
1685  virtual Ptr<AttributeValue> Copy (void) const;
1691  virtual std::string SerializeToString (Ptr<const AttributeChecker> checker) const;
1699  virtual bool DeserializeFromString (std::string value, Ptr<const AttributeChecker> checker);
1700 private:
1702 };
1703 
1706 
1707 } // namespace ns3
1708 
1709 namespace ns3 {
1710 
1711 template <typename T>
1712 bool CallbackValue::GetAccessor (T &value) const
1713 {
1714  if (value.CheckType (m_value))
1715  {
1716  value.Assign (m_value);
1717  return true;
1718  }
1719  return false;
1720 }
1721 
1722 } // namespace ns3
1723 
1724 
1725 #endif /* CALLBACK_H */
CallbackValue()
Constructor.
Definition: callback.cc:8
smart pointer class similar to boost::intrusive_ptr
Definition: ptr.h:60
virtual ~MemPtrCallbackImpl()
Definition: callback.h:342
Callback template class.
Definition: callback.h:924
void DoAssign(Ptr< const CallbackImplBase > other)
Adopt the other's implementation, if type compatible.
Definition: callback.h:1192
virtual ~BoundFunctorCallbackImpl()
Definition: callback.h:491
virtual ~FunctorCallbackImpl()
Definition: callback.h:195
Hold a value for an Attribute.
Definition: attribute.h:56
virtual bool IsEqual(Ptr< const CallbackImplBase > other) const =0
Equality test.
Callback< R > MakeBoundCallback(R(*fnPtr)(TX), ARG a1)
Build bound Callbacks which take varying numbers of arguments, and potentially returning a value...
Definition: callback.h:1467
Callback< R, T3, T4, T5, T6, T7, T8, T9 > TwoBind(TX1 a1, TX2 a2)
Bind the first two arguments.
Definition: callback.h:986
bool IsNull(void) const
Check for null implementation.
Definition: callback.h:1018
R operator()(void)
Functor with varying numbers of arguments.
Definition: callback.h:497
void Assign(const CallbackBase &other)
Adopt the other's implementation, if type compatible.
Definition: callback.h:1159
Callback< R, T2, T3, T4, T5, T6, T7, T8, T9 > Bind(T a)
Bind the first arguments.
Definition: callback.h:969
Base class for Callback class.
Definition: callback.h:848
MemPtrCallbackImpl(OBJ_PTR const &objPtr, MEM_PTR memPtr)
Construct from an object pointer and member function pointer.
Definition: callback.h:340
#define NS_FATAL_ERROR(msg)
fatal error handling
Definition: fatal-error.h:95
virtual ~CallbackValue()
Destructor.
Definition: callback.cc:17
Callback< R > MakeNullCallback(void)
Definition: callback.h:1399
bool GetAccessor(T &value) const
Give value my callback, if type compatible.
Definition: callback.h:1712
CallbackImpl for functors with first three arguments bound at construction.
Definition: callback.h:737
AttributeValue form of a Callback.
Definition: callback.h:1662
The unqualified CallbackImpl class.
Definition: callback.h:101
R operator()(void)
Functor with varying numbers of arguments.
Definition: callback.h:201
TypeTraits< TX >::ReferencedType m_a
the bound argument
Definition: callback.h:607
make Callback use a separate empty type
Definition: empty.h:8
Ptr< T > Create(void)
Definition: ptr.h:232
R operator()(void)
Functor with varying numbers of arguments.
Definition: callback.h:348
CallbackBase m_value
the CallbackBase
Definition: callback.h:1701
bool CheckType(const CallbackBase &other) const
Check for compatible types.
Definition: callback.h:1151
FunctorCallbackImpl(T const &functor)
Construct from a functor.
Definition: callback.h:193
Trait class to convert a pointer into a reference, used by MemPtrCallBackImpl.
Definition: callback.h:52
BoundFunctorCallbackImpl(FUNCTOR functor, ARG a)
Construct from functor and a bound argument.
Definition: callback.h:489
OBJ_PTR const m_objPtr
the object pointer
Definition: callback.h:472
MEM_PTR m_memPtr
the member function pointer
Definition: callback.h:473
T * PeekPointer(const Ptr< T > &p)
Definition: ptr.h:280
virtual bool IsEqual(Ptr< const CallbackImplBase > other) const
Equality test.
Definition: callback.h:712
virtual bool IsEqual(Ptr< const CallbackImplBase > other) const
Equality test.
Definition: callback.h:591
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
Definition: callback.h:1242
ATTRIBUTE_ACCESSOR_DEFINE(Boolean)
CallbackImpl for pointer to member functions.
Definition: callback.h:332
Callback< R, T4, T5, T6, T7, T8, T9 > ThreeBind(TX1 a1, TX2 a2, TX3 a3)
Bind the first three arguments.
Definition: callback.h:1004
bool DoCheckType(Ptr< const CallbackImplBase > other) const
Check for compatible types.
Definition: callback.h:1173
Abstract base class for CallbackImpl Provides reference counting and equality test.
Definition: callback.h:82
CallbackImpl for functors with first two arguments bound at construction.
Definition: callback.h:615
virtual bool IsEqual(Ptr< const CallbackImplBase > other) const
Equality test.
Definition: callback.h:457
Callback(Ptr< CallbackImpl< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 > > const &impl)
Construct from a CallbackImpl pointer.
Definition: callback.h:958
R operator()(void) const
Functor with varying numbers of arguments.
Definition: callback.h:1031
TypeTraits< TX3 >::ReferencedType m_a3
third bound argument
Definition: callback.h:840
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:1217
virtual ~CallbackImplBase()
Virtual destructor.
Definition: callback.h:86
static std::string Demangle(const std::string &mangled)
Definition: callback.cc:104
bool IsEqual(const CallbackBase &other) const
Equality test.
Definition: callback.h:1141
static T & GetReference(T *const p)
Definition: callback.h:65
TypeTraits< TX1 >::ReferencedType m_a1
first bound argument
Definition: callback.h:838
Callback(OBJ_PTR const &objPtr, MEM_PTR memPtr)
Construct a member function pointer call back.
Definition: callback.h:949
T m_functor
the functor
Definition: callback.h:324
R operator()(void)
Functor with varying numbers of arguments.
Definition: callback.h:632
virtual ~CallbackImpl()
Definition: callback.h:175
TypeTraits< TX1 >::ReferencedType m_a1
first bound argument
Definition: callback.h:728
Callback(FUNCTOR const &functor, bool, bool)
Construct a functor call back, supporting operator() calls.
Definition: callback.h:938
virtual bool IsEqual(Ptr< const CallbackImplBase > other) const
Equality test.
Definition: callback.h:310
CallbackImpl for functors with first argument bound at construction.
Definition: callback.h:481
TwoBoundFunctorCallbackImpl(FUNCTOR functor, ARG1 arg1, ARG2 arg2)
Construct from functor and two arguments.
Definition: callback.h:624
CallbackImpl with functors.
Definition: callback.h:186
virtual bool DeserializeFromString(std::string value, Ptr< const AttributeChecker > checker)
Deserialize from string (not implemented)
Definition: callback.cc:43
virtual R operator()(T1, T2, T3, T4, T5, T6, T7, T8, T9)=0
Abstract operator.
Type trait reference values.
Definition: type-traits.h:6
virtual std::string SerializeToString(Ptr< const AttributeChecker > checker) const
Serialize to string.
Definition: callback.cc:35
T m_functor
The functor.
Definition: callback.h:606
virtual bool IsEqual(Ptr< const CallbackImplBase > other) const
Equality test.
Definition: callback.h:822
void Nullify(void)
Discard the implementation, set it to null.
Definition: callback.h:1022
TypeTraits< TX2 >::ReferencedType m_a2
second bound argument
Definition: callback.h:839
CallbackBase(Ptr< CallbackImplBase > impl)
Construct from a pimpl.
Definition: callback.h:858
A template-based reference counting class.
virtual Ptr< AttributeValue > Copy(void) const
Definition: callback.cc:29
ATTRIBUTE_CHECKER_DEFINE(Boolean)
CallbackImpl< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 > * DoPeekImpl(void) const
Definition: callback.h:1164
Ptr< CallbackImplBase > m_impl
the pimpl
Definition: callback.h:859
void Set(CallbackBase base)
Definition: callback.cc:22
TypeTraits< TX2 >::ReferencedType m_a2
second bound argument
Definition: callback.h:729
Ptr< CallbackImplBase > GetImpl(void) const
Definition: callback.h:852
ThreeBoundFunctorCallbackImpl(FUNCTOR functor, ARG1 arg1, ARG2 arg2, ARG3 arg3)
Construct from functor and three arguments.
Definition: callback.h:747
R operator()(void)
Functor with varying numbers of arguments.
Definition: callback.h:755