summaryrefslogtreecommitdiff
path: root/libs/sigc++2/sigc++/functors/functor_trait.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/sigc++2/sigc++/functors/functor_trait.h')
-rw-r--r--libs/sigc++2/sigc++/functors/functor_trait.h307
1 files changed, 307 insertions, 0 deletions
diff --git a/libs/sigc++2/sigc++/functors/functor_trait.h b/libs/sigc++2/sigc++/functors/functor_trait.h
new file mode 100644
index 0000000000..656d010414
--- /dev/null
+++ b/libs/sigc++2/sigc++/functors/functor_trait.h
@@ -0,0 +1,307 @@
+// -*- c++ -*-
+/* Do not edit! -- generated file */
+/*
+ Trait functor_trait<functor>:
+
+ This trait allows the user to specific what is the return type
+ of any type. It has been overloaded to detect the return type and
+ the functor version of function pointers and class methods as well.
+
+ To populate the return type of user defined and third party functors
+ use the macro SIGC_FUNCTOR_TRAIT(T_functor,T_return) in
+ namespace sigc. Multi-type functors are only partly supported.
+ Try specifying the return type of the functor's operator()() overload.
+
+ Alternatively, you can derive your functors from functor_base and
+ place "typedef T_return result_type;" in the class definition.
+
+ Use SIGC_FUNCTORS_HAVE_RESULT_TYPE if you want sigc++ to assume that
+ result_type is defined in all user defined or 3rd-party functors
+ (except those you specify a return type explicitly with SIGC_FUNCTOR_TRAIT()).
+
+*/
+#ifndef _SIGC_FUNCTORS_MACROS_FUNCTOR_TRAITHM4_
+#define _SIGC_FUNCTORS_MACROS_FUNCTOR_TRAITHM4_
+#include <sigc++/type_traits.h>
+
+
+namespace sigc {
+
+/** nil struct type.
+ * The nil struct type is used as default template argument in the
+ * unnumbered sigc::signal and sigc::slot templates.
+ *
+ * @ingroup signal
+ * @ingroup slot
+ */
+struct nil;
+
+
+/** @defgroup functors Functors
+ * Functors are copyable types that define operator()().
+ *
+ * Types that define operator()() overloads with different return types are referred to
+ * as multi-type functors. Multi-type functors are only partly supported in libsigc++.
+ *
+ * Closures are functors that store all information needed to invoke a callback from operator()().
+ *
+ * Adaptors are functors that alter the signature of a functor's operator()().
+ *
+ * libsigc++ defines numerous functors, closures and adaptors.
+ * Since libsigc++ is a callback libaray, most functors are also closures.
+ * The documentation doesn't distinguish between functors and closures.
+ *
+ * The basic functor types libsigc++ provides are created with ptr_fun() and mem_fun()
+ * and can be converted into slots implicitly.
+ * The set of adaptors that ships with libsigc++ is documented in the equally named module.
+ */
+
+/** A hint to the compiler.
+ * All functors which define @p result_type should publically inherit from this hint.
+ *
+ * @ingroup functors
+ */
+struct functor_base {};
+
+
+template <class T_functor, bool I_derives_functor_base=is_base_and_derived<functor_base,T_functor>::value>
+struct functor_trait
+{
+ typedef void result_type;
+ typedef T_functor functor_type;
+};
+
+template <class T_functor>
+struct functor_trait<T_functor,true>
+{
+ typedef typename T_functor::result_type result_type;
+ typedef T_functor functor_type;
+};
+
+/** If you want to mix functors from a different library with libsigc++ and
+ * these functors define @p result_type simply use this macro inside namespace sigc like so:
+ * @code
+ * namespace sigc { SIGC_FUNCTORS_HAVE_RESULT_TYPE }
+ * @endcode
+ *
+ * @ingroup functors
+ */
+#define SIGC_FUNCTORS_HAVE_RESULT_TYPE \
+template <class T_functor> \
+struct functor_trait<T_functor,false> \
+{ \
+ typedef typename T_functor::result_type result_type; \
+ typedef T_functor functor_type; \
+};
+
+/** If you want to mix functors from a different library with libsigc++ and
+ * these functors don't define @p result_type use this macro inside namespace sigc
+ * to expose the return type of the functors like so:
+ * @code
+ * namespace sigc {
+ * SIGC_FUNCTOR_TRAIT(first_functor_type, return_type_of_first_functor_type)
+ * SIGC_FUNCTOR_TRAIT(second_functor_type, return_type_of_second_functor_type)
+ * ...
+ * }
+ * @endcode
+ *
+ * @ingroup functors
+ */
+#define SIGC_FUNCTOR_TRAIT(T_functor,T_return) \
+template <> \
+struct functor_trait<T_functor,false> \
+{ \
+ typedef T_return result_type; \
+ typedef T_functor functor_type; \
+};
+
+// detect the return type and the functor version of non-functor types.
+template <class T_return> class pointer_functor0;
+template <class T_return>
+struct functor_trait<T_return (*)(), false>
+{
+ typedef T_return result_type;
+ typedef pointer_functor0<T_return> functor_type;
+};
+
+template <class T_arg1, class T_return> class pointer_functor1;
+template <class T_arg1, class T_return>
+struct functor_trait<T_return (*)(T_arg1), false>
+{
+ typedef T_return result_type;
+ typedef pointer_functor1<T_arg1, T_return> functor_type;
+};
+
+template <class T_arg1,class T_arg2, class T_return> class pointer_functor2;
+template <class T_arg1,class T_arg2, class T_return>
+struct functor_trait<T_return (*)(T_arg1,T_arg2), false>
+{
+ typedef T_return result_type;
+ typedef pointer_functor2<T_arg1,T_arg2, T_return> functor_type;
+};
+
+template <class T_arg1,class T_arg2,class T_arg3, class T_return> class pointer_functor3;
+template <class T_arg1,class T_arg2,class T_arg3, class T_return>
+struct functor_trait<T_return (*)(T_arg1,T_arg2,T_arg3), false>
+{
+ typedef T_return result_type;
+ typedef pointer_functor3<T_arg1,T_arg2,T_arg3, T_return> functor_type;
+};
+
+template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return> class pointer_functor4;
+template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return>
+struct functor_trait<T_return (*)(T_arg1,T_arg2,T_arg3,T_arg4), false>
+{
+ typedef T_return result_type;
+ typedef pointer_functor4<T_arg1,T_arg2,T_arg3,T_arg4, T_return> functor_type;
+};
+
+template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return> class pointer_functor5;
+template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return>
+struct functor_trait<T_return (*)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5), false>
+{
+ typedef T_return result_type;
+ typedef pointer_functor5<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5, T_return> functor_type;
+};
+
+template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return> class pointer_functor6;
+template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return>
+struct functor_trait<T_return (*)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6), false>
+{
+ typedef T_return result_type;
+ typedef pointer_functor6<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6, T_return> functor_type;
+};
+
+template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return> class pointer_functor7;
+template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return>
+struct functor_trait<T_return (*)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7), false>
+{
+ typedef T_return result_type;
+ typedef pointer_functor7<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7, T_return> functor_type;
+};
+
+
+template <class T_return, class T_obj> class mem_functor0;
+template <class T_return, class T_obj> class const_mem_functor0;
+template <class T_return, class T_obj>
+struct functor_trait<T_return (T_obj::*)(), false>
+{
+ typedef T_return result_type;
+ typedef mem_functor0<T_return, T_obj> functor_type;
+};
+template <class T_return, class T_obj>
+struct functor_trait<T_return (T_obj::*)() const, false>
+{
+ typedef T_return result_type;
+ typedef const_mem_functor0<T_return, T_obj> functor_type;
+};
+
+template <class T_arg1, class T_return, class T_obj> class mem_functor1;
+template <class T_arg1, class T_return, class T_obj> class const_mem_functor1;
+template <class T_arg1, class T_return, class T_obj>
+struct functor_trait<T_return (T_obj::*)(T_arg1), false>
+{
+ typedef T_return result_type;
+ typedef mem_functor1<T_arg1, T_return, T_obj> functor_type;
+};
+template <class T_arg1, class T_return, class T_obj>
+struct functor_trait<T_return (T_obj::*)(T_arg1) const, false>
+{
+ typedef T_return result_type;
+ typedef const_mem_functor1<T_arg1, T_return, T_obj> functor_type;
+};
+
+template <class T_arg1,class T_arg2, class T_return, class T_obj> class mem_functor2;
+template <class T_arg1,class T_arg2, class T_return, class T_obj> class const_mem_functor2;
+template <class T_arg1,class T_arg2, class T_return, class T_obj>
+struct functor_trait<T_return (T_obj::*)(T_arg1,T_arg2), false>
+{
+ typedef T_return result_type;
+ typedef mem_functor2<T_arg1,T_arg2, T_return, T_obj> functor_type;
+};
+template <class T_arg1,class T_arg2, class T_return, class T_obj>
+struct functor_trait<T_return (T_obj::*)(T_arg1,T_arg2) const, false>
+{
+ typedef T_return result_type;
+ typedef const_mem_functor2<T_arg1,T_arg2, T_return, T_obj> functor_type;
+};
+
+template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj> class mem_functor3;
+template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj> class const_mem_functor3;
+template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj>
+struct functor_trait<T_return (T_obj::*)(T_arg1,T_arg2,T_arg3), false>
+{
+ typedef T_return result_type;
+ typedef mem_functor3<T_arg1,T_arg2,T_arg3, T_return, T_obj> functor_type;
+};
+template <class T_arg1,class T_arg2,class T_arg3, class T_return, class T_obj>
+struct functor_trait<T_return (T_obj::*)(T_arg1,T_arg2,T_arg3) const, false>
+{
+ typedef T_return result_type;
+ typedef const_mem_functor3<T_arg1,T_arg2,T_arg3, T_return, T_obj> functor_type;
+};
+
+template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj> class mem_functor4;
+template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj> class const_mem_functor4;
+template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj>
+struct functor_trait<T_return (T_obj::*)(T_arg1,T_arg2,T_arg3,T_arg4), false>
+{
+ typedef T_return result_type;
+ typedef mem_functor4<T_arg1,T_arg2,T_arg3,T_arg4, T_return, T_obj> functor_type;
+};
+template <class T_arg1,class T_arg2,class T_arg3,class T_arg4, class T_return, class T_obj>
+struct functor_trait<T_return (T_obj::*)(T_arg1,T_arg2,T_arg3,T_arg4) const, false>
+{
+ typedef T_return result_type;
+ typedef const_mem_functor4<T_arg1,T_arg2,T_arg3,T_arg4, T_return, T_obj> functor_type;
+};
+
+template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj> class mem_functor5;
+template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj> class const_mem_functor5;
+template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj>
+struct functor_trait<T_return (T_obj::*)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5), false>
+{
+ typedef T_return result_type;
+ typedef mem_functor5<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5, T_return, T_obj> functor_type;
+};
+template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5, class T_return, class T_obj>
+struct functor_trait<T_return (T_obj::*)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5) const, false>
+{
+ typedef T_return result_type;
+ typedef const_mem_functor5<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5, T_return, T_obj> functor_type;
+};
+
+template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj> class mem_functor6;
+template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj> class const_mem_functor6;
+template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj>
+struct functor_trait<T_return (T_obj::*)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6), false>
+{
+ typedef T_return result_type;
+ typedef mem_functor6<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6, T_return, T_obj> functor_type;
+};
+template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6, class T_return, class T_obj>
+struct functor_trait<T_return (T_obj::*)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6) const, false>
+{
+ typedef T_return result_type;
+ typedef const_mem_functor6<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6, T_return, T_obj> functor_type;
+};
+
+template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj> class mem_functor7;
+template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj> class const_mem_functor7;
+template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj>
+struct functor_trait<T_return (T_obj::*)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7), false>
+{
+ typedef T_return result_type;
+ typedef mem_functor7<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7, T_return, T_obj> functor_type;
+};
+template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7, class T_return, class T_obj>
+struct functor_trait<T_return (T_obj::*)(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) const, false>
+{
+ typedef T_return result_type;
+ typedef const_mem_functor7<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7, T_return, T_obj> functor_type;
+};
+
+
+
+} /* namespace sigc */
+#endif /* _SIGC_FUNCTORS_MACROS_FUNCTOR_TRAITHM4_ */