summaryrefslogtreecommitdiff
path: root/libs/sigc++2/sigc++/adaptors/adaptor_trait.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/sigc++2/sigc++/adaptors/adaptor_trait.h')
-rw-r--r--libs/sigc++2/sigc++/adaptors/adaptor_trait.h362
1 files changed, 362 insertions, 0 deletions
diff --git a/libs/sigc++2/sigc++/adaptors/adaptor_trait.h b/libs/sigc++2/sigc++/adaptors/adaptor_trait.h
new file mode 100644
index 0000000000..8b618d7450
--- /dev/null
+++ b/libs/sigc++2/sigc++/adaptors/adaptor_trait.h
@@ -0,0 +1,362 @@
+// -*- c++ -*-
+/* Do not edit! -- generated file */
+#ifndef _SIGC_ADAPTORS_MACROS_ADAPTOR_TRAITHM4_
+#define _SIGC_ADAPTORS_MACROS_ADAPTOR_TRAITHM4_
+#include <sigc++config.h> //To get SIGC_TEMPLATE_KEYWORD_OPERATOR_OVERLOAD
+#include <sigc++/visit_each.h>
+#include <sigc++/functors/functor_trait.h>
+#include <sigc++/functors/ptr_fun.h>
+#include <sigc++/functors/mem_fun.h>
+#include <sigc++/adaptors/deduce_result_type.h>
+
+namespace sigc {
+
+// Call either operator()<>() or sun_forte_workaround<>(),
+// depending on the compiler:
+#ifdef SIGC_GCC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
+ #define SIGC_WORKAROUND_OPERATOR_PARENTHESES template operator()
+ #define SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
+#else
+ #ifdef SIGC_MSVC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
+ #define SIGC_WORKAROUND_OPERATOR_PARENTHESES operator()
+ #define SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
+ #else
+ #define SIGC_WORKAROUND_OPERATOR_PARENTHESES sun_forte_workaround
+ #endif
+#endif
+
+
+template <class T_functor> struct adapts;
+
+/** @defgroup adaptors Adaptors
+ * Adaptors are functors that alter the signature of a functor's
+ * operator()().
+ *
+ * The adaptor types libsigc++ provides
+ * are created with bind(), bind_return(), hide(), hide_return(),
+ * retype_return(), retype(), compose(), exception_catch() and group().
+ *
+ * You can easily derive your own adaptor type from sigc::adapts.
+ */
+
+/** Converts an arbitrary functor into an adaptor type.
+ * All adaptor tyes in libsigc++ are unnumbered and have
+ * a <tt>template operator()</tt> member of every argument count
+ * they support. These functions in turn invoke a stored adaptor's
+ * <tt>template operator()</tt> processing the arguments and return
+ * value in a characteristic manner. Explicit function template
+ * instantiation is used to pass type hints thus saving copy costs.
+ *
+ * adaptor_functor is a glue between adaptors and arbitrary functors
+ * that just passes on the arguments. You won't use this type directly.
+ *
+ * The template argument @e T_functor determines the type of stored
+ * functor.
+ *
+ * @ingroup adaptors
+ */
+template <class T_functor>
+struct adaptor_functor : public adaptor_base
+{
+ template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void>
+ struct deduce_result_type
+ { typedef typename sigc::deduce_result_type<T_functor, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type type; };
+ typedef typename functor_trait<T_functor>::result_type result_type;
+
+ /** Invokes the wrapped functor passing on the arguments.
+ * @return The return value of the functor invocation.
+ */
+ result_type
+ operator()() const;
+
+ #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
+ result_type sun_forte_workaround() const
+ { return operator(); }
+ #endif
+
+ /** Invokes the wrapped functor passing on the arguments.
+ * @param _A_arg1 Argument to be passed on to the functor.
+ * @return The return value of the functor invocation.
+ */
+ template <class T_arg1>
+ typename deduce_result_type<T_arg1>::type
+ operator()(T_arg1 _A_arg1) const
+ { return functor_(_A_arg1); }
+
+ #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
+ template <class T_arg1>
+ typename deduce_result_type<T_arg1>::type
+ sun_forte_workaround(T_arg1 _A_arg1) const
+ { //Just calling operator() tries to copy the argument:
+ return functor_(_A_arg1);
+ }
+ #endif
+
+ /** Invokes the wrapped functor passing on the arguments.
+ * @param _A_arg1 Argument to be passed on to the functor.
+ * @param _A_arg2 Argument to be passed on to the functor.
+ * @return The return value of the functor invocation.
+ */
+ template <class T_arg1,class T_arg2>
+ typename deduce_result_type<T_arg1,T_arg2>::type
+ operator()(T_arg1 _A_arg1,T_arg2 _A_arg2) const
+ { return functor_(_A_arg1,_A_arg2); }
+
+ #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
+ template <class T_arg1,class T_arg2>
+ typename deduce_result_type<T_arg1,T_arg2>::type
+ sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2) const
+ { //Just calling operator() tries to copy the argument:
+ return functor_(_A_arg1,_A_arg2);
+ }
+ #endif
+
+ /** Invokes the wrapped functor passing on the arguments.
+ * @param _A_arg1 Argument to be passed on to the functor.
+ * @param _A_arg2 Argument to be passed on to the functor.
+ * @param _A_arg3 Argument to be passed on to the functor.
+ * @return The return value of the functor invocation.
+ */
+ template <class T_arg1,class T_arg2,class T_arg3>
+ typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type
+ operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3) const
+ { return functor_(_A_arg1,_A_arg2,_A_arg3); }
+
+ #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
+ template <class T_arg1,class T_arg2,class T_arg3>
+ typename deduce_result_type<T_arg1,T_arg2,T_arg3>::type
+ sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3) const
+ { //Just calling operator() tries to copy the argument:
+ return functor_(_A_arg1,_A_arg2,_A_arg3);
+ }
+ #endif
+
+ /** Invokes the wrapped functor passing on the arguments.
+ * @param _A_arg1 Argument to be passed on to the functor.
+ * @param _A_arg2 Argument to be passed on to the functor.
+ * @param _A_arg3 Argument to be passed on to the functor.
+ * @param _A_arg4 Argument to be passed on to the functor.
+ * @return The return value of the functor invocation.
+ */
+ template <class T_arg1,class T_arg2,class T_arg3,class T_arg4>
+ typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type
+ operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4) const
+ { return functor_(_A_arg1,_A_arg2,_A_arg3,_A_arg4); }
+
+ #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
+ template <class T_arg1,class T_arg2,class T_arg3,class T_arg4>
+ typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4>::type
+ sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4) const
+ { //Just calling operator() tries to copy the argument:
+ return functor_(_A_arg1,_A_arg2,_A_arg3,_A_arg4);
+ }
+ #endif
+
+ /** Invokes the wrapped functor passing on the arguments.
+ * @param _A_arg1 Argument to be passed on to the functor.
+ * @param _A_arg2 Argument to be passed on to the functor.
+ * @param _A_arg3 Argument to be passed on to the functor.
+ * @param _A_arg4 Argument to be passed on to the functor.
+ * @param _A_arg5 Argument to be passed on to the functor.
+ * @return The return value of the functor invocation.
+ */
+ template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
+ typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type
+ operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5) const
+ { return functor_(_A_arg1,_A_arg2,_A_arg3,_A_arg4,_A_arg5); }
+
+ #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
+ template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
+ typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>::type
+ sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5) const
+ { //Just calling operator() tries to copy the argument:
+ return functor_(_A_arg1,_A_arg2,_A_arg3,_A_arg4,_A_arg5);
+ }
+ #endif
+
+ /** Invokes the wrapped functor passing on the arguments.
+ * @param _A_arg1 Argument to be passed on to the functor.
+ * @param _A_arg2 Argument to be passed on to the functor.
+ * @param _A_arg3 Argument to be passed on to the functor.
+ * @param _A_arg4 Argument to be passed on to the functor.
+ * @param _A_arg5 Argument to be passed on to the functor.
+ * @param _A_arg6 Argument to be passed on to the functor.
+ * @return The return value of the functor invocation.
+ */
+ template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
+ typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type
+ operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5,T_arg6 _A_arg6) const
+ { return functor_(_A_arg1,_A_arg2,_A_arg3,_A_arg4,_A_arg5,_A_arg6); }
+
+ #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
+ template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
+ typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>::type
+ sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5,T_arg6 _A_arg6) const
+ { //Just calling operator() tries to copy the argument:
+ return functor_(_A_arg1,_A_arg2,_A_arg3,_A_arg4,_A_arg5,_A_arg6);
+ }
+ #endif
+
+ /** Invokes the wrapped functor passing on the arguments.
+ * @param _A_arg1 Argument to be passed on to the functor.
+ * @param _A_arg2 Argument to be passed on to the functor.
+ * @param _A_arg3 Argument to be passed on to the functor.
+ * @param _A_arg4 Argument to be passed on to the functor.
+ * @param _A_arg5 Argument to be passed on to the functor.
+ * @param _A_arg6 Argument to be passed on to the functor.
+ * @param _A_arg7 Argument to be passed on to the functor.
+ * @return The return value of the functor invocation.
+ */
+ template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7>
+ typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type
+ operator()(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5,T_arg6 _A_arg6,T_arg7 _A_arg7) const
+ { return functor_(_A_arg1,_A_arg2,_A_arg3,_A_arg4,_A_arg5,_A_arg6,_A_arg7); }
+
+ #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
+ template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7>
+ typename deduce_result_type<T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>::type
+ sun_forte_workaround(T_arg1 _A_arg1,T_arg2 _A_arg2,T_arg3 _A_arg3,T_arg4 _A_arg4,T_arg5 _A_arg5,T_arg6 _A_arg6,T_arg7 _A_arg7) const
+ { //Just calling operator() tries to copy the argument:
+ return functor_(_A_arg1,_A_arg2,_A_arg3,_A_arg4,_A_arg5,_A_arg6,_A_arg7);
+ }
+ #endif
+
+ /// Constructs an invalid functor.
+ adaptor_functor()
+ {}
+
+ /** Constructs an adaptor_functor object that wraps the passed functor.
+ * @param _A_functor Functor to invoke from operator()().
+ */
+ explicit adaptor_functor(const T_functor& _A_functor)
+ : functor_(_A_functor)
+ {}
+
+ /** Constructs an adaptor_functor object that wraps the passed (member)
+ * function pointer.
+ * @param _A_type Pointer to function or class method to invoke from operator()().
+ */
+ template <class T_type>
+ explicit adaptor_functor(const T_type& _A_type)
+ : functor_(_A_type)
+ {}
+
+ /// Functor that is invoked from operator()().
+ mutable T_functor functor_;
+};
+
+template <class T_functor>
+typename adaptor_functor<T_functor>::result_type
+adaptor_functor<T_functor>::operator()() const
+ { return functor_(); }
+
+
+/** Performs a functor on each of the targets of a functor.
+ * The function overload for sigc::adaptor_functor performs a functor
+ * on the functor stored in the sigc::adaptor_functor object.
+ *
+ * @ingroup adaptors
+ */
+template <class T_action, class T_functor>
+void visit_each(const T_action& _A_action,
+ const adaptor_functor<T_functor>& _A_target)
+{
+ visit_each(_A_action, _A_target.functor_);
+}
+
+
+/** Trait that specifies what is the adaptor version of a functor type.
+ * Template specializations for sigc::adaptor_base derived functors,
+ * for function pointers and for class methods are provided.
+ *
+ * The template argument @e T_functor is the functor type to convert.
+ * @e I_isadaptor indicates whether @e T_functor inherits from sigc::adaptor_base.
+ *
+ * @ingroup adaptors
+ */
+template <class T_functor, bool I_isadaptor = is_base_and_derived<adaptor_base, T_functor>::value> struct adaptor_trait;
+
+/** Trait that specifies what is the adaptor version of a functor type.
+ * This template specialization is used for types that inherit from adaptor_base.
+ * adaptor_type is equal to @p T_functor in this case.
+ */
+template <class T_functor>
+struct adaptor_trait<T_functor, true>
+{
+ typedef typename T_functor::result_type result_type;
+ typedef T_functor functor_type;
+ typedef T_functor adaptor_type;
+};
+
+/** Trait that specifies what is the adaptor version of a functor type.
+ * This template specialization is used for arbitrary functors,
+ * for function pointers and for class methods are provided.
+ * The latter are converted into @p pointer_functor or @p mem_functor types.
+ * adaptor_type is equal to @p adaptor_functor<functor_type>.
+ */
+template <class T_functor>
+struct adaptor_trait<T_functor, false>
+{
+ typedef typename functor_trait<T_functor>::result_type result_type;
+ typedef typename functor_trait<T_functor>::functor_type functor_type;
+ typedef adaptor_functor<functor_type> adaptor_type;
+};
+
+
+/** Base type for adaptors.
+ * adapts wraps adaptors, functors, function pointers and class methods.
+ * It contains a single member functor which is always a sigc::adaptor_base.
+ * The typedef adaptor_type defines the exact type that is used
+ * to store the adaptor, functor, function pointer or class method passed
+ * into the constructor. It differs from @e T_functor unless @e T_functor
+ * inherits from sigc::adaptor_base.
+ *
+ * @par Example of a simple adaptor:
+ * @code
+ * template <T_functor>
+ * struct my_adpator : public sigc::adapts<T_functor>
+ * {
+ * template <class T_arg1=void, class T_arg2=void>
+ * struct deduce_result_type
+ * { typedef typename sigc::deduce_result_type<T_functor, T_arg1, T_arg2>::type type; };
+ * typedef typename sigc::functor_trait<T_functor>::result_type result_type;
+ *
+ * result_type
+ * operator()() const;
+ *
+ * template <class T_arg1>
+ * typename deduce_result_type<T_arg1>::type
+ * operator()(T_arg1 _A_arg1) const;
+ *
+ * template <class T_arg1, class T_arg2>
+ * typename deduce_result_type<T_arg1, T_arg2>::type
+ * operator()(T_arg1 _A_arg1, class T_arg2) const;
+ *
+ * explicit adaptor_functor(const T_functor& _A_functor) // Constructs a my_functor object that wraps the passed functor.
+ * : sigc::adapts<T_functor>(_A_functor) {}
+ *
+ * mutable T_functor functor_; // Functor that is invoked from operator()().
+ * };
+ * @endcode
+ *
+ * @ingroup adaptors
+ */
+template <class T_functor>
+struct adapts : public adaptor_base
+{
+ typedef typename adaptor_trait<T_functor>::result_type result_type;
+ typedef typename adaptor_trait<T_functor>::adaptor_type adaptor_type;
+
+ /** Constructs an adaptor that wraps the passed functor.
+ * @param _A_functor Functor to invoke from operator()().
+ */
+ explicit adapts(const T_functor& _A_functor)
+ : functor_(_A_functor)
+ {}
+
+ /// Adaptor that is invoked from operator()().
+ mutable adaptor_type functor_;
+};
+
+} /* namespace sigc */
+#endif /* _SIGC_ADAPTORS_MACROS_ADAPTOR_TRAITHM4_ */