summaryrefslogtreecommitdiffstats
path: root/ml/dlib/dlib/member_function_pointer/member_function_pointer_kernel_abstract.h
diff options
context:
space:
mode:
Diffstat (limited to 'ml/dlib/dlib/member_function_pointer/member_function_pointer_kernel_abstract.h')
-rw-r--r--ml/dlib/dlib/member_function_pointer/member_function_pointer_kernel_abstract.h483
1 files changed, 483 insertions, 0 deletions
diff --git a/ml/dlib/dlib/member_function_pointer/member_function_pointer_kernel_abstract.h b/ml/dlib/dlib/member_function_pointer/member_function_pointer_kernel_abstract.h
new file mode 100644
index 000000000..e152972ee
--- /dev/null
+++ b/ml/dlib/dlib/member_function_pointer/member_function_pointer_kernel_abstract.h
@@ -0,0 +1,483 @@
+// Copyright (C) 2005 Davis E. King (davis@dlib.net)
+// License: Boost Software License See LICENSE.txt for the full license.
+#undef DLIB_MEMBER_FUNCTION_POINTER_KERNEl_ABSTRACT_
+#ifdef DLIB_MEMBER_FUNCTION_POINTER_KERNEl_ABSTRACT_
+
+namespace dlib
+{
+
+// ----------------------------------------------------------------------------------------
+
+ template <
+ typename PARAM1 = void,
+ typename PARAM2 = void,
+ typename PARAM3 = void,
+ typename PARAM4 = void
+ >
+ class member_function_pointer;
+
+// ----------------------------------------------------------------------------------------
+
+ template <>
+ class member_function_pointer<void,void,void,void>
+ {
+ /*!
+ INITIAL VALUE
+ is_set() == false
+
+ WHAT THIS OBJECT REPRESENTS
+ This object represents a member function pointer. It is useful because
+ instances of this object can be created without needing to know the type
+ of object whose member function we will be calling.
+
+ There are five template specializations of this object. The first
+ represents a pointer to a member function taking no parameters, the
+ second represents a pointer to a member function taking one parameter,
+ the third to one taking two parameters, and so on.
+
+ You specify the parameters to your member function pointer by filling in
+ the PARAM template parameters. For example:
+
+ To use a pointer to a function with no parameters you would say:
+ member_function_pointer<> my_pointer;
+ To use a pointer to a function that takes a single int you would say:
+ member_function_pointer<int> my_pointer;
+ To use a pointer to a function that takes an int and then a reference
+ to a string you would say:
+ member_function_pointer<int,string&> my_pointer;
+
+ Also note that the formal comments are only present for the first
+ template specialization. They are all exactly the same except for the
+ number of parameters each takes in its member function pointer.
+ !*/
+
+ public:
+ typedef void param1_type;
+ typedef void param2_type;
+ typedef void param3_type;
+ typedef void param4_type;
+
+ member_function_pointer (
+ );
+ /*!
+ ensures
+ - #*this is properly initialized
+ !*/
+
+ member_function_pointer(
+ const member_function_pointer& item
+ );
+ /*!
+ ensures
+ - *this == item
+ !*/
+
+ ~member_function_pointer (
+ );
+ /*!
+ ensures
+ - any resources associated with *this have been released
+ !*/
+
+ member_function_pointer& operator=(
+ const member_function_pointer& item
+ );
+ /*!
+ ensures
+ - *this == item
+ !*/
+
+ bool operator == (
+ const member_function_pointer& item
+ ) const;
+ /*!
+ ensures
+ - if (is_set() == false && item.is_set() == false) then
+ - returns true
+ - else if (both *this and item point to the same member function
+ in the same object instance) then
+ - returns true
+ - else
+ - returns false
+ !*/
+
+ bool operator != (
+ const member_function_pointer& item
+ ) const;
+ /*!
+ ensures
+ - returns !(*this == item)
+ !*/
+
+ void clear(
+ );
+ /*!
+ ensures
+ - #*this has its initial value
+ !*/
+
+ bool is_set (
+ ) const;
+ /*!
+ ensures
+ - if (this->set() has been called) then
+ - returns true
+ - else
+ - returns false
+ !*/
+
+ template <
+ typename T
+ >
+ void set (
+ T& object,
+ void (T::*cb)()
+ );
+ /*!
+ requires
+ - cb == a valid member function pointer for class T
+ ensures
+ - #is_set() == true
+ - calls to this->operator() will call (object.*cb)()
+ !*/
+
+ template <
+ typename T
+ >
+ void set (
+ const T& object,
+ void (T::*cb)()const
+ );
+ /*!
+ requires
+ - cb == a valid member function pointer for class T
+ ensures
+ - #is_set() == true
+ - calls to this->operator() will call (object.*cb)()
+ !*/
+
+ operator some_undefined_pointer_type (
+ ) const;
+ /*!
+ ensures
+ - if (is_set()) then
+ - returns a non 0 value
+ - else
+ - returns a 0 value
+ !*/
+
+ bool operator! (
+ ) const;
+ /*!
+ ensures
+ - returns !is_set()
+ !*/
+
+ void operator () (
+ ) const;
+ /*!
+ requires
+ - is_set() == true
+ ensures
+ - calls the member function on the object specified by the last
+ call to this->set()
+ throws
+ - any exception thrown by the member function specified by
+ the previous call to this->set().
+ If any of these exceptions are thrown then the call to this
+ function will have no effect on *this.
+ !*/
+
+ void swap (
+ member_function_pointer& item
+ );
+ /*!
+ ensures
+ - swaps *this and item
+ !*/
+
+ };
+
+// ----------------------------------------------------------------------------------------
+
+ template <
+ typename PARAM1
+ >
+ class member_function_pointer<PARAM1,void,void,void>
+ {
+ public:
+ typedef PARAM1 param1_type;
+ typedef void param2_type;
+ typedef void param3_type;
+ typedef void param4_type;
+
+ member_function_pointer ();
+
+ member_function_pointer(
+ const member_function_pointer& item
+ );
+
+ ~member_function_pointer (
+ );
+
+ member_function_pointer& operator=(
+ const member_function_pointer& item
+ );
+
+ bool operator == (
+ const member_function_pointer& item
+ ) const;
+
+ bool operator != (
+ const member_function_pointer& item
+ ) const;
+
+ void clear();
+
+ bool is_set () const;
+
+ template <typename T>
+ void set (
+ T& object,
+ void (T::*cb)(PARAM1)
+ );
+
+ template <typename T>
+ void set (
+ const T& object,
+ void (T::*cb)(PARAM1)const
+ );
+
+ operator some_undefined_pointer_type (
+ ) const;
+
+ bool operator! (
+ ) const;
+
+ void operator () (
+ PARAM1 param1
+ ) const;
+
+ void swap (
+ member_function_pointer& item
+ );
+
+ };
+
+// ----------------------------------------------------------------------------------------
+
+ template <
+ typename PARAM1,
+ typename PARAM2
+ >
+ class member_function_pointer<PARAM1,PARAM2,void,void>
+ {
+ public:
+ typedef PARAM1 param1_type;
+ typedef PARAM2 param2_type;
+ typedef void param3_type;
+ typedef void param4_type;
+
+ member_function_pointer ();
+
+ member_function_pointer(
+ const member_function_pointer& item
+ );
+
+ ~member_function_pointer (
+ );
+
+ member_function_pointer& operator=(
+ const member_function_pointer& item
+ );
+
+ bool operator == (
+ const member_function_pointer& item
+ ) const;
+
+ bool operator != (
+ const member_function_pointer& item
+ ) const;
+
+ void clear();
+
+ bool is_set () const;
+
+ template <typename T>
+ void set (
+ T& object,
+ void (T::*cb)(PARAM1,PARAM2)
+ );
+
+ template <typename T>
+ void set (
+ const T& object,
+ void (T::*cb)(PARAM1,PARAM2)const
+ );
+
+ operator some_undefined_pointer_type (
+ ) const;
+
+ bool operator! (
+ ) const;
+
+ void operator () (
+ PARAM1 param1,
+ PARAM2 param2
+ ) const;
+
+ void swap (
+ member_function_pointer& item
+ );
+
+ };
+
+// ----------------------------------------------------------------------------------------
+
+ template <
+ typename PARAM1,
+ typename PARAM2,
+ typename PARAM3
+ >
+ class member_function_pointer<PARAM1,PARAM2,PARAM3,void>
+ {
+ public:
+ typedef PARAM1 param1_type;
+ typedef PARAM2 param2_type;
+ typedef PARAM3 param3_type;
+ typedef void param4_type;
+
+ member_function_pointer ();
+
+ member_function_pointer(
+ const member_function_pointer& item
+ );
+
+ ~member_function_pointer (
+ );
+
+ member_function_pointer& operator=(
+ const member_function_pointer& item
+ );
+
+ bool operator == (
+ const member_function_pointer& item
+ ) const;
+
+ bool operator != (
+ const member_function_pointer& item
+ ) const;
+
+ void clear();
+
+ bool is_set () const;
+
+ template <typename T>
+ void set (
+ T& object,
+ void (T::*cb)(PARAM1,PARAM2,PARAM3)
+ );
+
+ template <typename T>
+ void set (
+ const T& object,
+ void (T::*cb)(PARAM1,PARAM2,PARAM3)const
+ );
+
+ operator some_undefined_pointer_type (
+ ) const;
+
+ bool operator! (
+ ) const;
+
+ void operator () (
+ PARAM1 param1,
+ PARAM2 param2,
+ PARAM2 param3
+ ) const;
+
+ void swap (
+ member_function_pointer& item
+ );
+
+ };
+
+// ----------------------------------------------------------------------------------------
+
+ template <
+ typename PARAM1,
+ typename PARAM2,
+ typename PARAM3,
+ typename PARAM4
+ >
+ class member_function_pointer
+ {
+ public:
+ typedef PARAM1 param1_type;
+ typedef PARAM2 param2_type;
+ typedef PARAM3 param3_type;
+ typedef PARAM4 param4_type;
+
+ member_function_pointer ();
+
+ member_function_pointer(
+ const member_function_pointer& item
+ );
+
+ ~member_function_pointer (
+ );
+
+ member_function_pointer& operator=(
+ const member_function_pointer& item
+ );
+
+ bool operator == (
+ const member_function_pointer& item
+ ) const;
+
+ bool operator != (
+ const member_function_pointer& item
+ ) const;
+
+ void clear();
+
+ bool is_set () const;
+
+ template <typename T>
+ void set (
+ T& object,
+ void (T::*cb)(PARAM1,PARAM2,PARAM3,PARAM4)
+ );
+
+ template <typename T>
+ void set (
+ const T& object,
+ void (T::*cb)(PARAM1,PARAM2,PARAM3,PARAM4)const
+ );
+
+ operator some_undefined_pointer_type (
+ ) const;
+
+ bool operator! (
+ ) const;
+
+ void operator () (
+ PARAM1 param1,
+ PARAM2 param2,
+ PARAM2 param3,
+ PARAM2 param4
+ ) const;
+
+ void swap (
+ member_function_pointer& item
+ );
+
+ };
+
+// ----------------------------------------------------------------------------------------
+
+
+}
+
+#endif // DLIB_MEMBER_FUNCTION_POINTER_KERNEl_ABSTRACT_
+