25 #include "fatal-error.h"
27 #include "type-traits.h"
28 #include "attribute.h"
29 #include "attribute-helper.h"
30 #include "simple-ref-count.h"
70 static T & GetReference (T *
const p)
84 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9>
91 virtual R operator() (
void) = 0;
94 template <
typename R,
typename T1>
98 virtual R operator() (T1) = 0;
101 template <
typename R,
typename T1,
typename T2>
105 virtual R operator() (T1, T2) = 0;
108 template <
typename R,
typename T1,
typename T2,
typename T3>
112 virtual R operator() (T1, T2, T3) = 0;
115 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4>
119 virtual R operator() (T1, T2, T3, T4) = 0;
122 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
126 virtual R operator() (T1, T2, T3, T4, T5) = 0;
129 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
133 virtual R operator() (T1, T2, T3, T4, T5, T6) = 0;
136 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
140 virtual R operator() (T1, T2, T3, T4, T5, T6, T7) = 0;
143 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
147 virtual R operator() (T1, T2, T3, T4, T5, T6, T7, T8) = 0;
150 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9>
154 virtual R operator() (T1, T2, T3, T4, T5, T6, T7, T8, T9) = 0;
159 template <
typename T,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9>
163 : m_functor (functor) {}
165 R operator() (
void) {
168 R operator() (T1 a1) {
169 return m_functor (a1);
171 R operator() (T1 a1,T2 a2) {
172 return m_functor (a1,a2);
174 R operator() (T1 a1,T2 a2,T3 a3) {
175 return m_functor (a1,a2,a3);
177 R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
178 return m_functor (a1,a2,a3,a4);
180 R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
181 return m_functor (a1,a2,a3,a4,a5);
183 R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6) {
184 return m_functor (a1,a2,a3,a4,a5,a6);
186 R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7) {
187 return m_functor (a1,a2,a3,a4,a5,a6,a7);
189 R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8) {
190 return m_functor (a1,a2,a3,a4,a5,a6,a7,a8);
192 R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8,T9 a9) {
193 return m_functor (a1,a2,a3,a4,a5,a6,a7,a8,a9);
196 FunctorCallbackImpl<T,R,T1,T2,T3,T4,T5,T6,T7,T8,T9> const *otherDerived =
197 dynamic_cast<FunctorCallbackImpl<T,R,T1,T2,T3,T4,T5,T6,T7,T8,T9> const *
> (PeekPointer (other));
198 if (otherDerived == 0)
202 else if (otherDerived->m_functor != m_functor)
213 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>
217 : m_objPtr (objPtr), m_memPtr (mem_ptr) {}
219 R operator() (
void) {
222 R operator() (T1 a1) {
225 R operator() (T1 a1,T2 a2) {
228 R operator() (T1 a1,T2 a2,T3 a3) {
231 R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
234 R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
237 R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6) {
240 R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7) {
243 R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8) {
246 R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8, T9 a9) {
250 MemPtrCallbackImpl<OBJ_PTR,MEM_PTR,R,T1,T2,T3,T4,T5,T6,T7,T8,T9> const *otherDerived =
251 dynamic_cast<MemPtrCallbackImpl<OBJ_PTR,MEM_PTR,R,T1,T2,T3,T4,T5,T6,T7,T8,T9> const *
> (PeekPointer (other));
252 if (otherDerived == 0)
256 else if (otherDerived->m_objPtr != m_objPtr ||
257 otherDerived->m_memPtr != m_memPtr)
264 OBJ_PTR
const m_objPtr;
269 template <
typename T,
typename R,
typename TX,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
272 template <
typename FUNCTOR,
typename ARG>
274 : m_functor (functor), m_a (a) {}
276 R operator() (
void) {
277 return m_functor (m_a);
279 R operator() (T1 a1) {
280 return m_functor (m_a,a1);
282 R operator() (T1 a1,T2 a2) {
283 return m_functor (m_a,a1,a2);
285 R operator() (T1 a1,T2 a2,T3 a3) {
286 return m_functor (m_a,a1,a2,a3);
288 R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
289 return m_functor (m_a,a1,a2,a3,a4);
291 R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
292 return m_functor (m_a,a1,a2,a3,a4,a5);
294 R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6) {
295 return m_functor (m_a,a1,a2,a3,a4,a5,a6);
297 R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7) {
298 return m_functor (m_a,a1,a2,a3,a4,a5,a6,a7);
300 R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8) {
301 return m_functor (m_a,a1,a2,a3,a4,a5,a6,a7,a8);
304 BoundFunctorCallbackImpl<T,R,TX,T1,T2,T3,T4,T5,T6,T7,T8> const *otherDerived =
305 dynamic_cast<BoundFunctorCallbackImpl<T,R,TX,T1,T2,T3,T4,T5,T6,T7,T8> const *
> (PeekPointer (other));
306 if (otherDerived == 0)
310 else if (otherDerived->m_functor != m_functor ||
311 otherDerived->m_a != m_a)
331 static std::string Demangle (
const std::string& mangled);
375 template <
typename FUNCTOR>
376 Callback (FUNCTOR
const &functor,
bool,
bool)
377 :
CallbackBase (Create<
FunctorCallbackImpl<FUNCTOR,R,T1,T2,T3,T4,T5,T6,T7,T8,T9> > (functor))
380 template <
typename OBJ_PTR,
typename MEM_PTR>
381 Callback (OBJ_PTR
const &objPtr, MEM_PTR mem_ptr)
382 :
CallbackBase (Create<
MemPtrCallbackImpl<OBJ_PTR,MEM_PTR,R,T1,T2,T3,T4,T5,T6,T7,T8,T9> > (objPtr, mem_ptr))
389 template <
typename T>
394 Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9>,
395 R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (*
this, a),
false);
399 bool IsNull (
void)
const {
400 return (DoPeekImpl () == 0) ?
true :
false;
402 void Nullify (
void) {
406 R operator() (
void)
const {
407 return (*(DoPeekImpl ()))();
409 R operator() (T1 a1)
const {
410 return (*(DoPeekImpl ()))(a1);
412 R operator() (T1 a1, T2 a2)
const {
413 return (*(DoPeekImpl ()))(a1,a2);
415 R operator() (T1 a1, T2 a2, T3 a3)
const {
416 return (*(DoPeekImpl ()))(a1,a2,a3);
418 R operator() (T1 a1, T2 a2, T3 a3, T4 a4)
const {
419 return (*(DoPeekImpl ()))(a1,a2,a3,a4);
421 R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5)
const {
422 return (*(DoPeekImpl ()))(a1,a2,a3,a4,a5);
424 R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6)
const {
425 return (*(DoPeekImpl ()))(a1,a2,a3,a4,a5,a6);
427 R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6,T7 a7)
const {
428 return (*(DoPeekImpl ()))(a1,a2,a3,a4,a5,a6,a7);
430 R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6,T7 a7,T8 a8)
const {
431 return (*(DoPeekImpl ()))(a1,a2,a3,a4,a5,a6,a7,a8);
433 R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6,T7 a7,T8 a8, T9 a9)
const {
434 return (*(DoPeekImpl ()))(a1,a2,a3,a4,a5,a6,a7,a8,a9);
438 return m_impl->IsEqual (other.GetImpl ());
442 return DoCheckType (other.GetImpl ());
445 DoAssign (other.GetImpl ());
466 if (!DoCheckType (other))
468 NS_FATAL_ERROR (
"Incompatible types. (feed to \"c++filt -t\" if needed)" << std::endl <<
469 "got=" << Demangle (
typeid (*other).name () ) << std::endl <<
477 template <
typename R,
typename T1,
typename T2,
478 typename T3,
typename T4,
479 typename T5,
typename T6,
480 typename T7,
typename T8,
482 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)
484 return !a.IsEqual (b);
501 template <
typename T,
typename OBJ,
typename R>
505 template <
typename T,
typename OBJ,
typename R>
506 Callback<R>
MakeCallback (R (T::*mem_ptr)()
const, OBJ objPtr) {
507 return Callback<R> (objPtr, mem_ptr);
517 template <
typename T,
typename OBJ,
typename R,
typename T1>
521 template <
typename T,
typename OBJ,
typename R,
typename T1>
522 Callback<R,T1>
MakeCallback (R (T::*mem_ptr)(T1)
const, OBJ objPtr) {
523 return Callback<R,T1> (objPtr, mem_ptr);
533 template <
typename T,
typename OBJ,
typename R,
typename T1,
typename T2>
537 template <
typename T,
typename OBJ,
typename R,
typename T1,
typename T2>
538 Callback<R,T1,T2>
MakeCallback (R (T::*mem_ptr)(T1,T2)
const, OBJ objPtr) {
539 return Callback<R,T1,T2> (objPtr, mem_ptr);
549 template <
typename T,
typename OBJ,
typename R,
typename T1,
typename T2,
typename T3>
553 template <
typename T,
typename OBJ,
typename R,
typename T1,
typename T2,
typename T3>
554 Callback<R,T1,T2,T3>
MakeCallback (R (T::*mem_ptr)(T1,T2,T3)
const, OBJ objPtr) {
555 return Callback<R,T1,T2,T3> (objPtr, mem_ptr);
565 template <
typename T,
typename OBJ,
typename R,
typename T1,
typename T2,
typename T3,
typename T4>
569 template <
typename T,
typename OBJ,
typename R,
typename T1,
typename T2,
typename T3,
typename T4>
570 Callback<R,T1,T2,T3,T4>
MakeCallback (R (T::*mem_ptr)(T1,T2,T3,T4)
const, OBJ objPtr) {
571 return Callback<R,T1,T2,T3,T4> (objPtr, mem_ptr);
581 template <
typename T,
typename OBJ,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
582 Callback<R,T1,T2,T3,T4,T5> MakeCallback (R (T::*mem_ptr)(T1,T2,T3,T4,T5), OBJ objPtr) {
585 template <
typename T,
typename OBJ,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
586 Callback<R,T1,T2,T3,T4,T5>
MakeCallback (R (T::*mem_ptr)(T1,T2,T3,T4,T5)
const, OBJ objPtr) {
587 return Callback<R,T1,T2,T3,T4,T5> (objPtr, mem_ptr);
597 template <
typename T,
typename OBJ,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
598 Callback<R,T1,T2,T3,T4,T5,T6> MakeCallback (R (T::*mem_ptr)(T1,T2,T3,T4,T5,T6), OBJ objPtr) {
601 template <
typename T,
typename OBJ,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
602 Callback<R,T1,T2,T3,T4,T5,T6>
MakeCallback (R (T::*mem_ptr)(T1,T2,T3,T4,T5,T6)
const, OBJ objPtr) {
603 return Callback<R,T1,T2,T3,T4,T5,T6> (objPtr, mem_ptr);
614 template <
typename T,
typename OBJ,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
615 Callback<R,T1,T2,T3,T4,T5,T6,T7> MakeCallback (R (T::*mem_ptr)(T1,T2,T3,T4,T5,T6,T7), OBJ objPtr) {
618 template <
typename T,
typename OBJ,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
619 Callback<R,T1,T2,T3,T4,T5,T6,T7>
MakeCallback (R (T::*mem_ptr)(T1,T2,T3,T4,T5,T6,T7)
const, OBJ objPtr) {
620 return Callback<R,T1,T2,T3,T4,T5,T6,T7> (objPtr, mem_ptr);
632 template <
typename T,
typename OBJ,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
633 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) {
636 template <
typename T,
typename OBJ,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
637 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) {
638 return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> (objPtr, mem_ptr);
649 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>
650 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) {
651 return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (objPtr, mem_ptr);
653 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>
654 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) {
655 return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (objPtr, mem_ptr);
665 template <
typename R>
676 template <
typename R,
typename T1>
687 template <
typename R,
typename T1,
typename T2>
698 template <
typename R,
typename T1,
typename T2,
typename T3>
709 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4>
720 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
731 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
732 Callback<R,T1,T2,T3,T4,T5,T6> MakeCallback (R (*fnPtr)(T1,T2,T3,T4,T5,T6)) {
743 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
744 Callback<R,T1,T2,T3,T4,T5,T6,T7> MakeCallback (R (*fnPtr)(T1,T2,T3,T4,T5,T6,T7)) {
755 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
756 Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> MakeCallback (R (*fnPtr)(T1,T2,T3,T4,T5,T6,T7,T8)) {
757 return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> (fnPtr,
true,
true);
767 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9>
768 Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> MakeCallback (R (*fnPtr)(T1,T2,T3,T4,T5,T6,T7,T8,T9)) {
769 return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> (fnPtr,
true,
true);
780 template <
typename R>
791 template <
typename R,
typename T1>
793 return Callback<R,T1> ();
802 template <
typename R,
typename T1,
typename T2>
804 return Callback<R,T1,T2> ();
813 template <
typename R,
typename T1,
typename T2,
typename T3>
815 return Callback<R,T1,T2,T3> ();
824 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4>
826 return Callback<R,T1,T2,T3,T4> ();
835 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
837 return Callback<R,T1,T2,T3,T4,T5> ();
846 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
848 return Callback<R,T1,T2,T3,T4,T5,T6> ();
858 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
860 return Callback<R,T1,T2,T3,T4,T5,T6,T7> ();
870 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
872 return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> ();
882 template <
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9>
884 return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> ();
894 template <
typename R,
typename TX,
typename ARG>
895 Callback<R> MakeBoundCallback (R (*fnPtr)(TX), ARG a) {
896 Ptr<CallbackImpl<R,empty,empty,empty,empty,empty,empty,empty,empty,empty> > impl =
897 Create<BoundFunctorCallbackImpl<R (*)(TX),R,TX,empty,empty,empty,empty,empty,empty,empty,empty> >(fnPtr, a);
898 return Callback<R> (impl);
901 template <
typename R,
typename TX,
typename ARG,
903 Callback<R,T1> MakeBoundCallback (R (*fnPtr)(TX,T1), ARG a) {
904 Ptr<CallbackImpl<R,T1,empty,empty,empty,empty,empty,empty,empty,empty> > impl =
905 Create<BoundFunctorCallbackImpl<R (*)(TX,T1),R,TX,T1,empty,empty,empty,empty,empty,empty,empty> > (fnPtr, a);
906 return Callback<R,T1> (impl);
908 template <
typename R,
typename TX,
typename ARG,
909 typename T1,
typename T2>
910 Callback<R,T1,T2> MakeBoundCallback (R (*fnPtr)(TX,T1,T2), ARG a) {
911 Ptr<CallbackImpl<R,T1,T2,empty,empty,empty,empty,empty,empty,empty> > impl =
912 Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2),R,TX,T1,T2,empty,empty,empty,empty,empty,empty> > (fnPtr, a);
913 return Callback<R,T1,T2> (impl);
915 template <
typename R,
typename TX,
typename ARG,
916 typename T1,
typename T2,
typename T3>
917 Callback<R,T1,T2,T3> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3), ARG a) {
918 Ptr<CallbackImpl<R,T1,T2,T3,empty,empty,empty,empty,empty,empty> > impl =
919 Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3),R,TX,T1,T2,T3,empty,empty,empty,empty,empty> > (fnPtr, a);
920 return Callback<R,T1,T2,T3> (impl);
922 template <
typename R,
typename TX,
typename ARG,
923 typename T1,
typename T2,
typename T3,
typename T4>
924 Callback<R,T1,T2,T3,T4> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3,T4), ARG a) {
925 Ptr<CallbackImpl<R,T1,T2,T3,T4,empty,empty,empty,empty,empty> > impl =
926 Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3,T4),R,TX,T1,T2,T3,T4,empty,empty,empty,empty> > (fnPtr, a);
927 return Callback<R,T1,T2,T3,T4> (impl);
929 template <
typename R,
typename TX,
typename ARG,
930 typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
931 Callback<R,T1,T2,T3,T4,T5> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3,T4,T5), ARG a) {
932 Ptr<CallbackImpl<R,T1,T2,T3,T4,T5,empty,empty,empty,empty> > impl =
933 Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3,T4,T5),R,TX,T1,T2,T3,T4,T5,empty,empty,empty> > (fnPtr, a);
934 return Callback<R,T1,T2,T3,T4,T5> (impl);
936 template <
typename R,
typename TX,
typename ARG,
937 typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
938 Callback<R,T1,T2,T3,T4,T5,T6> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3,T4,T5,T6), ARG a) {
939 Ptr<CallbackImpl<R,T1,T2,T3,T4,T5,T6,empty,empty,empty> > impl =
940 Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3,T4,T5,T6),R,TX,T1,T2,T3,T4,T5,T6,empty,empty> > (fnPtr, a);
941 return Callback<R,T1,T2,T3,T4,T5,T6> (impl);
943 template <
typename R,
typename TX,
typename ARG,
944 typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
945 Callback<R,T1,T2,T3,T4,T5,T6,T7> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3,T4,T5,T6,T7), ARG a) {
946 Ptr<CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,empty,empty> > impl =
947 Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3,T4,T5,T6,T7),R,TX,T1,T2,T3,T4,T5,T6,T7,empty> > (fnPtr, a);
948 return Callback<R,T1,T2,T3,T4,T5,T6,T7> (impl);
950 template <
typename R,
typename TX,
typename ARG,
951 typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
952 Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> MakeBoundCallback (R (*fnPtr)(TX,T1,T2,T3,T4,T5,T6,T7,T8), ARG a) {
953 Ptr<CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,empty> > impl =
954 Create<BoundFunctorCallbackImpl<R (*)(TX,T1,T2,T3,T4,T5,T6,T7,T8),R,TX,T1,T2,T3,T4,T5,T6,T7,T8> > (fnPtr, a);
955 return Callback<R,T1,T2,T3,T4,T5,T6,T7,T8> (impl);
968 template <
typename T>
969 bool GetAccessor (T &value)
const;
984 template <
typename T>
985 bool CallbackValue::GetAccessor (T &value)
const
987 if (value.CheckType (m_value))
989 value.Assign (m_value);
smart pointer class similar to boost::intrusive_ptr
Hold a value for an Attribute.
#define NS_FATAL_ERROR(msg)
fatal error handling
make Callback use a separate empty type
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
Callback< R > MakeNullCallback(void)
#define ATTRIBUTE_CHECKER_DEFINE(type)
virtual bool DeserializeFromString(std::string value, Ptr< const AttributeChecker > checker)
virtual std::string SerializeToString(Ptr< const AttributeChecker > checker) const
#define ATTRIBUTE_ACCESSOR_DEFINE(type)
A template-based reference counting class.
virtual Ptr< AttributeValue > Copy(void) const