11027 lines
573 KiB
C++
11027 lines
573 KiB
C++
|
|
///////////////////////////////////////////
|
|
// helper templates for use with stl <functional>
|
|
// providing argument binding for more arities
|
|
// and proper const support
|
|
///////////////////////////////////////////
|
|
|
|
#pragma once
|
|
#pragma warning(disable:4181)
|
|
|
|
#include <functional>
|
|
|
|
///////////////////////////////////////////
|
|
// Types
|
|
///////////////////////////////////////////
|
|
|
|
// Type classes for arity 0
|
|
|
|
template<class R> class arity0_function {
|
|
public:
|
|
typedef R result_type;
|
|
};
|
|
|
|
// Template Class to define Object Type
|
|
template<class Object> class ObjectType {
|
|
public:
|
|
typedef Object object_type;
|
|
};
|
|
|
|
// template class for arity0 member function type
|
|
template<class Object, class R> class arity0_mf :
|
|
public ObjectType<Object> ,
|
|
public arity0_function<R> {
|
|
public:
|
|
typedef R (Object::*pmf0type)();
|
|
};
|
|
|
|
// template class for arity0 member function type
|
|
template<class Object, class R> class arity0_const_mf :
|
|
public ObjectType<Object> ,
|
|
public arity0_function<R> {
|
|
public:
|
|
typedef R (Object::*pmf0type)() const;
|
|
};
|
|
|
|
|
|
// Type classes for arity 1
|
|
|
|
// template class for arity1 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class R> class arity1_mf :
|
|
public ObjectType<Object> ,
|
|
public std::unary_function<A1,
|
|
R> {
|
|
public:
|
|
typedef R (Object::*pmf1type)(A1);
|
|
};
|
|
|
|
// template class for arity1 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class R> class arity1_const_mf :
|
|
public ObjectType<Object> ,
|
|
public std::unary_function<A1,
|
|
R> {
|
|
public:
|
|
typedef R (Object::*pmf1type)(A1) const;
|
|
};
|
|
|
|
|
|
// Type classes for arity 2
|
|
|
|
// template class for arity2 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class R> class arity2_mf :
|
|
public ObjectType<Object> ,
|
|
public std::binary_function<A1,
|
|
A2,
|
|
R> {
|
|
public:
|
|
typedef first_argument_type argument_type;
|
|
typedef R (Object::*pmf2type)(A1, A2);
|
|
};
|
|
|
|
// template class for arity2 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class R> class arity2_const_mf :
|
|
public ObjectType<Object> ,
|
|
public std::binary_function<A1,
|
|
A2,
|
|
R> {
|
|
public:
|
|
typedef first_argument_type argument_type;
|
|
typedef R (Object::*pmf2type)(A1, A2) const;
|
|
};
|
|
|
|
|
|
// Type classes for arity 3
|
|
|
|
template<class A1,
|
|
class A2,
|
|
class A3,
|
|
class R> class arity3_function :
|
|
public std::binary_function<A1,
|
|
A2,
|
|
R> {
|
|
public:typedef first_argument_type argument_type;
|
|
|
|
typedef A3 argument_3_type;
|
|
};
|
|
|
|
// template class for arity3 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class R> class arity3_mf :
|
|
public ObjectType<Object> ,
|
|
public arity3_function<A1,
|
|
A2,
|
|
A3,
|
|
R> {
|
|
public:
|
|
typedef R (Object::*pmf3type)(A1, A2, A3);
|
|
};
|
|
|
|
// template class for arity3 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class R> class arity3_const_mf :
|
|
public ObjectType<Object> ,
|
|
public arity3_function<A1,
|
|
A2,
|
|
A3,
|
|
R> {
|
|
public:
|
|
typedef R (Object::*pmf3type)(A1, A2, A3) const;
|
|
};
|
|
|
|
|
|
// Type classes for arity 4
|
|
|
|
template<class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class R> class arity4_function :
|
|
public arity3_function<A1,
|
|
A2,
|
|
A3,
|
|
R> {
|
|
public:
|
|
typedef A4 argument_4_type;
|
|
};
|
|
|
|
// template class for arity4 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class R> class arity4_mf :
|
|
public ObjectType<Object> ,
|
|
public arity4_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R> {
|
|
public:
|
|
typedef R (Object::*pmf4type)(A1, A2, A3, A4);
|
|
};
|
|
|
|
// template class for arity4 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class R> class arity4_const_mf :
|
|
public ObjectType<Object> ,
|
|
public arity4_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R> {
|
|
public:
|
|
typedef R (Object::*pmf4type)(A1, A2, A3, A4) const;
|
|
};
|
|
|
|
|
|
// Type classes for arity 5
|
|
|
|
template<class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class R> class arity5_function :
|
|
public arity4_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R> {
|
|
public:
|
|
typedef A5 argument_5_type;
|
|
};
|
|
|
|
// template class for arity5 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class R> class arity5_mf :
|
|
public ObjectType<Object> ,
|
|
public arity5_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R> {
|
|
public:
|
|
typedef R (Object::*pmf5type)(A1, A2, A3, A4, A5);
|
|
};
|
|
|
|
// template class for arity5 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class R> class arity5_const_mf :
|
|
public ObjectType<Object> ,
|
|
public arity5_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R> {
|
|
public:
|
|
typedef R (Object::*pmf5type)(A1, A2, A3, A4, A5) const;
|
|
};
|
|
|
|
|
|
// Type classes for arity 6
|
|
|
|
template<class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class R> class arity6_function :
|
|
public arity5_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R> {
|
|
public:
|
|
typedef A6 argument_6_type;
|
|
};
|
|
|
|
// template class for arity6 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class R> class arity6_mf :
|
|
public ObjectType<Object> ,
|
|
public arity6_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R> {
|
|
public:
|
|
typedef R (Object::*pmf6type)(A1, A2, A3, A4, A5, A6);
|
|
};
|
|
|
|
// template class for arity6 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class R> class arity6_const_mf :
|
|
public ObjectType<Object> ,
|
|
public arity6_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R> {
|
|
public:
|
|
typedef R (Object::*pmf6type)(A1, A2, A3, A4, A5, A6) const;
|
|
};
|
|
|
|
|
|
// Type classes for arity 7
|
|
|
|
template<class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class R> class arity7_function :
|
|
public arity6_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R> {
|
|
public:
|
|
typedef A7 argument_7_type;
|
|
};
|
|
|
|
// template class for arity7 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class R> class arity7_mf :
|
|
public ObjectType<Object> ,
|
|
public arity7_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
R> {
|
|
public:
|
|
typedef R (Object::*pmf7type)(A1, A2, A3, A4, A5, A6, A7);
|
|
};
|
|
|
|
// template class for arity7 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class R> class arity7_const_mf :
|
|
public ObjectType<Object> ,
|
|
public arity7_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
R> {
|
|
public:
|
|
typedef R (Object::*pmf7type)(A1, A2, A3, A4, A5, A6, A7) const;
|
|
};
|
|
|
|
|
|
// Type classes for arity 8
|
|
|
|
template<class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class R> class arity8_function :
|
|
public arity7_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
R> {
|
|
public:
|
|
typedef A8 argument_8_type;
|
|
};
|
|
|
|
// template class for arity8 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class R> class arity8_mf :
|
|
public ObjectType<Object> ,
|
|
public arity8_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
R> {
|
|
public:
|
|
typedef R (Object::*pmf8type)(A1, A2, A3, A4, A5, A6, A7, A8);
|
|
};
|
|
|
|
// template class for arity8 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class R> class arity8_const_mf :
|
|
public ObjectType<Object> ,
|
|
public arity8_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
R> {
|
|
public:
|
|
typedef R (Object::*pmf8type)(A1, A2, A3, A4, A5, A6, A7, A8) const;
|
|
};
|
|
|
|
|
|
// Type classes for arity 9
|
|
|
|
template<class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class R> class arity9_function :
|
|
public arity8_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
R> {
|
|
public:
|
|
typedef A9 argument_9_type;
|
|
};
|
|
|
|
// template class for arity9 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class R> class arity9_mf :
|
|
public ObjectType<Object> ,
|
|
public arity9_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
R> {
|
|
public:
|
|
typedef R (Object::*pmf9type)(A1, A2, A3, A4, A5, A6, A7, A8, A9);
|
|
};
|
|
|
|
// template class for arity9 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class R> class arity9_const_mf :
|
|
public ObjectType<Object> ,
|
|
public arity9_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
R> {
|
|
public:
|
|
typedef R (Object::*pmf9type)(A1, A2, A3, A4, A5, A6, A7, A8, A9) const;
|
|
};
|
|
|
|
|
|
// Type classes for arity 10
|
|
|
|
template<class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class R> class arity10_function :
|
|
public arity9_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
R> {
|
|
public:
|
|
typedef A10 argument_10_type;
|
|
};
|
|
|
|
// template class for arity10 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class R> class arity10_mf :
|
|
public ObjectType<Object> ,
|
|
public arity10_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
R> {
|
|
public:
|
|
typedef R (Object::*pmf10type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10);
|
|
};
|
|
|
|
// template class for arity10 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class R> class arity10_const_mf :
|
|
public ObjectType<Object> ,
|
|
public arity10_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
R> {
|
|
public:
|
|
typedef R (Object::*pmf10type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10) const;
|
|
};
|
|
|
|
|
|
// Type classes for arity 11
|
|
|
|
template<class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class R> class arity11_function :
|
|
public arity10_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
R> {
|
|
public:
|
|
typedef A11 argument_11_type;
|
|
};
|
|
|
|
// template class for arity11 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class R> class arity11_mf :
|
|
public ObjectType<Object> ,
|
|
public arity11_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
R> {
|
|
public:
|
|
typedef R (Object::*pmf11type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11);
|
|
};
|
|
|
|
// template class for arity11 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class R> class arity11_const_mf :
|
|
public ObjectType<Object> ,
|
|
public arity11_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
R> {
|
|
public:
|
|
typedef R (Object::*pmf11type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) const;
|
|
};
|
|
|
|
|
|
// Type classes for arity 12
|
|
|
|
template<class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class A12,
|
|
class R> class arity12_function :
|
|
public arity11_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
R> {
|
|
public:
|
|
typedef A12 argument_12_type;
|
|
};
|
|
|
|
// template class for arity12 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class A12,
|
|
class R> class arity12_mf :
|
|
public ObjectType<Object> ,
|
|
public arity12_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
A12,
|
|
R> {
|
|
public:
|
|
typedef R (Object::*pmf12type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12);
|
|
};
|
|
|
|
// template class for arity12 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class A12,
|
|
class R> class arity12_const_mf :
|
|
public ObjectType<Object> ,
|
|
public arity12_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
A12,
|
|
R> {
|
|
public:
|
|
typedef R (Object::*pmf12type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12) const;
|
|
};
|
|
|
|
|
|
// Type classes for arity 13
|
|
|
|
template<class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class A12,
|
|
class A13,
|
|
class R> class arity13_function :
|
|
public arity12_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
A12,
|
|
R> {
|
|
public:
|
|
typedef A13 argument_13_type;
|
|
};
|
|
|
|
// template class for arity13 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class A12,
|
|
class A13,
|
|
class R> class arity13_mf :
|
|
public ObjectType<Object> ,
|
|
public arity13_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
A12,
|
|
A13,
|
|
R> {
|
|
public:
|
|
typedef R (Object::*pmf13type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13);
|
|
};
|
|
|
|
// template class for arity13 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class A12,
|
|
class A13,
|
|
class R> class arity13_const_mf :
|
|
public ObjectType<Object> ,
|
|
public arity13_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
A12,
|
|
A13,
|
|
R> {
|
|
public:
|
|
typedef R (Object::*pmf13type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13) const;
|
|
};
|
|
|
|
|
|
// Type classes for arity 14
|
|
|
|
template<class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class A12,
|
|
class A13,
|
|
class A14,
|
|
class R> class arity14_function :
|
|
public arity13_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
A12,
|
|
A13,
|
|
R> {
|
|
public:
|
|
typedef A14 argument_14_type;
|
|
};
|
|
|
|
// template class for arity14 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class A12,
|
|
class A13,
|
|
class A14,
|
|
class R> class arity14_mf :
|
|
public ObjectType<Object> ,
|
|
public arity14_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
A12,
|
|
A13,
|
|
A14,
|
|
R> {
|
|
public:
|
|
typedef R (Object::*pmf14type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14);
|
|
};
|
|
|
|
// template class for arity14 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class A12,
|
|
class A13,
|
|
class A14,
|
|
class R> class arity14_const_mf :
|
|
public ObjectType<Object> ,
|
|
public arity14_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
A12,
|
|
A13,
|
|
A14,
|
|
R> {
|
|
public:
|
|
typedef R (Object::*pmf14type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14) const;
|
|
};
|
|
|
|
|
|
// Type classes for arity 15
|
|
|
|
template<class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class A12,
|
|
class A13,
|
|
class A14,
|
|
class A15,
|
|
class R> class arity15_function :
|
|
public arity14_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
A12,
|
|
A13,
|
|
A14,
|
|
R> {
|
|
public:
|
|
typedef A15 argument_15_type;
|
|
};
|
|
|
|
// template class for arity15 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class A12,
|
|
class A13,
|
|
class A14,
|
|
class A15,
|
|
class R> class arity15_mf :
|
|
public ObjectType<Object> ,
|
|
public arity15_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
A12,
|
|
A13,
|
|
A14,
|
|
A15,
|
|
R> {
|
|
public:
|
|
typedef R (Object::*pmf15type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15);
|
|
};
|
|
|
|
// template class for arity15 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class A12,
|
|
class A13,
|
|
class A14,
|
|
class A15,
|
|
class R> class arity15_const_mf :
|
|
public ObjectType<Object> ,
|
|
public arity15_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
A12,
|
|
A13,
|
|
A14,
|
|
A15,
|
|
R> {
|
|
public:
|
|
typedef R (Object::*pmf15type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15) const;
|
|
};
|
|
|
|
// template class for arity0 member function type
|
|
template<class Object, class R> class std_arity0_mf :
|
|
public ObjectType<Object> ,
|
|
public arity0_function<R> {
|
|
public:
|
|
typedef R ( __stdcall Object::*pmf0type)();
|
|
};
|
|
|
|
// template class for arity0 member function type
|
|
template<class Object, class R> class std_arity0_const_mf :
|
|
public ObjectType<Object> ,
|
|
public arity0_function<R> {
|
|
public:
|
|
typedef R ( __stdcall Object::*pmf0type)() const;
|
|
};
|
|
|
|
// template class for arity1 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class R> class std_arity1_mf :
|
|
public ObjectType<Object> ,
|
|
public std::unary_function<A1,
|
|
R> {
|
|
public:
|
|
typedef R ( __stdcall Object::*pmf1type)(A1);
|
|
};
|
|
|
|
// template class for arity1 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class R> class std_arity1_const_mf :
|
|
public ObjectType<Object> ,
|
|
public std::unary_function<A1,
|
|
R> {
|
|
public:
|
|
typedef R ( __stdcall Object::*pmf1type)(A1) const;
|
|
};
|
|
|
|
// template class for arity2 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class R> class std_arity2_mf :
|
|
public ObjectType<Object> ,
|
|
public std::binary_function<A1,
|
|
A2,
|
|
R> {
|
|
public:
|
|
typedef first_argument_type argument_type;
|
|
typedef R ( __stdcall Object::*pmf2type)(A1, A2);
|
|
};
|
|
|
|
// template class for arity2 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class R> class std_arity2_const_mf :
|
|
public ObjectType<Object> ,
|
|
public std::binary_function<A1,
|
|
A2,
|
|
R> {
|
|
public:
|
|
typedef first_argument_type argument_type;
|
|
typedef R ( __stdcall Object::*pmf2type)(A1, A2) const;
|
|
};
|
|
|
|
// template class for arity3 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class R> class std_arity3_mf :
|
|
public ObjectType<Object> ,
|
|
public arity3_function<A1,
|
|
A2,
|
|
A3,
|
|
R> {
|
|
public:
|
|
typedef R ( __stdcall Object::*pmf3type)(A1, A2, A3);
|
|
};
|
|
|
|
// template class for arity3 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class R> class std_arity3_const_mf :
|
|
public ObjectType<Object> ,
|
|
public arity3_function<A1,
|
|
A2,
|
|
A3,
|
|
R> {
|
|
public:
|
|
typedef R ( __stdcall Object::*pmf3type)(A1, A2, A3) const;
|
|
};
|
|
|
|
// template class for arity4 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class R> class std_arity4_mf :
|
|
public ObjectType<Object> ,
|
|
public arity4_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R> {
|
|
public:
|
|
typedef R ( __stdcall Object::*pmf4type)(A1, A2, A3, A4);
|
|
};
|
|
|
|
// template class for arity4 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class R> class std_arity4_const_mf :
|
|
public ObjectType<Object> ,
|
|
public arity4_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R> {
|
|
public:
|
|
typedef R ( __stdcall Object::*pmf4type)(A1, A2, A3, A4) const;
|
|
};
|
|
|
|
// template class for arity5 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class R> class std_arity5_mf :
|
|
public ObjectType<Object> ,
|
|
public arity5_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R> {
|
|
public:
|
|
typedef R ( __stdcall Object::*pmf5type)(A1, A2, A3, A4, A5);
|
|
};
|
|
|
|
// template class for arity5 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class R> class std_arity5_const_mf :
|
|
public ObjectType<Object> ,
|
|
public arity5_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R> {
|
|
public:
|
|
typedef R ( __stdcall Object::*pmf5type)(A1, A2, A3, A4, A5) const;
|
|
};
|
|
|
|
// template class for arity6 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class R> class std_arity6_mf :
|
|
public ObjectType<Object> ,
|
|
public arity6_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R> {
|
|
public:
|
|
typedef R ( __stdcall Object::*pmf6type)(A1, A2, A3, A4, A5, A6);
|
|
};
|
|
|
|
// template class for arity6 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class R> class std_arity6_const_mf :
|
|
public ObjectType<Object> ,
|
|
public arity6_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R> {
|
|
public:
|
|
typedef R ( __stdcall Object::*pmf6type)(A1, A2, A3, A4, A5, A6) const;
|
|
};
|
|
|
|
// template class for arity7 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class R> class std_arity7_mf :
|
|
public ObjectType<Object> ,
|
|
public arity7_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
R> {
|
|
public:
|
|
typedef R ( __stdcall Object::*pmf7type)(A1, A2, A3, A4, A5, A6, A7);
|
|
};
|
|
|
|
// template class for arity7 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class R> class std_arity7_const_mf :
|
|
public ObjectType<Object> ,
|
|
public arity7_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
R> {
|
|
public:
|
|
typedef R ( __stdcall Object::*pmf7type)(A1, A2, A3, A4, A5, A6, A7) const;
|
|
};
|
|
|
|
// template class for arity8 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class R> class std_arity8_mf :
|
|
public ObjectType<Object> ,
|
|
public arity8_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
R> {
|
|
public:
|
|
typedef R ( __stdcall Object::*pmf8type)(A1, A2, A3, A4, A5, A6, A7, A8);
|
|
};
|
|
|
|
// template class for arity8 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class R> class std_arity8_const_mf :
|
|
public ObjectType<Object> ,
|
|
public arity8_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
R> {
|
|
public:
|
|
typedef R ( __stdcall Object::*pmf8type)(A1, A2, A3, A4, A5, A6, A7, A8) const;
|
|
};
|
|
|
|
// template class for arity9 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class R> class std_arity9_mf :
|
|
public ObjectType<Object> ,
|
|
public arity9_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
R> {
|
|
public:
|
|
typedef R ( __stdcall Object::*pmf9type)(A1, A2, A3, A4, A5, A6, A7, A8, A9);
|
|
};
|
|
|
|
// template class for arity9 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class R> class std_arity9_const_mf :
|
|
public ObjectType<Object> ,
|
|
public arity9_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
R> {
|
|
public:
|
|
typedef R ( __stdcall Object::*pmf9type)(A1, A2, A3, A4, A5, A6, A7, A8, A9) const;
|
|
};
|
|
|
|
// template class for arity10 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class R> class std_arity10_mf :
|
|
public ObjectType<Object> ,
|
|
public arity10_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
R> {
|
|
public:
|
|
typedef R ( __stdcall Object::*pmf10type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10);
|
|
};
|
|
|
|
// template class for arity10 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class R> class std_arity10_const_mf :
|
|
public ObjectType<Object> ,
|
|
public arity10_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
R> {
|
|
public:
|
|
typedef R ( __stdcall Object::*pmf10type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10) const;
|
|
};
|
|
|
|
// template class for arity11 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class R> class std_arity11_mf :
|
|
public ObjectType<Object> ,
|
|
public arity11_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
R> {
|
|
public:
|
|
typedef R ( __stdcall Object::*pmf11type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11);
|
|
};
|
|
|
|
// template class for arity11 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class R> class std_arity11_const_mf :
|
|
public ObjectType<Object> ,
|
|
public arity11_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
R> {
|
|
public:
|
|
typedef R ( __stdcall Object::*pmf11type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) const;
|
|
};
|
|
|
|
// template class for arity12 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class A12,
|
|
class R> class std_arity12_mf :
|
|
public ObjectType<Object> ,
|
|
public arity12_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
A12,
|
|
R> {
|
|
public:
|
|
typedef R ( __stdcall Object::*pmf12type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12);
|
|
};
|
|
|
|
// template class for arity12 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class A12,
|
|
class R> class std_arity12_const_mf :
|
|
public ObjectType<Object> ,
|
|
public arity12_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
A12,
|
|
R> {
|
|
public:
|
|
typedef R ( __stdcall Object::*pmf12type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12) const;
|
|
};
|
|
|
|
// template class for arity13 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class A12,
|
|
class A13,
|
|
class R> class std_arity13_mf :
|
|
public ObjectType<Object> ,
|
|
public arity13_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
A12,
|
|
A13,
|
|
R> {
|
|
public:
|
|
typedef R ( __stdcall Object::*pmf13type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13);
|
|
};
|
|
|
|
// template class for arity13 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class A12,
|
|
class A13,
|
|
class R> class std_arity13_const_mf :
|
|
public ObjectType<Object> ,
|
|
public arity13_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
A12,
|
|
A13,
|
|
R> {
|
|
public:
|
|
typedef R ( __stdcall Object::*pmf13type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13) const;
|
|
};
|
|
|
|
// template class for arity14 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class A12,
|
|
class A13,
|
|
class A14,
|
|
class R> class std_arity14_mf :
|
|
public ObjectType<Object> ,
|
|
public arity14_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
A12,
|
|
A13,
|
|
A14,
|
|
R> {
|
|
public:
|
|
typedef R ( __stdcall Object::*pmf14type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14);
|
|
};
|
|
|
|
// template class for arity14 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class A12,
|
|
class A13,
|
|
class A14,
|
|
class R> class std_arity14_const_mf :
|
|
public ObjectType<Object> ,
|
|
public arity14_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
A12,
|
|
A13,
|
|
A14,
|
|
R> {
|
|
public:
|
|
typedef R ( __stdcall Object::*pmf14type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14) const;
|
|
};
|
|
|
|
// template class for arity15 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class A12,
|
|
class A13,
|
|
class A14,
|
|
class A15,
|
|
class R> class std_arity15_mf :
|
|
public ObjectType<Object> ,
|
|
public arity15_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
A12,
|
|
A13,
|
|
A14,
|
|
A15,
|
|
R> {
|
|
public:
|
|
typedef R ( __stdcall Object::*pmf15type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15);
|
|
};
|
|
|
|
// template class for arity15 member function type
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class A12,
|
|
class A13,
|
|
class A14,
|
|
class A15,
|
|
class R> class std_arity15_const_mf :
|
|
public ObjectType<Object> ,
|
|
public arity15_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
A12,
|
|
A13,
|
|
A14,
|
|
A15,
|
|
R> {
|
|
public:
|
|
typedef R ( __stdcall Object::*pmf15type)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15) const;
|
|
};
|
|
|
|
|
|
///////////////////////////////////////////
|
|
// Storage
|
|
///////////////////////////////////////////
|
|
// Template Class for object storage
|
|
template<class Object> class store_object {
|
|
public:
|
|
explicit inline store_object(Object objinit) : objval(objinit) {}
|
|
inline store_object(const store_object &init) : objval(init.objval) {}
|
|
protected:
|
|
Object objval;
|
|
};
|
|
|
|
|
|
// storage allocation classes for arity 0
|
|
|
|
// Template Class for arity 0 function ptr storage
|
|
template<class R> class arity0fp:
|
|
public arity0_function<R> {
|
|
public:
|
|
typedef R (*const pf0type) ();
|
|
explicit inline arity0fp(pf0type pfi) :
|
|
pf0(pfi) {}
|
|
inline arity0fp(const arity0fp& fi) :
|
|
pf0(fi.pf0) {}
|
|
inline R operator()() const {
|
|
return pf0();
|
|
}
|
|
pf0type pf0;
|
|
};
|
|
|
|
// Template Function for arity 0 function ptr storage
|
|
template<class R> inline arity0fp<R>
|
|
arity0_pointer(R (*const pfi)()) {
|
|
return arity0fp<R>(pfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 0 pmf storage
|
|
template<class Object, class R> class arity0pmf:
|
|
public arity0_mf<Object, R> {
|
|
public:
|
|
typedef typename arity0_mf<Object, R>::object_type object_type;
|
|
explicit inline arity0pmf(pmf0type pmfi) :
|
|
pmf0(pmfi) {}
|
|
inline arity0pmf(const arity0pmf& pmfi) : pmf0(pmfi.pmf0) {}
|
|
inline virtual R operator()(Object& o ) const {
|
|
return (o.*pmf0)();
|
|
}
|
|
pmf0type pmf0;
|
|
};
|
|
|
|
template<class Object, class R> class arity0pmf_ptr:
|
|
public arity0pmf<Object, R>, public std::unary_function<Object, R> {
|
|
public:
|
|
explicit inline arity0pmf_ptr(pmf0type pmfi) : arity0pmf<Object, R>(pmfi) {}
|
|
inline arity0pmf_ptr(const arity0pmf_ptr& pmfi) : arity0pmf<Object, R>(pmfi) {}
|
|
inline virtual R operator()(Object& o ) const {
|
|
return (o.*pmf0)();
|
|
}
|
|
inline virtual R operator()(Object* o ) const {
|
|
return (o->*pmf0)();
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 0 pmf storage
|
|
template<class Object, class R> inline arity0pmf_ptr<Object, R>
|
|
arity0_member_ptr(R (Object::*const pmfi)()) {
|
|
return arity0pmf_ptr<Object, R>(pmfi);
|
|
};
|
|
|
|
// Template Function for arity 0 pmf storage
|
|
template<class Object, class R> inline arity0pmf<Object, R>
|
|
arity0_member(R (Object::*const pmfi)()) {
|
|
return arity0pmf<Object, R>(pmfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 0 const pmf storage
|
|
template<class Object, class R> class arity0pmf_const:
|
|
public arity0_const_mf<const Object, R> {
|
|
public:
|
|
typedef typename arity0_const_mf<const Object, R>::object_type object_type;
|
|
explicit inline arity0pmf_const(pmf0type pmfi) :
|
|
pmf0(pmfi) {}
|
|
inline arity0pmf_const(const arity0pmf_const& pmfi) : pmf0(pmfi.pmf0) {}
|
|
inline virtual R operator()(const Object& o ) const {
|
|
return (o.*pmf0)();
|
|
}
|
|
pmf0type pmf0;
|
|
};
|
|
|
|
// Template Function for arity 0 const pmf storage
|
|
template<const class Object, class R> inline arity0pmf_const<const Object, R>
|
|
arity0_const_member(R (Object::*const pmfi)() const) {
|
|
return arity0pmf_const<const Object, R>(pmfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 0 obj&pmf ref storage
|
|
template<class Function> class arity0opmf:
|
|
public arity0pmf<typename Function::object_type, typename Function::result_type>,
|
|
public store_object<typename Function::object_type&> {
|
|
public:
|
|
explicit inline arity0opmf(typename Function::object_type& oi, const Function &f) :
|
|
store_object<typename Function::object_type&>(oi), arity0pmf<typename Function::object_type, typename Function::result_type>(f) {}
|
|
explicit inline arity0opmf(typename Function::object_type& oi, pmf0type pmfi) :
|
|
store_object<typename Function::object_type&>(oi), arity0pmf<typename Function::object_type, typename Function::result_type>(pmfi) {}
|
|
inline arity0opmf(const arity0opmf& bndri) :
|
|
store_object<typename Function::object_type&>(bndri), arity0pmf<typename Function::object_type, typename Function::result_type>(bndri) {}
|
|
inline typename Function::result_type operator()() const {
|
|
return (objval.*pmf0)();
|
|
}
|
|
pmf0type pmf0;
|
|
};
|
|
|
|
|
|
// Template Function for arity 0 obj&pmf ref storage
|
|
template<class Function, class Object> inline arity0opmf<Function>
|
|
arity0_member_obj(Object& oi, const Function &f) {
|
|
return arity0opmf<Function>(Function::object_type(oi), Function::pmf0type(f.pmf0));
|
|
};
|
|
|
|
|
|
// Template Class for arity 0 const obj&pmf ref storage
|
|
template<class Function> class arity0opmf_const:
|
|
public arity0pmf_const<const typename Function::object_type, typename Function::result_type>,
|
|
public store_object<const typename Function::object_type&> {
|
|
public:
|
|
explicit inline arity0opmf_const(typename Function::object_type& oi, const Function &f) :
|
|
store_object<typename Function::object_type&>(oi), arity0pmf_const<typename Function::object_type, typename Function::result_type>(f) {}
|
|
explicit inline arity0opmf_const(typename Function::object_type& oi, pmf0type pmfi) :
|
|
store_object<typename Function::object_type&>(oi), arity0pmf_const<typename Function::object_type, typename Function::result_type>(pmfi) {}
|
|
inline arity0opmf_const(const arity0opmf_const& bndri) :
|
|
store_object<typename Function::object_type&>(bndri), arity0pmf_const<typename Function::object_type, typename Function::result_type>(bndri) {}
|
|
inline typename Function::result_type operator()() const {
|
|
return (objval.*pmf0)();
|
|
}
|
|
pmf0type pmf0;
|
|
};
|
|
|
|
|
|
// Template Function for arity 0 const obj&pmf ref storage
|
|
template<class Function, class Object> inline arity0opmf_const<Function>
|
|
arity0_const_member_obj(Object& oi, const Function &f) {
|
|
return arity0opmf_const<Function>(Function::object_type(oi), Function::pmf0type(f.pmf0));
|
|
};
|
|
|
|
|
|
|
|
// storage allocation classes for arity 1
|
|
|
|
// Template Class for arity 1 function ptr storage
|
|
template<class A1,
|
|
class R> class arity1fp:
|
|
public std::unary_function<A1,
|
|
R>,
|
|
public arity0fp<R> {
|
|
public:
|
|
typedef typename std::unary_function<A1,
|
|
R>::result_type result_type;
|
|
typedef R (*const pf1type) (A1);
|
|
explicit inline arity1fp(pf1type pfi) :
|
|
arity0fp<R>(reinterpret_cast<pf0type>(pfi)) {}
|
|
inline arity1fp(const arity1fp& fi) :
|
|
arity0fp<R>(fi) {}
|
|
inline R operator()(A1 a1) const {
|
|
pf1type pf = reinterpret_cast<pf1type>(pf0);
|
|
return pf(a1);
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 1 function ptr storage
|
|
template<class A1,
|
|
class R> inline arity1fp<A1,
|
|
R>
|
|
arity1_pointer(R (*const pfi)(A1)) {
|
|
return arity1fp<A1,
|
|
R>(pfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 1 pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class R> class arity1pmf:
|
|
public arity1_mf<Object,
|
|
A1,
|
|
R>,
|
|
public arity0pmf<Object, R> {
|
|
public:
|
|
typedef typename std::unary_function<A1,
|
|
R>::result_type result_type;
|
|
typedef typename arity1_mf<Object,
|
|
A1,
|
|
R>::object_type object_type;
|
|
explicit inline arity1pmf(pmf1type pmfi) :
|
|
arity0pmf<Object, R>(reinterpret_cast<pmf0type>(pmfi)) {}
|
|
inline arity1pmf(const arity1pmf& pmfi) : arity0pmf<Object, R>(pmfi) {}
|
|
inline virtual R operator()(Object& o, A1 a1) const {
|
|
pmf1type pmf = reinterpret_cast<pmf1type>(pmf0);
|
|
return (o.*pmf)(a1);
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 1 pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class R> inline arity1pmf<Object,
|
|
A1,
|
|
R>
|
|
arity1_member(R (Object::*const pmfi)(A1)) {
|
|
return arity1pmf<Object,
|
|
A1,
|
|
R>(pmfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 1 const pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class R> class arity1pmf_const:
|
|
public arity1_const_mf<const Object,
|
|
A1,
|
|
R>,
|
|
public arity0pmf_const<const Object, R> {
|
|
public:
|
|
typedef typename std::unary_function<A1,
|
|
R>::result_type result_type;
|
|
typedef typename arity1_const_mf<const Object,
|
|
A1,
|
|
R>::object_type object_type;
|
|
explicit inline arity1pmf_const(pmf1type pmfi) :
|
|
arity0pmf_const<const Object, R>(reinterpret_cast<pmf0type>(pmfi)) {}
|
|
inline arity1pmf_const(const arity1pmf_const& pmfi) : arity0pmf_const<Object, R>(pmfi) {}
|
|
inline virtual R operator()(const Object& o, A1 a1) const {
|
|
pmf1type pmf = reinterpret_cast<pmf1type>(pmf0);
|
|
return (o.*pmf)(a1);
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 1 const pmf storage
|
|
template<const class Object,
|
|
class A1,
|
|
class R> inline arity1pmf_const<const Object,
|
|
A1,
|
|
R>
|
|
arity1_const_member(R (Object::*const pmfi)(A1) const) {
|
|
return arity1pmf_const<const Object,
|
|
A1,
|
|
R>(pmfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 1 obj&pmf ref storage
|
|
template<class Function> class arity1opmf:
|
|
public arity1pmf<typename Function::object_type,
|
|
typename Function::argument_type,
|
|
typename Function::result_type>,
|
|
public store_object<typename Function::object_type&> {
|
|
public:
|
|
explicit inline arity1opmf(typename Function::object_type& oi, const Function &f) :
|
|
store_object<typename Function::object_type&>(oi), arity1pmf<typename Function::object_type,
|
|
typename Function::argument_type,
|
|
typename Function::result_type>(f) {}
|
|
explicit inline arity1opmf(typename Function::object_type& oi, pmf1type pmfi) :
|
|
store_object<typename Function::object_type&>(oi), arity1pmf<typename Function::object_type,
|
|
typename Function::argument_type,
|
|
typename Function::result_type>(pmfi) {}
|
|
inline arity1opmf(const arity1opmf& bndri) :
|
|
store_object<typename Function::object_type&>(bndri), arity1pmf<typename Function::object_type,
|
|
typename Function::argument_type,
|
|
typename Function::result_type>(bndri) {}
|
|
inline typename Function::result_type operator()(typename Function::argument_type a1) const {
|
|
pmf1type pmf = reinterpret_cast<pmf1type>(pmf0);
|
|
return (objval.*pmf)(a1);
|
|
}
|
|
};
|
|
|
|
|
|
// Template Function for arity 1 obj&pmf ref storage
|
|
template<class Function, class Object> inline arity1opmf<Function>
|
|
arity1_member_obj(Object& oi, const Function &f) {
|
|
return arity1opmf<Function>(Function::object_type(oi), Function::pmf1type(f.pmf0));
|
|
};
|
|
|
|
|
|
// Template Class for arity 1 const obj&pmf ref storage
|
|
template<class Function> class arity1opmf_const:
|
|
public arity1pmf_const<const typename Function::object_type,
|
|
typename Function::argument_type,
|
|
typename Function::result_type>,
|
|
public store_object<const typename Function::object_type&> {
|
|
public:
|
|
explicit inline arity1opmf_const(typename Function::object_type& oi, const Function &f) :
|
|
store_object<typename Function::object_type&>(oi), arity1pmf_const<typename Function::object_type,
|
|
typename Function::argument_type,
|
|
typename Function::result_type>(f) {}
|
|
explicit inline arity1opmf_const(typename Function::object_type& oi, pmf1type pmfi) :
|
|
store_object<typename Function::object_type&>(oi), arity1pmf_const<typename Function::object_type,
|
|
typename Function::argument_type,
|
|
typename Function::result_type>(pmfi) {}
|
|
inline arity1opmf_const(const arity1opmf_const& bndri) :
|
|
store_object<typename Function::object_type&>(bndri), arity1pmf_const<typename Function::object_type,
|
|
typename Function::argument_type,
|
|
typename Function::result_type>(bndri) {}
|
|
inline typename Function::result_type operator()(typename Function::argument_type a1) const {
|
|
pmf1type pmf = reinterpret_cast<pmf1type>(pmf0);
|
|
return (objval.*pmf)(a1);
|
|
}
|
|
};
|
|
|
|
|
|
// Template Function for arity 1 const obj&pmf ref storage
|
|
template<class Function, class Object> inline arity1opmf_const<Function>
|
|
arity1_const_member_obj(Object& oi, const Function &f) {
|
|
return arity1opmf_const<Function>(Function::object_type(oi), Function::pmf1type(f.pmf0));
|
|
};
|
|
|
|
|
|
|
|
// storage allocation classes for arity 2
|
|
|
|
// Template Class for arity 2 function ptr storage
|
|
template<class A1,
|
|
class A2,
|
|
class R> class arity2fp:
|
|
public std::binary_function<A1,
|
|
A2,
|
|
R>,
|
|
public arity0fp<R> {
|
|
public:
|
|
typedef typename std::binary_function<A1,
|
|
A2,
|
|
R>::result_type result_type;
|
|
typedef typename std::binary_function<A1,
|
|
A2,
|
|
R>::first_argument_type first_argument_type;
|
|
typedef R (*const pf2type) (A1, A2);
|
|
explicit inline arity2fp(pf2type pfi) :
|
|
arity0fp<R>(reinterpret_cast<pf0type>(pfi)) {}
|
|
inline arity2fp(const arity2fp& fi) :
|
|
arity0fp<R>(fi) {}
|
|
inline R operator()(A1 a1,
|
|
A2 a2) const {
|
|
pf2type pf = reinterpret_cast<pf2type>(pf0);
|
|
return pf(a1, a2);
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 2 function ptr storage
|
|
template<class A1,
|
|
class A2,
|
|
class R> inline arity2fp<A1,
|
|
A2,
|
|
R>
|
|
arity2_pointer(R (*const pfi)(A1,
|
|
A2)) {
|
|
return arity2fp<A1,
|
|
A2,
|
|
R>(pfi);
|
|
};
|
|
|
|
// Template Class for arity 2 pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class R> class arity2pmf:
|
|
public arity2_mf<Object,
|
|
A1,
|
|
A2,
|
|
R>,
|
|
public arity0pmf<Object, R> {
|
|
public:
|
|
typedef typename std::binary_function<A1,
|
|
A2,
|
|
R>::result_type result_type;
|
|
typedef typename std::binary_function<A1,
|
|
A2,
|
|
R>::first_argument_type first_argument_type;
|
|
typedef typename arity2_mf<Object,
|
|
A1,
|
|
A2,
|
|
R>::object_type object_type;
|
|
explicit inline arity2pmf(pmf2type pmfi) :
|
|
arity0pmf<Object, R>(reinterpret_cast<pmf0type>(pmfi)) {}
|
|
inline arity2pmf(const arity2pmf& pmfi) : arity0pmf<Object, R>(pmfi) {}
|
|
inline virtual R operator()(Object& o, A1 a1,
|
|
A2 a2) const {
|
|
pmf2type pmf = reinterpret_cast<pmf2type>(pmf0);
|
|
return (o.*pmf)(a1, a2);
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 2 pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class R> inline arity2pmf<Object,
|
|
A1,
|
|
A2,
|
|
R>
|
|
arity2_member(R (Object::*const pmfi)(A1,
|
|
A2)) {
|
|
return arity2pmf<Object,
|
|
A1,
|
|
A2,
|
|
R>(pmfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 2 const pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class R> class arity2pmf_const:
|
|
public arity2_const_mf<const Object,
|
|
A1,
|
|
A2,
|
|
R>,
|
|
public arity0pmf_const<const Object, R> {
|
|
public:
|
|
typedef typename std::binary_function<A1,
|
|
A2,
|
|
R>::result_type result_type;
|
|
typedef typename std::binary_function<A1,
|
|
A2,
|
|
R>::first_argument_type first_argument_type;
|
|
typedef typename arity2_const_mf<const Object,
|
|
A1,
|
|
A2,
|
|
R>::object_type object_type;
|
|
explicit inline arity2pmf_const(pmf2type pmfi) :
|
|
arity0pmf_const<const Object, R>(reinterpret_cast<pmf0type>(pmfi)) {}
|
|
inline arity2pmf_const(const arity2pmf_const& pmfi) : arity0pmf_const<Object, R>(pmfi) {}
|
|
inline virtual R operator()(const Object& o, A1 a1,
|
|
A2 a2) const {
|
|
pmf2type pmf = reinterpret_cast<pmf2type>(pmf0);
|
|
return (o.*pmf)(a1, a2);
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 2 const pmf storage
|
|
template<const class Object,
|
|
class A1,
|
|
class A2,
|
|
class R> inline arity2pmf_const<const Object,
|
|
A1,
|
|
A2,
|
|
R>
|
|
arity2_const_member(R (Object::*const pmfi)(A1,
|
|
A2) const) {
|
|
return arity2pmf_const<const Object,
|
|
A1,
|
|
A2,
|
|
R>(pmfi);
|
|
};
|
|
|
|
// Template Class for arity 2 obj&pmf ref storage
|
|
template<class Function> class arity2opmf:
|
|
public arity2pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::result_type>,
|
|
public store_object<typename Function::object_type&> {
|
|
public:
|
|
explicit inline arity2opmf(typename Function::object_type& oi, const Function &f) :
|
|
store_object<typename Function::object_type&>(oi), arity2pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::result_type>(f) {}
|
|
explicit inline arity2opmf(typename Function::object_type& oi, pmf2type pmfi) :
|
|
store_object<typename Function::object_type&>(oi), arity2pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::result_type>(pmfi) {}
|
|
inline arity2opmf(const arity2opmf& bndri) :
|
|
store_object<typename Function::object_type&>(bndri), arity2pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::result_type>(bndri) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1,
|
|
typename Function::second_argument_type a2) const {
|
|
pmf2type pmf = reinterpret_cast<pmf2type>(pmf0);
|
|
return (objval.*pmf)(a1, a2);
|
|
}
|
|
};
|
|
|
|
|
|
// Template Function for arity 2 obj&pmf ref storage
|
|
template<class Function, class Object> inline arity2opmf<Function>
|
|
arity2_member_obj(Object& oi, const Function &f) {
|
|
return arity2opmf<Function>(Function::object_type(oi), Function::pmf2type(f.pmf0));
|
|
};
|
|
|
|
|
|
// Template Class for arity 2 const obj&pmf ref storage
|
|
template<class Function> class arity2opmf_const:
|
|
public arity2pmf_const<const typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::result_type>,
|
|
public store_object<const typename Function::object_type&> {
|
|
public:
|
|
explicit inline arity2opmf_const(typename Function::object_type& oi, const Function &f) :
|
|
store_object<typename Function::object_type&>(oi), arity2pmf_const<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::result_type>(f) {}
|
|
explicit inline arity2opmf_const(typename Function::object_type& oi, pmf2type pmfi) :
|
|
store_object<typename Function::object_type&>(oi), arity2pmf_const<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::result_type>(pmfi) {}
|
|
inline arity2opmf_const(const arity2opmf_const& bndri) :
|
|
store_object<typename Function::object_type&>(bndri), arity2pmf_const<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::result_type>(bndri) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1,
|
|
typename Function::second_argument_type a2) const {
|
|
pmf2type pmf = reinterpret_cast<pmf2type>(pmf0);
|
|
return (objval.*pmf)(a1, a2);
|
|
}
|
|
};
|
|
|
|
|
|
// Template Function for arity 2 const obj&pmf ref storage
|
|
template<class Function, class Object> inline arity2opmf_const<Function>
|
|
arity2_const_member_obj(Object& oi, const Function &f) {
|
|
return arity2opmf_const<Function>(Function::object_type(oi), Function::pmf2type(f.pmf0));
|
|
};
|
|
|
|
|
|
|
|
// storage allocation classes for arity 3
|
|
|
|
// Template Class for arity 3 function ptr storage
|
|
template<class A1,
|
|
class A2,
|
|
class A3,
|
|
class R> class arity3fp:
|
|
public arity3_function<A1,
|
|
A2,
|
|
A3,
|
|
R>,
|
|
public arity0fp<R> {
|
|
public:
|
|
typedef typename arity3_function<A1,
|
|
A2,
|
|
A3,
|
|
R>::result_type result_type;
|
|
typedef typename arity3_function<A1,
|
|
A2,
|
|
A3,
|
|
R>::first_argument_type first_argument_type;
|
|
typedef typename arity3_function<A1,
|
|
A2,
|
|
A3,
|
|
R>::second_argument_type second_argument_type;
|
|
typedef R (*const pf3type) (A1, A2, A3);
|
|
explicit inline arity3fp(pf3type pfi) :
|
|
arity0fp<R>(reinterpret_cast<pf0type>(pfi)) {}
|
|
inline arity3fp(const arity3fp& fi) :
|
|
arity0fp<R>(fi) {}
|
|
inline R operator()(A1 a1,
|
|
A2 a2,
|
|
A3 a3) const {
|
|
pf3type pf = reinterpret_cast<pf3type>(pf0);
|
|
return pf(a1, a2, a3);
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 3 function ptr storage
|
|
template<class A1,
|
|
class A2,
|
|
class A3,
|
|
class R> inline arity3fp<A1,
|
|
A2,
|
|
A3,
|
|
R>
|
|
arity3_pointer(R (*const pfi)(A1,
|
|
A2,
|
|
A3)) {
|
|
return arity3fp<A1,
|
|
A2,
|
|
A3,
|
|
R>(pfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 3 pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class R> class arity3pmf:
|
|
public arity3_mf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
R>,
|
|
public arity0pmf<Object, R> {
|
|
public:
|
|
typedef typename arity3_function<A1,
|
|
A2,
|
|
A3,
|
|
R>::result_type result_type;
|
|
typedef typename arity3_function<A1,
|
|
A2,
|
|
A3,
|
|
R>::first_argument_type first_argument_type;
|
|
typedef typename arity3_function<A1,
|
|
A2,
|
|
A3,
|
|
R>::second_argument_type second_argument_type;
|
|
typedef typename arity3_mf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
R>::object_type object_type;
|
|
explicit inline arity3pmf(pmf3type pmfi) :
|
|
arity0pmf<Object, R>(reinterpret_cast<pmf0type>(pmfi)) {}
|
|
inline arity3pmf(const arity3pmf& pmfi) : arity0pmf<Object, R>(pmfi) {}
|
|
inline virtual R operator()(Object& o, A1 a1,
|
|
A2 a2,
|
|
A3 a3) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (o.*pmf)(a1, a2, a3);
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 3 pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class R> inline arity3pmf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
R>
|
|
arity3_member(R (Object::*const pmfi)(A1,
|
|
A2,
|
|
A3)) {
|
|
return arity3pmf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
R>(pmfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 3 const pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class R> class arity3pmf_const:
|
|
public arity3_const_mf<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
R>,
|
|
public arity0pmf_const<const Object, R> {
|
|
public:
|
|
typedef typename arity3_function<A1,
|
|
A2,
|
|
A3,
|
|
R>::result_type result_type;
|
|
typedef typename arity3_function<A1,
|
|
A2,
|
|
A3,
|
|
R>::first_argument_type first_argument_type;
|
|
typedef typename arity3_function<A1,
|
|
A2,
|
|
A3,
|
|
R>::second_argument_type second_argument_type;
|
|
typedef typename arity3_const_mf<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
R>::object_type object_type;
|
|
explicit inline arity3pmf_const(pmf3type pmfi) :
|
|
arity0pmf_const<const Object, R>(reinterpret_cast<pmf0type>(pmfi)) {}
|
|
inline arity3pmf_const(const arity3pmf_const& pmfi) : arity0pmf_const<Object, R>(pmfi) {}
|
|
inline virtual R operator()(const Object& o, A1 a1,
|
|
A2 a2,
|
|
A3 a3) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (o.*pmf)(a1, a2, a3);
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 3 const pmf storage
|
|
template<const class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class R> inline arity3pmf_const<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
R>
|
|
arity3_const_member(R (Object::*const pmfi)(A1,
|
|
A2,
|
|
A3) const) {
|
|
return arity3pmf_const<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
R>(pmfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 3 obj&pmf ref storage
|
|
template<class Function> class arity3opmf:
|
|
public arity3pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::result_type>,
|
|
public store_object<typename Function::object_type&> {
|
|
public:
|
|
explicit inline arity3opmf(typename Function::object_type& oi, const Function &f) :
|
|
store_object<typename Function::object_type&>(oi), arity3pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::result_type>(f) {}
|
|
explicit inline arity3opmf(typename Function::object_type& oi, pmf3type pmfi) :
|
|
store_object<typename Function::object_type&>(oi), arity3pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::result_type>(pmfi) {}
|
|
inline arity3opmf(const arity3opmf& bndri) :
|
|
store_object<typename Function::object_type&>(bndri), arity3pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::result_type>(bndri) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1,
|
|
typename Function::second_argument_type a2,
|
|
typename Function::argument_3_type a3) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (objval.*pmf)(a1, a2, a3);
|
|
}
|
|
};
|
|
|
|
|
|
// Template Function for arity 3 obj&pmf ref storage
|
|
template<class Function, class Object> inline arity3opmf<Function>
|
|
arity3_member_obj(Object& oi, const Function &f) {
|
|
return arity3opmf<Function>(Function::object_type(oi), Function::pmf3type(f.pmf0));
|
|
};
|
|
|
|
|
|
// Template Class for arity 3 const obj&pmf ref storage
|
|
template<class Function> class arity3opmf_const:
|
|
public arity3pmf_const<const typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::result_type>,
|
|
public store_object<const typename Function::object_type&> {
|
|
public:
|
|
explicit inline arity3opmf_const(typename Function::object_type& oi, const Function &f) :
|
|
store_object<typename Function::object_type&>(oi), arity3pmf_const<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::result_type>(f) {}
|
|
explicit inline arity3opmf_const(typename Function::object_type& oi, pmf3type pmfi) :
|
|
store_object<typename Function::object_type&>(oi), arity3pmf_const<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::result_type>(pmfi) {}
|
|
inline arity3opmf_const(const arity3opmf_const& bndri) :
|
|
store_object<typename Function::object_type&>(bndri), arity3pmf_const<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::result_type>(bndri) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1,
|
|
typename Function::second_argument_type a2,
|
|
typename Function::argument_3_type a3) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (objval.*pmf)(a1, a2, a3);
|
|
}
|
|
};
|
|
|
|
|
|
// Template Function for arity 3 const obj&pmf ref storage
|
|
template<class Function, class Object> inline arity3opmf_const<Function>
|
|
arity3_const_member_obj(Object& oi, const Function &f) {
|
|
return arity3opmf_const<Function>(Function::object_type(oi), Function::pmf3type(f.pmf0));
|
|
};
|
|
|
|
|
|
|
|
// storage allocation classes for arity 4
|
|
|
|
// Template Class for arity 4 pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class R> class arity4pmf:
|
|
public arity4_mf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R>,
|
|
public arity0pmf<Object, R> {
|
|
public:
|
|
typedef typename arity4_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R>::result_type result_type;
|
|
typedef typename arity4_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R>::first_argument_type first_argument_type;
|
|
typedef typename arity4_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R>::second_argument_type second_argument_type;
|
|
typedef typename arity4_mf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R>::object_type object_type;
|
|
explicit inline arity4pmf(pmf4type pmfi) :
|
|
arity0pmf<Object, R>(reinterpret_cast<pmf0type>(pmfi)) {}
|
|
inline arity4pmf(const arity4pmf& pmfi) : arity0pmf<Object, R>(pmfi) {}
|
|
inline virtual R operator()(Object& o, A1 a1,
|
|
A2 a2,
|
|
A3 a3,
|
|
A4 a4) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (o.*pmf)(a1, a2, a3, a4);
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 4 pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class R> inline arity4pmf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R>
|
|
arity4_member(R (Object::*const pmfi)(A1,
|
|
A2,
|
|
A3,
|
|
A4)) {
|
|
return arity4pmf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R>(pmfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 4 const pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class R> class arity4pmf_const:
|
|
public arity4_const_mf<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R>,
|
|
public arity0pmf_const<const Object, R> {
|
|
public:
|
|
typedef typename arity4_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R>::result_type result_type;
|
|
typedef typename arity4_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R>::first_argument_type first_argument_type;
|
|
typedef typename arity4_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R>::second_argument_type second_argument_type;
|
|
typedef typename arity4_const_mf<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R>::object_type object_type;
|
|
explicit inline arity4pmf_const(pmf4type pmfi) :
|
|
arity0pmf_const<const Object, R>(reinterpret_cast<pmf0type>(pmfi)) {}
|
|
inline arity4pmf_const(const arity4pmf_const& pmfi) : arity0pmf_const<Object, R>(pmfi) {}
|
|
inline virtual R operator()(const Object& o, A1 a1,
|
|
A2 a2,
|
|
A3 a3,
|
|
A4 a4) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (o.*pmf)(a1, a2, a3, a4);
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 4 const pmf storage
|
|
template<const class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class R> inline arity4pmf_const<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R>
|
|
arity4_const_member(R (Object::*const pmfi)(A1,
|
|
A2,
|
|
A3,
|
|
A4) const) {
|
|
return arity4pmf_const<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R>(pmfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 4 obj&pmf ref storage
|
|
template<class Function> class arity4opmf:
|
|
public arity4pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::result_type>,
|
|
public store_object<typename Function::object_type&> {
|
|
public:
|
|
explicit inline arity4opmf(typename Function::object_type& oi, const Function &f) :
|
|
store_object<typename Function::object_type&>(oi), arity4pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::result_type>(f) {}
|
|
explicit inline arity4opmf(typename Function::object_type& oi, pmf4type pmfi) :
|
|
store_object<typename Function::object_type&>(oi), arity4pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::result_type>(pmfi) {}
|
|
inline arity4opmf(const arity4opmf& bndri) :
|
|
store_object<typename Function::object_type&>(bndri), arity4pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::result_type>(bndri) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1,
|
|
typename Function::second_argument_type a2,
|
|
typename Function::argument_3_type a3,
|
|
typename Function::argument_4_type a4) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (objval.*pmf)(a1, a2, a3, a4);
|
|
}
|
|
};
|
|
|
|
|
|
// Template Function for arity 4 obj&pmf ref storage
|
|
template<class Function, class Object> inline arity4opmf<Function>
|
|
arity4_member_obj(Object& oi, const Function &f) {
|
|
return arity4opmf<Function>(Function::object_type(oi), Function::pmf4type(f.pmf0));
|
|
};
|
|
|
|
|
|
// Template Class for arity 4 const obj&pmf ref storage
|
|
template<class Function> class arity4opmf_const:
|
|
public arity4pmf_const<const typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::result_type>,
|
|
public store_object<const typename Function::object_type&> {
|
|
public:
|
|
explicit inline arity4opmf_const(typename Function::object_type& oi, const Function &f) :
|
|
store_object<typename Function::object_type&>(oi), arity4pmf_const<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::result_type>(f) {}
|
|
explicit inline arity4opmf_const(typename Function::object_type& oi, pmf4type pmfi) :
|
|
store_object<typename Function::object_type&>(oi), arity4pmf_const<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::result_type>(pmfi) {}
|
|
inline arity4opmf_const(const arity4opmf_const& bndri) :
|
|
store_object<typename Function::object_type&>(bndri), arity4pmf_const<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::result_type>(bndri) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1,
|
|
typename Function::second_argument_type a2,
|
|
typename Function::argument_3_type a3,
|
|
typename Function::argument_4_type a4) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (objval.*pmf)(a1, a2, a3, a4);
|
|
}
|
|
};
|
|
|
|
|
|
// Template Function for arity 4 const obj&pmf ref storage
|
|
template<class Function, class Object> inline arity4opmf_const<Function>
|
|
arity4_const_member_obj(Object& oi, const Function &f) {
|
|
return arity4opmf_const<Function>(Function::object_type(oi), Function::pmf4type(f.pmf0));
|
|
};
|
|
|
|
|
|
|
|
// storage allocation classes for arity 5
|
|
|
|
// Template Class for arity 5 pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class R> class arity5pmf:
|
|
public arity5_mf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R>,
|
|
public arity0pmf<Object, R> {
|
|
public:
|
|
typedef typename arity5_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R>::result_type result_type;
|
|
typedef typename arity5_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R>::first_argument_type first_argument_type;
|
|
typedef typename arity5_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R>::second_argument_type second_argument_type;
|
|
typedef typename arity5_mf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R>::object_type object_type;
|
|
explicit inline arity5pmf(pmf5type pmfi) :
|
|
arity0pmf<Object, R>(reinterpret_cast<pmf0type>(pmfi)) {}
|
|
inline arity5pmf(const arity5pmf& pmfi) : arity0pmf<Object, R>(pmfi) {}
|
|
inline virtual R operator()(Object& o, A1 a1,
|
|
A2 a2,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (o.*pmf)(a1, a2, a3, a4, a5);
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 5 pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class R> inline arity5pmf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R>
|
|
arity5_member(R (Object::*const pmfi)(A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5)) {
|
|
return arity5pmf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R>(pmfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 5 const pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class R> class arity5pmf_const:
|
|
public arity5_const_mf<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R>,
|
|
public arity0pmf_const<const Object, R> {
|
|
public:
|
|
typedef typename arity5_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R>::result_type result_type;
|
|
typedef typename arity5_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R>::first_argument_type first_argument_type;
|
|
typedef typename arity5_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R>::second_argument_type second_argument_type;
|
|
typedef typename arity5_const_mf<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R>::object_type object_type;
|
|
explicit inline arity5pmf_const(pmf5type pmfi) :
|
|
arity0pmf_const<const Object, R>(reinterpret_cast<pmf0type>(pmfi)) {}
|
|
inline arity5pmf_const(const arity5pmf_const& pmfi) : arity0pmf_const<Object, R>(pmfi) {}
|
|
inline virtual R operator()(const Object& o, A1 a1,
|
|
A2 a2,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (o.*pmf)(a1, a2, a3, a4, a5);
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 5 const pmf storage
|
|
template<const class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class R> inline arity5pmf_const<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R>
|
|
arity5_const_member(R (Object::*const pmfi)(A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5) const) {
|
|
return arity5pmf_const<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R>(pmfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 5 obj&pmf ref storage
|
|
template<class Function> class arity5opmf:
|
|
public arity5pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::result_type>,
|
|
public store_object<typename Function::object_type&> {
|
|
public:
|
|
explicit inline arity5opmf(typename Function::object_type& oi, const Function &f) :
|
|
store_object<typename Function::object_type&>(oi), arity5pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::result_type>(f) {}
|
|
explicit inline arity5opmf(typename Function::object_type& oi, pmf5type pmfi) :
|
|
store_object<typename Function::object_type&>(oi), arity5pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::result_type>(pmfi) {}
|
|
inline arity5opmf(const arity5opmf& bndri) :
|
|
store_object<typename Function::object_type&>(bndri), arity5pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::result_type>(bndri) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1,
|
|
typename Function::second_argument_type a2,
|
|
typename Function::argument_3_type a3,
|
|
typename Function::argument_4_type a4,
|
|
typename Function::argument_5_type a5) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (objval.*pmf)(a1, a2, a3, a4, a5);
|
|
}
|
|
};
|
|
|
|
|
|
// Template Function for arity 5 obj&pmf ref storage
|
|
template<class Function, class Object> inline arity5opmf<Function>
|
|
arity5_member_obj(Object& oi, const Function &f) {
|
|
return arity5opmf<Function>(typename Function::object_type(oi), Function::pmf5type(f.pmf0));
|
|
};
|
|
|
|
|
|
// Template Class for arity 5 const obj&pmf ref storage
|
|
template<class Function> class arity5opmf_const:
|
|
public arity5pmf_const<const typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::result_type>,
|
|
public store_object<const typename Function::object_type&> {
|
|
public:
|
|
explicit inline arity5opmf_const(typename Function::object_type& oi, const Function &f) :
|
|
store_object<typename Function::object_type&>(oi), arity5pmf_const<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::result_type>(f) {}
|
|
explicit inline arity5opmf_const(typename Function::object_type& oi, pmf5type pmfi) :
|
|
store_object<typename Function::object_type&>(oi), arity5pmf_const<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::result_type>(pmfi) {}
|
|
inline arity5opmf_const(const arity5opmf_const& bndri) :
|
|
store_object<typename Function::object_type&>(bndri), arity5pmf_const<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::result_type>(bndri) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1,
|
|
typename Function::second_argument_type a2,
|
|
typename Function::argument_3_type a3,
|
|
typename Function::argument_4_type a4,
|
|
typename Function::argument_5_type a5) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (objval.*pmf)(a1, a2, a3, a4, a5);
|
|
}
|
|
};
|
|
|
|
|
|
// Template Function for arity 5 const obj&pmf ref storage
|
|
template<class Function, class Object> inline arity5opmf_const<Function>
|
|
arity5_const_member_obj(Object& oi, const Function &f) {
|
|
return arity5opmf_const<Function>(Function::object_type(oi), Function::pmf5type(f.pmf0));
|
|
};
|
|
|
|
|
|
|
|
// storage allocation classes for arity 6
|
|
|
|
// Template Class for arity 6 pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class R> class arity6pmf:
|
|
public arity6_mf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R>,
|
|
public arity0pmf<Object, R> {
|
|
public:
|
|
typedef typename arity6_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R>::result_type result_type;
|
|
typedef typename arity6_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R>::first_argument_type first_argument_type;
|
|
typedef typename arity6_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R>::second_argument_type second_argument_type;
|
|
typedef typename arity6_mf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R>::object_type object_type;
|
|
explicit inline arity6pmf(pmf6type pmfi) :
|
|
arity0pmf<Object, R>(reinterpret_cast<pmf0type>(pmfi)) {}
|
|
inline arity6pmf(const arity6pmf& pmfi) : arity0pmf<Object, R>(pmfi) {}
|
|
inline virtual R operator()(Object& o, A1 a1,
|
|
A2 a2,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (o.*pmf)(a1, a2, a3, a4, a5, a6);
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 6 pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class R> inline arity6pmf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R>
|
|
arity6_member(R (Object::*const pmfi)(A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6)) {
|
|
return arity6pmf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R>(pmfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 6 const pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class R> class arity6pmf_const:
|
|
public arity6_const_mf<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R>,
|
|
public arity0pmf_const<const Object, R> {
|
|
public:
|
|
typedef typename arity6_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R>::result_type result_type;
|
|
typedef typename arity6_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R>::first_argument_type first_argument_type;
|
|
typedef typename arity6_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R>::second_argument_type second_argument_type;
|
|
typedef typename arity6_const_mf<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R>::object_type object_type;
|
|
explicit inline arity6pmf_const(pmf6type pmfi) :
|
|
arity0pmf_const<const Object, R>(reinterpret_cast<pmf0type>(pmfi)) {}
|
|
inline arity6pmf_const(const arity6pmf_const& pmfi) : arity0pmf_const<Object, R>(pmfi) {}
|
|
inline virtual R operator()(const Object& o, A1 a1,
|
|
A2 a2,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (o.*pmf)(a1, a2, a3, a4, a5, a6);
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 6 const pmf storage
|
|
template<const class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class R> inline arity6pmf_const<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R>
|
|
arity6_const_member(R (Object::*const pmfi)(A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6) const) {
|
|
return arity6pmf_const<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R>(pmfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 6 obj&pmf ref storage
|
|
template<class Function> class arity6opmf:
|
|
public arity6pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::result_type>,
|
|
public store_object<typename Function::object_type&> {
|
|
public:
|
|
explicit inline arity6opmf(typename Function::object_type& oi, const Function &f) :
|
|
store_object<typename Function::object_type&>(oi), arity6pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::result_type>(f) {}
|
|
explicit inline arity6opmf(typename Function::object_type& oi, pmf6type pmfi) :
|
|
store_object<typename Function::object_type&>(oi), arity6pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::result_type>(pmfi) {}
|
|
inline arity6opmf(const arity6opmf& bndri) :
|
|
store_object<typename Function::object_type&>(bndri), arity6pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::result_type>(bndri) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1,
|
|
typename Function::second_argument_type a2,
|
|
typename Function::argument_3_type a3,
|
|
typename Function::argument_4_type a4,
|
|
typename Function::argument_5_type a5,
|
|
typename Function::argument_6_type a6) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (objval.*pmf)(a1, a2, a3, a4, a5, a6);
|
|
}
|
|
};
|
|
|
|
|
|
// Template Function for arity 6 obj&pmf ref storage
|
|
template<class Function, class Object> inline arity6opmf<Function>
|
|
arity6_member_obj(Object& oi, const Function &f) {
|
|
return arity6opmf<Function>(Function::object_type(oi), Function::pmf6type(f.pmf0));
|
|
};
|
|
|
|
|
|
// Template Class for arity 6 const obj&pmf ref storage
|
|
template<class Function> class arity6opmf_const:
|
|
public arity6pmf_const<const typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::result_type>,
|
|
public store_object<const typename Function::object_type&> {
|
|
public:
|
|
explicit inline arity6opmf_const(typename Function::object_type& oi, const Function &f) :
|
|
store_object<typename Function::object_type&>(oi), arity6pmf_const<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::result_type>(f) {}
|
|
explicit inline arity6opmf_const(typename Function::object_type& oi, pmf6type pmfi) :
|
|
store_object<typename Function::object_type&>(oi), arity6pmf_const<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::result_type>(pmfi) {}
|
|
inline arity6opmf_const(const arity6opmf_const& bndri) :
|
|
store_object<typename Function::object_type&>(bndri), arity6pmf_const<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::result_type>(bndri) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1,
|
|
typename Function::second_argument_type a2,
|
|
typename Function::argument_3_type a3,
|
|
typename Function::argument_4_type a4,
|
|
typename Function::argument_5_type a5,
|
|
typename Function::argument_6_type a6) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (objval.*pmf)(a1, a2, a3, a4, a5, a6);
|
|
}
|
|
};
|
|
|
|
|
|
// Template Function for arity 6 const obj&pmf ref storage
|
|
template<class Function, class Object> inline arity6opmf_const<Function>
|
|
arity6_const_member_obj(Object& oi, const Function &f) {
|
|
return arity6opmf_const<Function>(Function::object_type(oi), Function::pmf6type(f.pmf0));
|
|
};
|
|
|
|
|
|
#if defined(_M_ALPHA) || (_MSC_VER < 1300)
|
|
// Template Function for arity 3 pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
const class A2,
|
|
const class A3,
|
|
class R> inline arity3pmf<Object,
|
|
A1,
|
|
const A2,
|
|
const A3,
|
|
R>
|
|
arity3_member(R (Object::*const pmfi)(A1,
|
|
const A2,
|
|
const A3)) {
|
|
return arity3pmf<Object,
|
|
A1,
|
|
const A2,
|
|
const A3,
|
|
R>(pmfi);
|
|
};
|
|
#endif
|
|
|
|
#if defined(_M_ALPHA) || (_MSC_VER < 1300)
|
|
// Template Function for arity 4 const pmf storage
|
|
template<const class Object,
|
|
const class A1,
|
|
const class A2,
|
|
class A3,
|
|
const class A4,
|
|
class R> inline arity4pmf_const<const Object,
|
|
const A1,
|
|
const A2,
|
|
A3,
|
|
const A4,
|
|
R>
|
|
arity4_const_member(R (Object::*const pmfi)(const A1,
|
|
const A2,
|
|
A3,
|
|
const A4) const) {
|
|
return arity4pmf_const<const Object,
|
|
const A1,
|
|
const A2,
|
|
A3,
|
|
const A4,
|
|
R>(pmfi);
|
|
};
|
|
#endif
|
|
|
|
|
|
// storage allocation classes for arity 0
|
|
|
|
// Template Class for arity 0 function ptr storage
|
|
template<class R> class std_arity0fp:
|
|
public arity0_function<R> {
|
|
public:
|
|
typedef R ( __stdcall *const pf0type) ();
|
|
explicit inline std_arity0fp(pf0type pfi) :
|
|
pf0(pfi) {}
|
|
inline std_arity0fp(const std_arity0fp& fi) :
|
|
pf0(fi.pf0) {}
|
|
inline R operator()() const {
|
|
return pf0();
|
|
}
|
|
pf0type pf0;
|
|
};
|
|
|
|
// Template Function for arity 0 function ptr storage
|
|
template<class R> inline std_arity0fp<R>
|
|
std_arity0_pointer(R ( __stdcall *const pfi)()) {
|
|
return std_arity0fp<R>(pfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 0 pmf storage
|
|
template<class Object, class R> class std_arity0pmf:
|
|
public std_arity0_mf<Object, R> {
|
|
public:
|
|
typedef typename std_arity0_mf<Object, R>::object_type object_type;
|
|
explicit inline std_arity0pmf(pmf0type pmfi) :
|
|
pmf0(pmfi) {}
|
|
inline std_arity0pmf(const std_arity0pmf& pmfi) : pmf0(pmfi.pmf0) {}
|
|
inline virtual R operator()(Object& o ) const {
|
|
return (o.*pmf0)();
|
|
}
|
|
pmf0type pmf0;
|
|
};
|
|
|
|
// Template Function for arity 0 pmf storage
|
|
template<class Object, class R> inline std_arity0pmf<Object, R>
|
|
std_arity0_member(R ( __stdcall Object::*const pmfi)()) {
|
|
return std_arity0pmf<Object, R>(pmfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 0 const pmf storage
|
|
template<class Object, class R> class std_arity0pmf_const:
|
|
public std_arity0_const_mf<const Object, R> {
|
|
public:
|
|
typedef typename std_arity0_const_mf<const Object, R>::object_type object_type;
|
|
explicit inline std_arity0pmf_const(pmf0type pmfi) :
|
|
pmf0(pmfi) {}
|
|
inline std_arity0pmf_const(const std_arity0pmf_const& pmfi) : pmf0(pmfi.pmf0) {}
|
|
inline virtual R operator()(const Object& o ) const {
|
|
return (o.*pmf0)();
|
|
}
|
|
pmf0type pmf0;
|
|
};
|
|
|
|
// Template Function for arity 0 const pmf storage
|
|
template<const class Object, class R> inline std_arity0pmf_const<const Object, R>
|
|
std_arity0_const_member(R ( __stdcall Object::*const pmfi)() const) {
|
|
return std_arity0pmf_const<const Object, R>(pmfi);
|
|
};
|
|
|
|
template<class Object, class R> class std_arity0pmf_ptr:
|
|
public std_arity0pmf<Object, R>, public std::unary_function<Object, R> {
|
|
public:
|
|
explicit inline std_arity0pmf_ptr(pmf0type pmfi) : std_arity0pmf<Object, R>(pmfi) {}
|
|
inline std_arity0pmf_ptr(const std_arity0pmf_ptr& pmfi) : std_arity0pmf<Object, R>(pmfi) {}
|
|
inline virtual R operator()(Object& o ) const {
|
|
return (o.*pmf0)();
|
|
}
|
|
inline virtual R operator()(Object* o ) const {
|
|
return (o->*pmf0)();
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 0 pmf storage
|
|
template<class Object, class R> inline std_arity0pmf_ptr<Object, R>
|
|
std_arity0_member_ptr(R (__stdcall Object::*const pmfi)()) {
|
|
return std_arity0pmf_ptr<Object, R>(pmfi);
|
|
};
|
|
|
|
// Template Class for arity 0 obj&pmf ref storage
|
|
template<class Function> class std_arity0opmf:
|
|
public std_arity0pmf<typename Function::object_type, typename Function::result_type>,
|
|
public store_object<typename Function::object_type&> {
|
|
public:
|
|
explicit inline std_arity0opmf(typename Function::object_type& oi, const Function &f) :
|
|
store_object<typename Function::object_type&>(oi), std_arity0pmf<typename Function::object_type, typename Function::result_type>(f) {}
|
|
explicit inline std_arity0opmf(typename Function::object_type& oi, pmf0type pmfi) :
|
|
store_object<typename Function::object_type&>(oi), std_arity0pmf<typename Function::object_type, typename Function::result_type>(pmfi) {}
|
|
inline std_arity0opmf(const std_arity0opmf& bndri) :
|
|
store_object<typename Function::object_type&>(bndri), std_arity0pmf<typename Function::object_type, typename Function::result_type>(bndri) {}
|
|
inline typename Function::result_type operator()() const {
|
|
return (objval.*pmf0)();
|
|
}
|
|
pmf0type pmf0;
|
|
};
|
|
|
|
|
|
// Template Function for arity 0 obj&pmf ref storage
|
|
template<class Function, class Object> inline std_arity0opmf<Function>
|
|
std_arity0_member_obj(Object& oi, const Function &f) {
|
|
return std_arity0opmf<Function>(Function::object_type(oi), Function::pmf0type(f.pmf0));
|
|
};
|
|
|
|
|
|
// Template Class for arity 0 const obj&pmf ref storage
|
|
template<class Function> class std_arity0opmf_const:
|
|
public std_arity0pmf_const<const typename Function::object_type, typename Function::result_type>,
|
|
public store_object<const typename Function::object_type&> {
|
|
public:
|
|
explicit inline std_arity0opmf_const(typename Function::object_type& oi, const Function &f) :
|
|
store_object<typename Function::object_type&>(oi), std_arity0pmf_const<typename Function::object_type, typename Function::result_type>(f) {}
|
|
explicit inline std_arity0opmf_const(typename Function::object_type& oi, pmf0type pmfi) :
|
|
store_object<typename Function::object_type&>(oi), std_arity0pmf_const<typename Function::object_type, typename Function::result_type>(pmfi) {}
|
|
inline std_arity0opmf_const(const std_arity0opmf_const& bndri) :
|
|
store_object<typename Function::object_type&>(bndri), std_arity0pmf_const<typename Function::object_type, typename Function::result_type>(bndri) {}
|
|
inline typename Function::result_type operator()() const {
|
|
return (objval.*pmf0)();
|
|
}
|
|
pmf0type pmf0;
|
|
};
|
|
|
|
|
|
// Template Function for arity 0 const obj&pmf ref storage
|
|
template<class Function, class Object> inline std_arity0opmf_const<Function>
|
|
std_arity0_const_member_obj(Object& oi, const Function &f) {
|
|
return std_arity0opmf_const<Function>(Function::object_type(oi), Function::pmf0type(f.pmf0));
|
|
};
|
|
|
|
|
|
|
|
// storage allocation classes for arity 1
|
|
|
|
// Template Class for arity 1 function ptr storage
|
|
template<class A1,
|
|
class R> class std_arity1fp:
|
|
public std::unary_function<A1,
|
|
R>,
|
|
public std_arity0fp<R> {
|
|
public:
|
|
typedef typename std::unary_function<A1,
|
|
R>::result_type result_type;
|
|
typedef R ( __stdcall *const pf1type) (A1);
|
|
explicit inline std_arity1fp(pf1type pfi) :
|
|
std_arity0fp<R>(reinterpret_cast<pf0type>(pfi)) {}
|
|
inline std_arity1fp(const std_arity1fp& fi) :
|
|
std_arity0fp<R>(fi) {}
|
|
inline R operator()(A1 a1) const {
|
|
pf1type pf = reinterpret_cast<pf1type>(pf0);
|
|
return pf(a1);
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 1 function ptr storage
|
|
template<class A1,
|
|
class R> inline std_arity1fp<A1,
|
|
R>
|
|
std_arity1_pointer(R ( __stdcall *const pfi)(A1)) {
|
|
return std_arity1fp<A1,
|
|
R>(pfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 1 pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class R> class std_arity1pmf:
|
|
public std_arity1_mf<Object,
|
|
A1,
|
|
R>,
|
|
public std_arity0pmf<Object, R> {
|
|
public:
|
|
typedef typename std::unary_function<A1,
|
|
R>::result_type result_type;
|
|
typedef typename std_arity1_mf<Object,
|
|
A1,
|
|
R>::object_type object_type;
|
|
explicit inline std_arity1pmf(pmf1type pmfi) :
|
|
std_arity0pmf<Object, R>(reinterpret_cast<pmf0type>(pmfi)) {}
|
|
inline std_arity1pmf(const std_arity1pmf& pmfi) : std_arity0pmf<Object, R>(pmfi) {}
|
|
inline virtual R operator()(Object& o, A1 a1) const {
|
|
pmf1type pmf = reinterpret_cast<pmf1type>(pmf0);
|
|
return (o.*pmf)(a1);
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 1 pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class R> inline std_arity1pmf<Object,
|
|
A1,
|
|
R>
|
|
std_arity1_member(R ( __stdcall Object::*const pmfi)(A1)) {
|
|
return std_arity1pmf<Object,
|
|
A1,
|
|
R>(pmfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 1 const pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class R> class std_arity1pmf_const:
|
|
public std_arity1_const_mf<const Object,
|
|
A1,
|
|
R>,
|
|
public std_arity0pmf_const<const Object, R> {
|
|
public:
|
|
typedef typename std::unary_function<A1,
|
|
R>::result_type result_type;
|
|
typedef typename std_arity1_const_mf<const Object,
|
|
A1,
|
|
R>::object_type object_type;
|
|
explicit inline std_arity1pmf_const(pmf1type pmfi) :
|
|
std_arity0pmf_const<const Object, R>(reinterpret_cast<pmf0type>(pmfi)) {}
|
|
inline std_arity1pmf_const(const std_arity1pmf_const& pmfi) : std_arity0pmf_const<Object, R>(pmfi) {}
|
|
inline virtual R operator()(const Object& o, A1 a1) const {
|
|
pmf1type pmf = reinterpret_cast<pmf1type>(pmf0);
|
|
return (o.*pmf)(a1);
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 1 const pmf storage
|
|
template<const class Object,
|
|
class A1,
|
|
class R> inline std_arity1pmf_const<const Object,
|
|
A1,
|
|
R>
|
|
std_arity1_const_member(R ( __stdcall Object::*const pmfi)(A1) const) {
|
|
return std_arity1pmf_const<const Object,
|
|
A1,
|
|
R>(pmfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 1 obj&pmf ref storage
|
|
template<class Function> class std_arity1opmf:
|
|
public std_arity1pmf<typename Function::object_type,
|
|
typename Function::argument_type,
|
|
typename Function::result_type>,
|
|
public store_object<typename Function::object_type&> {
|
|
public:
|
|
explicit inline std_arity1opmf(typename Function::object_type& oi, const Function &f) :
|
|
store_object<typename Function::object_type&>(oi), std_arity1pmf<typename Function::object_type,
|
|
typename Function::argument_type,
|
|
typename Function::result_type>(f) {}
|
|
explicit inline std_arity1opmf(typename Function::object_type& oi, pmf1type pmfi) :
|
|
store_object<typename Function::object_type&>(oi), std_arity1pmf<typename Function::object_type,
|
|
typename Function::argument_type,
|
|
typename Function::result_type>(pmfi) {}
|
|
inline std_arity1opmf(const std_arity1opmf& bndri) :
|
|
store_object<typename Function::object_type&>(bndri), std_arity1pmf<typename Function::object_type,
|
|
typename Function::argument_type,
|
|
typename Function::result_type>(bndri) {}
|
|
inline typename Function::result_type operator()(typename Function::argument_type a1) const {
|
|
pmf1type pmf = reinterpret_cast<pmf1type>(pmf0);
|
|
return (objval.*pmf)(a1);
|
|
}
|
|
};
|
|
|
|
|
|
// Template Function for arity 1 obj&pmf ref storage
|
|
template<class Function, class Object> inline std_arity1opmf<Function>
|
|
std_arity1_member_obj(Object& oi, const Function &f) {
|
|
return std_arity1opmf<Function>(Function::object_type(oi), Function::pmf1type(f.pmf0));
|
|
};
|
|
|
|
|
|
// Template Class for arity 1 const obj&pmf ref storage
|
|
template<class Function> class std_arity1opmf_const:
|
|
public std_arity1pmf_const<const typename Function::object_type,
|
|
typename Function::argument_type,
|
|
typename Function::result_type>,
|
|
public store_object<const typename Function::object_type&> {
|
|
public:
|
|
explicit inline std_arity1opmf_const(typename Function::object_type& oi, const Function &f) :
|
|
store_object<typename Function::object_type&>(oi), std_arity1pmf_const<typename Function::object_type,
|
|
typename Function::argument_type,
|
|
typename Function::result_type>(f) {}
|
|
explicit inline std_arity1opmf_const(typename Function::object_type& oi, pmf1type pmfi) :
|
|
store_object<typename Function::object_type&>(oi), std_arity1pmf_const<typename Function::object_type,
|
|
typename Function::argument_type,
|
|
typename Function::result_type>(pmfi) {}
|
|
inline std_arity1opmf_const(const std_arity1opmf_const& bndri) :
|
|
store_object<typename Function::object_type&>(bndri), std_arity1pmf_const<typename Function::object_type,
|
|
typename Function::argument_type,
|
|
typename Function::result_type>(bndri) {}
|
|
inline typename Function::result_type operator()(typename Function::argument_type a1) const {
|
|
pmf1type pmf = reinterpret_cast<pmf1type>(pmf0);
|
|
return (objval.*pmf)(a1);
|
|
}
|
|
};
|
|
|
|
|
|
// Template Function for arity 1 const obj&pmf ref storage
|
|
template<class Function, class Object> inline std_arity1opmf_const<Function>
|
|
std_arity1_const_member_obj(Object& oi, const Function &f) {
|
|
return std_arity1opmf_const<Function>(Function::object_type(oi), Function::pmf1type(f.pmf0));
|
|
};
|
|
|
|
|
|
|
|
// storage allocation classes for arity 2
|
|
|
|
// Template Class for arity 2 function ptr storage
|
|
template<class A1,
|
|
class A2,
|
|
class R> class std_arity2fp:
|
|
public std::binary_function<A1,
|
|
A2,
|
|
R>,
|
|
public std_arity0fp<R> {
|
|
public:
|
|
typedef typename std::binary_function<A1,
|
|
A2,
|
|
R>::result_type result_type;
|
|
typedef typename std::binary_function<A1,
|
|
A2,
|
|
R>::first_argument_type first_argument_type;
|
|
typedef R ( __stdcall *const pf2type) (A1, A2);
|
|
explicit inline std_arity2fp(pf2type pfi) :
|
|
std_arity0fp<R>(reinterpret_cast<pf0type>(pfi)) {}
|
|
inline std_arity2fp(const std_arity2fp& fi) :
|
|
std_arity0fp<R>(fi) {}
|
|
inline R operator()(A1 a1,
|
|
A2 a2) const {
|
|
pf2type pf = reinterpret_cast<pf2type>(pf0);
|
|
return pf(a1, a2);
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 2 function ptr storage
|
|
template<class A1,
|
|
class A2,
|
|
class R> inline std_arity2fp<A1,
|
|
A2,
|
|
R>
|
|
std_arity2_pointer(R ( __stdcall *const pfi)(A1,
|
|
A2)) {
|
|
return std_arity2fp<A1,
|
|
A2,
|
|
R>(pfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 2 pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class R> class std_arity2pmf:
|
|
public std_arity2_mf<Object,
|
|
A1,
|
|
A2,
|
|
R>,
|
|
public std_arity0pmf<Object, R> {
|
|
public:
|
|
typedef typename std::binary_function<A1,
|
|
A2,
|
|
R>::result_type result_type;
|
|
typedef typename std::binary_function<A1,
|
|
A2,
|
|
R>::first_argument_type first_argument_type;
|
|
typedef typename std_arity2_mf<Object,
|
|
A1,
|
|
A2,
|
|
R>::object_type object_type;
|
|
explicit inline std_arity2pmf(pmf2type pmfi) :
|
|
std_arity0pmf<Object, R>(reinterpret_cast<pmf0type>(pmfi)) {}
|
|
inline std_arity2pmf(const std_arity2pmf& pmfi) : std_arity0pmf<Object, R>(pmfi) {}
|
|
inline virtual R operator()(Object& o, A1 a1,
|
|
A2 a2) const {
|
|
pmf2type pmf = reinterpret_cast<pmf2type>(pmf0);
|
|
return (o.*pmf)(a1, a2);
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 2 pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class R> inline std_arity2pmf<Object,
|
|
A1,
|
|
A2,
|
|
R>
|
|
std_arity2_member(R ( __stdcall Object::*const pmfi)(A1,
|
|
A2)) {
|
|
return std_arity2pmf<Object,
|
|
A1,
|
|
A2,
|
|
R>(pmfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 2 const pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class R> class std_arity2pmf_const:
|
|
public std_arity2_const_mf<const Object,
|
|
A1,
|
|
A2,
|
|
R>,
|
|
public std_arity0pmf_const<const Object, R> {
|
|
public:
|
|
typedef typename std::binary_function<A1,
|
|
A2,
|
|
R>::result_type result_type;
|
|
typedef typename std::binary_function<A1,
|
|
A2,
|
|
R>::first_argument_type first_argument_type;
|
|
typedef typename std_arity2_const_mf<const Object,
|
|
A1,
|
|
A2,
|
|
R>::object_type object_type;
|
|
explicit inline std_arity2pmf_const(pmf2type pmfi) :
|
|
std_arity0pmf_const<const Object, R>(reinterpret_cast<pmf0type>(pmfi)) {}
|
|
inline std_arity2pmf_const(const std_arity2pmf_const& pmfi) : std_arity0pmf_const<Object, R>(pmfi) {}
|
|
inline virtual R operator()(const Object& o, A1 a1,
|
|
A2 a2) const {
|
|
pmf2type pmf = reinterpret_cast<pmf2type>(pmf0);
|
|
return (o.*pmf)(a1, a2);
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 2 const pmf storage
|
|
template<const class Object,
|
|
class A1,
|
|
class A2,
|
|
class R> inline std_arity2pmf_const<const Object,
|
|
A1,
|
|
A2,
|
|
R>
|
|
std_arity2_const_member(R ( __stdcall Object::*const pmfi)(A1,
|
|
A2) const) {
|
|
return std_arity2pmf_const<const Object,
|
|
A1,
|
|
A2,
|
|
R>(pmfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 2 obj&pmf ref storage
|
|
template<class Function> class std_arity2opmf:
|
|
public std_arity2pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::result_type>,
|
|
public store_object<typename Function::object_type&> {
|
|
public:
|
|
explicit inline std_arity2opmf(typename Function::object_type& oi, const Function &f) :
|
|
store_object<typename Function::object_type&>(oi), std_arity2pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::result_type>(f) {}
|
|
explicit inline std_arity2opmf(typename Function::object_type& oi, pmf2type pmfi) :
|
|
store_object<typename Function::object_type&>(oi), std_arity2pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::result_type>(pmfi) {}
|
|
inline std_arity2opmf(const std_arity2opmf& bndri) :
|
|
store_object<typename Function::object_type&>(bndri), std_arity2pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::result_type>(bndri) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1,
|
|
typename Function::second_argument_type a2) const {
|
|
pmf2type pmf = reinterpret_cast<pmf2type>(pmf0);
|
|
return (objval.*pmf)(a1, a2);
|
|
}
|
|
};
|
|
|
|
|
|
// Template Function for arity 2 obj&pmf ref storage
|
|
template<class Function, class Object> inline std_arity2opmf<Function>
|
|
std_arity2_member_obj(Object& oi, const Function &f) {
|
|
return std_arity2opmf<Function>(Function::object_type(oi), Function::pmf2type(f.pmf0));
|
|
};
|
|
|
|
|
|
// Template Class for arity 2 const obj&pmf ref storage
|
|
template<class Function> class std_arity2opmf_const:
|
|
public std_arity2pmf_const<const typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::result_type>,
|
|
public store_object<const typename Function::object_type&> {
|
|
public:
|
|
explicit inline std_arity2opmf_const(typename Function::object_type& oi, const Function &f) :
|
|
store_object<typename Function::object_type&>(oi), std_arity2pmf_const<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::result_type>(f) {}
|
|
explicit inline std_arity2opmf_const(typename Function::object_type& oi, pmf2type pmfi) :
|
|
store_object<typename Function::object_type&>(oi), std_arity2pmf_const<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::result_type>(pmfi) {}
|
|
inline std_arity2opmf_const(const std_arity2opmf_const& bndri) :
|
|
store_object<typename Function::object_type&>(bndri), std_arity2pmf_const<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::result_type>(bndri) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1,
|
|
typename Function::second_argument_type a2) const {
|
|
pmf2type pmf = reinterpret_cast<pmf2type>(pmf0);
|
|
return (objval.*pmf)(a1, a2);
|
|
}
|
|
};
|
|
|
|
|
|
// Template Function for arity 2 const obj&pmf ref storage
|
|
template<class Function, class Object> inline std_arity2opmf_const<Function>
|
|
std_arity2_const_member_obj(Object& oi, const Function &f) {
|
|
return std_arity2opmf_const<Function>(Function::object_type(oi), Function::pmf2type(f.pmf0));
|
|
};
|
|
|
|
|
|
|
|
// storage allocation classes for arity 3
|
|
|
|
// Template Class for arity 3 function ptr storage
|
|
template<class A1,
|
|
class A2,
|
|
class A3,
|
|
class R> class std_arity3fp:
|
|
public arity3_function<A1,
|
|
A2,
|
|
A3,
|
|
R>,
|
|
public std_arity0fp<R> {
|
|
public:
|
|
typedef typename arity3_function<A1,
|
|
A2,
|
|
A3,
|
|
R>::result_type result_type;
|
|
typedef typename arity3_function<A1,
|
|
A2,
|
|
A3,
|
|
R>::first_argument_type first_argument_type;
|
|
typedef typename arity3_function<A1,
|
|
A2,
|
|
A3,
|
|
R>::second_argument_type second_argument_type;
|
|
typedef R ( __stdcall *const pf3type) (A1, A2, A3);
|
|
explicit inline std_arity3fp(pf3type pfi) :
|
|
std_arity0fp<R>(reinterpret_cast<pf0type>(pfi)) {}
|
|
inline std_arity3fp(const std_arity3fp& fi) :
|
|
std_arity0fp<R>(fi) {}
|
|
inline R operator()(A1 a1,
|
|
A2 a2,
|
|
A3 a3) const {
|
|
pf3type pf = reinterpret_cast<pf3type>(pf0);
|
|
return pf(a1, a2, a3);
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 3 function ptr storage
|
|
template<class A1,
|
|
class A2,
|
|
class A3,
|
|
class R> inline std_arity3fp<A1,
|
|
A2,
|
|
A3,
|
|
R>
|
|
std_arity3_pointer(R ( __stdcall *const pfi)(A1,
|
|
A2,
|
|
A3)) {
|
|
return std_arity3fp<A1,
|
|
A2,
|
|
A3,
|
|
R>(pfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 3 pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class R> class std_arity3pmf:
|
|
public std_arity3_mf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
R>,
|
|
public std_arity0pmf<Object, R> {
|
|
public:
|
|
typedef typename arity3_function<A1,
|
|
A2,
|
|
A3,
|
|
R>::result_type result_type;
|
|
typedef typename arity3_function<A1,
|
|
A2,
|
|
A3,
|
|
R>::first_argument_type first_argument_type;
|
|
typedef typename arity3_function<A1,
|
|
A2,
|
|
A3,
|
|
R>::second_argument_type second_argument_type;
|
|
typedef typename std_arity3_mf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
R>::object_type object_type;
|
|
explicit inline std_arity3pmf(pmf3type pmfi) :
|
|
std_arity0pmf<Object, R>(reinterpret_cast<pmf0type>(pmfi)) {}
|
|
inline std_arity3pmf(const std_arity3pmf& pmfi) : std_arity0pmf<Object, R>(pmfi) {}
|
|
inline virtual R operator()(Object& o, A1 a1,
|
|
A2 a2,
|
|
A3 a3) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (o.*pmf)(a1, a2, a3);
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 3 pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class R> inline std_arity3pmf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
R>
|
|
std_arity3_member(R ( __stdcall Object::*const pmfi)(A1,
|
|
A2,
|
|
A3)) {
|
|
return std_arity3pmf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
R>(pmfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 3 const pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class R> class std_arity3pmf_const:
|
|
public std_arity3_const_mf<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
R>,
|
|
public std_arity0pmf_const<const Object, R> {
|
|
public:
|
|
typedef typename arity3_function<A1,
|
|
A2,
|
|
A3,
|
|
R>::result_type result_type;
|
|
typedef typename arity3_function<A1,
|
|
A2,
|
|
A3,
|
|
R>::first_argument_type first_argument_type;
|
|
typedef typename arity3_function<A1,
|
|
A2,
|
|
A3,
|
|
R>::second_argument_type second_argument_type;
|
|
typedef typename std_arity3_const_mf<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
R>::object_type object_type;
|
|
explicit inline std_arity3pmf_const(pmf3type pmfi) :
|
|
std_arity0pmf_const<const Object, R>(reinterpret_cast<pmf0type>(pmfi)) {}
|
|
inline std_arity3pmf_const(const std_arity3pmf_const& pmfi) : std_arity0pmf_const<Object, R>(pmfi) {}
|
|
inline virtual R operator()(const Object& o, A1 a1,
|
|
A2 a2,
|
|
A3 a3) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (o.*pmf)(a1, a2, a3);
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 3 const pmf storage
|
|
template<const class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class R> inline std_arity3pmf_const<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
R>
|
|
std_arity3_const_member(R ( __stdcall Object::*const pmfi)(A1,
|
|
A2,
|
|
A3) const) {
|
|
return std_arity3pmf_const<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
R>(pmfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 3 obj&pmf ref storage
|
|
template<class Function> class std_arity3opmf:
|
|
public std_arity3pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::result_type>,
|
|
public store_object<typename Function::object_type&> {
|
|
public:
|
|
explicit inline std_arity3opmf(typename Function::object_type& oi, const Function &f) :
|
|
store_object<typename Function::object_type&>(oi), std_arity3pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::result_type>(f) {}
|
|
explicit inline std_arity3opmf(typename Function::object_type& oi, pmf3type pmfi) :
|
|
store_object<typename Function::object_type&>(oi), std_arity3pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::result_type>(pmfi) {}
|
|
inline std_arity3opmf(const std_arity3opmf& bndri) :
|
|
store_object<typename Function::object_type&>(bndri), std_arity3pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::result_type>(bndri) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1,
|
|
typename Function::second_argument_type a2,
|
|
typename Function::argument_3_type a3) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (objval.*pmf)(a1, a2, a3);
|
|
}
|
|
};
|
|
|
|
|
|
// Template Function for arity 3 obj&pmf ref storage
|
|
template<class Function, class Object> inline std_arity3opmf<Function>
|
|
std_arity3_member_obj(Object& oi, const Function &f) {
|
|
return std_arity3opmf<Function>(Function::object_type(oi), Function::pmf3type(f.pmf0));
|
|
};
|
|
|
|
|
|
// Template Class for arity 3 const obj&pmf ref storage
|
|
template<class Function> class std_arity3opmf_const:
|
|
public std_arity3pmf_const<const typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::result_type>,
|
|
public store_object<const typename Function::object_type&> {
|
|
public:
|
|
explicit inline std_arity3opmf_const(typename Function::object_type& oi, const Function &f) :
|
|
store_object<typename Function::object_type&>(oi), std_arity3pmf_const<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::result_type>(f) {}
|
|
explicit inline std_arity3opmf_const(typename Function::object_type& oi, pmf3type pmfi) :
|
|
store_object<typename Function::object_type&>(oi), std_arity3pmf_const<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::result_type>(pmfi) {}
|
|
inline std_arity3opmf_const(const std_arity3opmf_const& bndri) :
|
|
store_object<typename Function::object_type&>(bndri), std_arity3pmf_const<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::result_type>(bndri) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1,
|
|
typename Function::second_argument_type a2,
|
|
typename Function::argument_3_type a3) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (objval.*pmf)(a1, a2, a3);
|
|
}
|
|
};
|
|
|
|
|
|
// Template Function for arity 3 const obj&pmf ref storage
|
|
template<class Function, class Object> inline std_arity3opmf_const<Function>
|
|
std_arity3_const_member_obj(Object& oi, const Function &f) {
|
|
return std_arity3opmf_const<Function>(typename Function::object_type(oi), typename Function::pmf3type(f.pmf0));
|
|
};
|
|
|
|
|
|
|
|
// storage allocation classes for arity 4
|
|
|
|
// Template Class for arity 4 pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class R> class std_arity4pmf:
|
|
public std_arity4_mf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R>,
|
|
public std_arity0pmf<Object, R> {
|
|
public:
|
|
typedef typename arity4_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R>::result_type result_type;
|
|
typedef typename arity4_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R>::first_argument_type first_argument_type;
|
|
typedef typename arity4_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R>::second_argument_type second_argument_type;
|
|
typedef typename std_arity4_mf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R>::object_type object_type;
|
|
explicit inline std_arity4pmf(pmf4type pmfi) :
|
|
std_arity0pmf<Object, R>(reinterpret_cast<pmf0type>(pmfi)) {}
|
|
inline std_arity4pmf(const std_arity4pmf& pmfi) : std_arity0pmf<Object, R>(pmfi) {}
|
|
inline virtual R operator()(Object& o, A1 a1,
|
|
A2 a2,
|
|
A3 a3,
|
|
A4 a4) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (o.*pmf)(a1, a2, a3, a4);
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 4 pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class R> inline std_arity4pmf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R>
|
|
std_arity4_member(R ( __stdcall Object::*const pmfi)(A1,
|
|
A2,
|
|
A3,
|
|
A4)) {
|
|
return std_arity4pmf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R>(pmfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 4 const pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class R> class std_arity4pmf_const:
|
|
public std_arity4_const_mf<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R>,
|
|
public std_arity0pmf_const<const Object, R> {
|
|
public:
|
|
typedef typename arity4_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R>::result_type result_type;
|
|
typedef typename arity4_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R>::first_argument_type first_argument_type;
|
|
typedef typename arity4_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R>::second_argument_type second_argument_type;
|
|
typedef typename std_arity4_const_mf<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R>::object_type object_type;
|
|
explicit inline std_arity4pmf_const(pmf4type pmfi) :
|
|
std_arity0pmf_const<const Object, R>(reinterpret_cast<pmf0type>(pmfi)) {}
|
|
inline std_arity4pmf_const(const std_arity4pmf_const& pmfi) : std_arity0pmf_const<Object, R>(pmfi) {}
|
|
inline virtual R operator()(const Object& o, A1 a1,
|
|
A2 a2,
|
|
A3 a3,
|
|
A4 a4) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (o.*pmf)(a1, a2, a3, a4);
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 4 const pmf storage
|
|
template<const class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class R> inline std_arity4pmf_const<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R>
|
|
std_arity4_const_member(R ( __stdcall Object::*const pmfi)(A1,
|
|
A2,
|
|
A3,
|
|
A4) const) {
|
|
return std_arity4pmf_const<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
R>(pmfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 4 obj&pmf ref storage
|
|
template<class Function> class std_arity4opmf:
|
|
public std_arity4pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::result_type>,
|
|
public store_object<typename Function::object_type&> {
|
|
public:
|
|
explicit inline std_arity4opmf(typename Function::object_type& oi, const Function &f) :
|
|
store_object<typename Function::object_type&>(oi), std_arity4pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::result_type>(f) {}
|
|
explicit inline std_arity4opmf(typename Function::object_type& oi, pmf4type pmfi) :
|
|
store_object<typename Function::object_type&>(oi), std_arity4pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::result_type>(pmfi) {}
|
|
inline std_arity4opmf(const std_arity4opmf& bndri) :
|
|
store_object<typename Function::object_type&>(bndri), std_arity4pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::result_type>(bndri) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1,
|
|
typename Function::second_argument_type a2,
|
|
typename Function::argument_3_type a3,
|
|
typename Function::argument_4_type a4) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (objval.*pmf)(a1, a2, a3, a4);
|
|
}
|
|
};
|
|
|
|
|
|
// Template Function for arity 4 obj&pmf ref storage
|
|
template<class Function, class Object> inline std_arity4opmf<Function>
|
|
std_arity4_member_obj(Object& oi, const Function &f) {
|
|
return std_arity4opmf<Function>(typename Function::object_type(oi), typename Function::pmf4type(f.pmf0));
|
|
};
|
|
|
|
|
|
// Template Class for arity 4 const obj&pmf ref storage
|
|
template<class Function> class std_arity4opmf_const:
|
|
public std_arity4pmf_const<const typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::result_type>,
|
|
public store_object<const typename Function::object_type&> {
|
|
public:
|
|
explicit inline std_arity4opmf_const(typename Function::object_type& oi, const Function &f) :
|
|
store_object<typename Function::object_type&>(oi), std_arity4pmf_const<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::result_type>(f) {}
|
|
explicit inline std_arity4opmf_const(typename Function::object_type& oi, pmf4type pmfi) :
|
|
store_object<typename Function::object_type&>(oi), std_arity4pmf_const<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::result_type>(pmfi) {}
|
|
inline std_arity4opmf_const(const std_arity4opmf_const& bndri) :
|
|
store_object<typename Function::object_type&>(bndri), std_arity4pmf_const<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::result_type>(bndri) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1,
|
|
typename Function::second_argument_type a2,
|
|
typename Function::argument_3_type a3,
|
|
typename Function::argument_4_type a4) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (objval.*pmf)(a1, a2, a3, a4);
|
|
}
|
|
};
|
|
|
|
|
|
// Template Function for arity 4 const obj&pmf ref storage
|
|
template<class Function, class Object> inline std_arity4opmf_const<Function>
|
|
std_arity4_const_member_obj(Object& oi, const Function &f) {
|
|
return std_arity4opmf_const<Function>(typename Function::object_type(oi), typename Function::pmf4type(f.pmf0));
|
|
};
|
|
|
|
|
|
|
|
// storage allocation classes for arity 5
|
|
|
|
// Template Class for arity 5 pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class R> class std_arity5pmf:
|
|
public std_arity5_mf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R>,
|
|
public std_arity0pmf<Object, R> {
|
|
public:
|
|
typedef typename arity5_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R>::result_type result_type;
|
|
typedef typename arity5_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R>::first_argument_type first_argument_type;
|
|
typedef typename arity5_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R>::second_argument_type second_argument_type;
|
|
typedef typename std_arity5_mf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R>::object_type object_type;
|
|
explicit inline std_arity5pmf(pmf5type pmfi) :
|
|
std_arity0pmf<Object, R>(reinterpret_cast<pmf0type>(pmfi)) {}
|
|
inline std_arity5pmf(const std_arity5pmf& pmfi) : std_arity0pmf<Object, R>(pmfi) {}
|
|
inline virtual R operator()(Object& o, A1 a1,
|
|
A2 a2,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (o.*pmf)(a1, a2, a3, a4, a5);
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 5 pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class R> inline std_arity5pmf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R>
|
|
std_arity5_member(R ( __stdcall Object::*const pmfi)(A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5)) {
|
|
return std_arity5pmf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R>(pmfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 5 const pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class R> class std_arity5pmf_const:
|
|
public std_arity5_const_mf<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R>,
|
|
public std_arity0pmf_const<const Object, R> {
|
|
public:
|
|
typedef typename arity5_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R>::result_type result_type;
|
|
typedef typename arity5_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R>::first_argument_type first_argument_type;
|
|
typedef typename arity5_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R>::second_argument_type second_argument_type;
|
|
typedef typename std_arity5_const_mf<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R>::object_type object_type;
|
|
explicit inline std_arity5pmf_const(pmf5type pmfi) :
|
|
std_arity0pmf_const<const Object, R>(reinterpret_cast<pmf0type>(pmfi)) {}
|
|
inline std_arity5pmf_const(const std_arity5pmf_const& pmfi) : std_arity0pmf_const<Object, R>(pmfi) {}
|
|
inline virtual R operator()(const Object& o, A1 a1,
|
|
A2 a2,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (o.*pmf)(a1, a2, a3, a4, a5);
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 5 const pmf storage
|
|
template<const class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class R> inline std_arity5pmf_const<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R>
|
|
std_arity5_const_member(R ( __stdcall Object::*const pmfi)(A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5) const) {
|
|
return std_arity5pmf_const<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
R>(pmfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 5 obj&pmf ref storage
|
|
template<class Function> class std_arity5opmf:
|
|
public std_arity5pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::result_type>,
|
|
public store_object<typename Function::object_type&> {
|
|
public:
|
|
explicit inline std_arity5opmf(typename Function::object_type& oi, const Function &f) :
|
|
store_object<typename Function::object_type&>(oi), std_arity5pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::result_type>(f) {}
|
|
explicit inline std_arity5opmf(typename Function::object_type& oi, pmf5type pmfi) :
|
|
store_object<typename Function::object_type&>(oi), std_arity5pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::result_type>(pmfi) {}
|
|
inline std_arity5opmf(const std_arity5opmf& bndri) :
|
|
store_object<typename Function::object_type&>(bndri), std_arity5pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::result_type>(bndri) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1,
|
|
typename Function::second_argument_type a2,
|
|
typename Function::argument_3_type a3,
|
|
typename Function::argument_4_type a4,
|
|
typename Function::argument_5_type a5) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (objval.*pmf)(a1, a2, a3, a4, a5);
|
|
}
|
|
};
|
|
|
|
|
|
// Template Function for arity 5 obj&pmf ref storage
|
|
template<class Function, class Object> inline std_arity5opmf<Function>
|
|
std_arity5_member_obj(Object& oi, const Function &f) {
|
|
return std_arity5opmf<Function>(typename Function::object_type(oi), typename Function::pmf5type(f.pmf0));
|
|
};
|
|
|
|
|
|
// Template Class for arity 5 const obj&pmf ref storage
|
|
template<class Function> class std_arity5opmf_const:
|
|
public std_arity5pmf_const<const typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::result_type>,
|
|
public store_object<const typename Function::object_type&> {
|
|
public:
|
|
explicit inline std_arity5opmf_const(typename Function::object_type& oi, const Function &f) :
|
|
store_object<typename Function::object_type&>(oi), std_arity5pmf_const<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::result_type>(f) {}
|
|
explicit inline std_arity5opmf_const(typename Function::object_type& oi, pmf5type pmfi) :
|
|
store_object<typename Function::object_type&>(oi), std_arity5pmf_const<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::result_type>(pmfi) {}
|
|
inline std_arity5opmf_const(const std_arity5opmf_const& bndri) :
|
|
store_object<typename Function::object_type&>(bndri), std_arity5pmf_const<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::result_type>(bndri) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1,
|
|
typename Function::second_argument_type a2,
|
|
typename Function::argument_3_type a3,
|
|
typename Function::argument_4_type a4,
|
|
typename Function::argument_5_type a5) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (objval.*pmf)(a1, a2, a3, a4, a5);
|
|
}
|
|
};
|
|
|
|
|
|
// Template Function for arity 5 const obj&pmf ref storage
|
|
template<class Function, class Object> inline std_arity5opmf_const<Function>
|
|
std_arity5_const_member_obj(Object& oi, const Function &f) {
|
|
return std_arity5opmf_const<Function>(typename Function::object_type(oi), typename Function::pmf5type(f.pmf0));
|
|
};
|
|
|
|
|
|
|
|
// storage allocation classes for arity 6
|
|
|
|
// Template Class for arity 6 pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class R> class std_arity6pmf:
|
|
public std_arity6_mf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R>,
|
|
public std_arity0pmf<Object, R> {
|
|
public:
|
|
typedef typename arity6_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R>::result_type result_type;
|
|
typedef typename arity6_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R>::first_argument_type first_argument_type;
|
|
typedef typename arity6_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R>::second_argument_type second_argument_type;
|
|
typedef typename std_arity6_mf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R>::object_type object_type;
|
|
explicit inline std_arity6pmf(pmf6type pmfi) :
|
|
std_arity0pmf<Object, R>(reinterpret_cast<pmf0type>(pmfi)) {}
|
|
inline std_arity6pmf(const std_arity6pmf& pmfi) : std_arity0pmf<Object, R>(pmfi) {}
|
|
inline virtual R operator()(Object& o, A1 a1,
|
|
A2 a2,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (o.*pmf)(a1, a2, a3, a4, a5, a6);
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 6 pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class R> inline std_arity6pmf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R>
|
|
std_arity6_member(R ( __stdcall Object::*const pmfi)(A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6)) {
|
|
return std_arity6pmf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R>(pmfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 6 const pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class R> class std_arity6pmf_const:
|
|
public std_arity6_const_mf<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R>,
|
|
public std_arity0pmf_const<const Object, R> {
|
|
public:
|
|
typedef typename arity6_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R>::result_type result_type;
|
|
typedef typename arity6_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R>::first_argument_type first_argument_type;
|
|
typedef typename arity6_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R>::second_argument_type second_argument_type;
|
|
typedef typename std_arity6_const_mf<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R>::object_type object_type;
|
|
explicit inline std_arity6pmf_const(pmf6type pmfi) :
|
|
std_arity0pmf_const<const Object, R>(reinterpret_cast<pmf0type>(pmfi)) {}
|
|
inline std_arity6pmf_const(const std_arity6pmf_const& pmfi) : std_arity0pmf_const<Object, R>(pmfi) {}
|
|
inline virtual R operator()(const Object& o, A1 a1,
|
|
A2 a2,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (o.*pmf)(a1, a2, a3, a4, a5, a6);
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 6 const pmf storage
|
|
template<const class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class R> inline std_arity6pmf_const<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R>
|
|
std_arity6_const_member(R ( __stdcall Object::*const pmfi)(A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6) const) {
|
|
return std_arity6pmf_const<const Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
R>(pmfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 6 obj&pmf ref storage
|
|
template<class Function> class std_arity6opmf:
|
|
public std_arity6pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::result_type>,
|
|
public store_object<typename Function::object_type&> {
|
|
public:
|
|
explicit inline std_arity6opmf(typename Function::object_type& oi, const Function &f) :
|
|
store_object<typename Function::object_type&>(oi), std_arity6pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::result_type>(f) {}
|
|
explicit inline std_arity6opmf(typename Function::object_type& oi, pmf6type pmfi) :
|
|
store_object<typename Function::object_type&>(oi), std_arity6pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::result_type>(pmfi) {}
|
|
inline std_arity6opmf(const std_arity6opmf& bndri) :
|
|
store_object<typename Function::object_type&>(bndri), std_arity6pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::result_type>(bndri) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1,
|
|
typename Function::second_argument_type a2,
|
|
typename Function::argument_3_type a3,
|
|
typename Function::argument_4_type a4,
|
|
typename Function::argument_5_type a5,
|
|
typename Function::argument_6_type a6) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (objval.*pmf)(a1, a2, a3, a4, a5, a6);
|
|
}
|
|
};
|
|
|
|
|
|
// Template Function for arity 6 obj&pmf ref storage
|
|
template<class Function, class Object> inline std_arity6opmf<Function>
|
|
std_arity6_member_obj(Object& oi, const Function &f) {
|
|
return std_arity6opmf<Function>(typename Function::object_type(oi), typename Function::pmf6type(f.pmf0));
|
|
};
|
|
|
|
|
|
// Template Class for arity 6 const obj&pmf ref storage
|
|
template<class Function> class std_arity6opmf_const:
|
|
public std_arity6pmf_const<const typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::result_type>,
|
|
public store_object<const typename Function::object_type&> {
|
|
public:
|
|
explicit inline std_arity6opmf_const(typename Function::object_type& oi, const Function &f) :
|
|
store_object<typename Function::object_type&>(oi), std_arity6pmf_const<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::result_type>(f) {}
|
|
explicit inline std_arity6opmf_const(typename Function::object_type& oi, pmf6type pmfi) :
|
|
store_object<typename Function::object_type&>(oi), std_arity6pmf_const<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::result_type>(pmfi) {}
|
|
inline std_arity6opmf_const(const std_arity6opmf_const& bndri) :
|
|
store_object<typename Function::object_type&>(bndri), std_arity6pmf_const<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::result_type>(bndri) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1,
|
|
typename Function::second_argument_type a2,
|
|
typename Function::argument_3_type a3,
|
|
typename Function::argument_4_type a4,
|
|
typename Function::argument_5_type a5,
|
|
typename Function::argument_6_type a6) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (objval.*pmf)(a1, a2, a3, a4, a5, a6);
|
|
}
|
|
};
|
|
|
|
|
|
// Template Function for arity 6 const obj&pmf ref storage
|
|
template<class Function, class Object> inline std_arity6opmf_const<Function>
|
|
std_arity6_const_member_obj(Object& oi, const Function &f) {
|
|
return std_arity6opmf_const<Function>(typename Function::object_type(oi), typename Function::pmf6type(f.pmf0));
|
|
};
|
|
|
|
|
|
// Template Class for arity 15 pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class A12,
|
|
class A13,
|
|
class A14,
|
|
class A15,
|
|
class R> class std_arity15pmf:
|
|
public std_arity15_mf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
A12,
|
|
A13,
|
|
A14,
|
|
A15,
|
|
R>,
|
|
public std_arity0pmf<Object, R> {
|
|
public:
|
|
typedef typename arity15_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
A12,
|
|
A13,
|
|
A14,
|
|
A15,
|
|
R>::result_type result_type;
|
|
typedef typename arity15_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
A12,
|
|
A13,
|
|
A14,
|
|
A15,
|
|
R>::first_argument_type first_argument_type;
|
|
typedef typename arity15_function<A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
A12,
|
|
A13,
|
|
A14,
|
|
A15,
|
|
R>::second_argument_type second_argument_type;
|
|
typedef typename std_arity15_mf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
A12,
|
|
A13,
|
|
A14,
|
|
A15,
|
|
R>::object_type object_type;
|
|
explicit inline std_arity15pmf(pmf15type pmfi) :
|
|
std_arity0pmf<Object, R>(reinterpret_cast<pmf0type>(pmfi)) {}
|
|
inline std_arity15pmf(const std_arity15pmf& pmfi) : std_arity0pmf<Object, R>(pmfi) {}
|
|
inline virtual R operator()(Object& o, A1 a1,
|
|
A2 a2,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6,
|
|
A7 a7,
|
|
A8 a8,
|
|
A9 a9,
|
|
A10 a10,
|
|
A11 a11,
|
|
A12 a12,
|
|
A13 a13,
|
|
A14 a14,
|
|
A15 a15) const {
|
|
pmf15type pmf = reinterpret_cast<pmf15type>(pmf0);
|
|
return (o.*pmf)(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15);
|
|
}
|
|
};
|
|
|
|
// Template Function for arity 15 pmf storage
|
|
template<class Object,
|
|
class A1,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class A12,
|
|
class A13,
|
|
class A14,
|
|
class A15,
|
|
class R> inline std_arity15pmf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
A12,
|
|
A13,
|
|
A14,
|
|
A15,
|
|
R>
|
|
std_arity15_member(R ( __stdcall Object::*const pmfi)(A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
A12,
|
|
A13,
|
|
A14,
|
|
A15)) {
|
|
return std_arity15pmf<Object,
|
|
A1,
|
|
A2,
|
|
A3,
|
|
A4,
|
|
A5,
|
|
A6,
|
|
A7,
|
|
A8,
|
|
A9,
|
|
A10,
|
|
A11,
|
|
A12,
|
|
A13,
|
|
A14,
|
|
A15,
|
|
R>(pmfi);
|
|
};
|
|
|
|
|
|
// Template Class for arity 15 obj&pmf ref storage
|
|
template<class Function> class std_arity15opmf:
|
|
public std_arity15pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::argument_7_type,
|
|
typename Function::argument_8_type,
|
|
typename Function::argument_9_type,
|
|
typename Function::argument_10_type,
|
|
typename Function::argument_11_type,
|
|
typename Function::argument_12_type,
|
|
typename Function::argument_13_type,
|
|
typename Function::argument_14_type,
|
|
typename Function::argument_15_type,
|
|
typename Function::result_type>,
|
|
public store_object<typename Function::object_type&> {
|
|
public:
|
|
explicit inline std_arity15opmf(typename Function::object_type& oi, const Function &f) :
|
|
store_object<typename Function::object_type&>(oi), std_arity15pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::argument_7_type,
|
|
typename Function::argument_8_type,
|
|
typename Function::argument_9_type,
|
|
typename Function::argument_10_type,
|
|
typename Function::argument_11_type,
|
|
typename Function::argument_12_type,
|
|
typename Function::argument_13_type,
|
|
typename Function::argument_14_type,
|
|
typename Function::argument_15_type,
|
|
typename Function::result_type>(f) {}
|
|
explicit inline std_arity15opmf(typename Function::object_type& oi, pmf15type pmfi) :
|
|
store_object<typename Function::object_type&>(oi), std_arity15pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::argument_7_type,
|
|
typename Function::argument_8_type,
|
|
typename Function::argument_9_type,
|
|
typename Function::argument_10_type,
|
|
typename Function::argument_11_type,
|
|
typename Function::argument_12_type,
|
|
typename Function::argument_13_type,
|
|
typename Function::argument_14_type,
|
|
typename Function::argument_15_type,
|
|
typename Function::result_type>(pmfi) {}
|
|
inline std_arity15opmf(const std_arity15opmf& bndri) :
|
|
store_object<typename Function::object_type&>(bndri), std_arity15pmf<typename Function::object_type,
|
|
typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::argument_7_type,
|
|
typename Function::argument_8_type,
|
|
typename Function::argument_9_type,
|
|
typename Function::argument_10_type,
|
|
typename Function::argument_11_type,
|
|
typename Function::argument_12_type,
|
|
typename Function::argument_13_type,
|
|
typename Function::argument_14_type,
|
|
typename Function::argument_15_type,
|
|
typename Function::result_type>(bndri) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1,
|
|
typename Function::second_argument_type a2,
|
|
typename Function::argument_3_type a3,
|
|
typename Function::argument_4_type a4,
|
|
typename Function::argument_5_type a5,
|
|
typename Function::argument_6_type a6,
|
|
typename Function::argument_7_type a7,
|
|
typename Function::argument_8_type a8,
|
|
typename Function::argument_9_type a9,
|
|
typename Function::argument_10_type a10,
|
|
typename Function::argument_11_type a11,
|
|
typename Function::argument_12_type a12,
|
|
typename Function::argument_13_type a13,
|
|
typename Function::argument_14_type a14,
|
|
typename Function::argument_15_type a15) const {
|
|
pmf15type pmf = reinterpret_cast<pmf15type>(pmf0);
|
|
return (objval.*pmf)(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15);
|
|
}
|
|
};
|
|
|
|
|
|
// Template Function for arity 15 obj&pmf ref storage
|
|
template<class Function, class Object> inline std_arity15opmf<Function>
|
|
std_arity15_member_obj(Object& oi, const Function &f) {
|
|
return std_arity15opmf<Function>(typename Function::object_type(oi), typename Function::pmf15type(f.pmf0));
|
|
};
|
|
|
|
|
|
|
|
///////////////////////////////////////////
|
|
// Binders
|
|
///////////////////////////////////////////
|
|
|
|
//
|
|
// binders for arity 2
|
|
//
|
|
|
|
|
|
// Template Classes for binding arity 2 to arity 1
|
|
|
|
|
|
// Template Classes for binding function ptrs of arity 2 to arity 1
|
|
|
|
template<class Function> class bndr_2 :
|
|
public arity1fp<typename Function::first_argument_type, typename Function::result_type> {
|
|
public:
|
|
typedef typename Function::result_type (*const pf2type) (typename Function::first_argument_type, typename Function::second_argument_type);
|
|
explicit inline bndr_2(const Function &f, typename Function::second_argument_type a2) :
|
|
arity1fp<typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pf1type>(f.pf0)), arg2val(a2) {}
|
|
inline bndr_2(const bndr_2& bndri) :
|
|
arity1fp<typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pf1type>(bndri.pf0)), arg2val(bndri.arg2val) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1) const {
|
|
pf2type pf = reinterpret_cast<pf2type>(pf0);
|
|
return pf(a1, arg2val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
};
|
|
|
|
template<class Function> class bndr_1 :
|
|
public arity1fp<typename Function::second_argument_type, typename Function::result_type> {
|
|
public:
|
|
typedef typename Function::result_type (*const pf2type) (typename Function::first_argument_type, typename Function::second_argument_type);
|
|
explicit inline bndr_1(const Function &f, typename Function::first_argument_type a1) :
|
|
arity1fp<typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pf1type>(f.pf0)), arg1val(a1) {}
|
|
inline bndr_1(const bndr_1& bndri) :
|
|
arity1fp<typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pf1type>(bndri.pf0)), arg1val(bndri.arg1val) {}
|
|
inline typename Function::result_type operator()(typename Function::second_argument_type a2) const {
|
|
pf2type pf = reinterpret_cast<pf2type>(pf0);
|
|
return pf(arg1val, a2);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding pmf of arity 2 to arity 1
|
|
|
|
template<class Function> class bndr_mf_2 :
|
|
public arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>,
|
|
private arity2_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_mf_2(const Function &f, typename Function::second_argument_type a2) :
|
|
arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), arity2_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(f), arg2val(a2) {}
|
|
inline bndr_mf_2(const bndr_mf_2& bndri) :
|
|
arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), arity2_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const {
|
|
pmf2type pmf = reinterpret_cast<pmf2type>(pmf0);
|
|
return (o.*pmf)(a1, arg2val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
};
|
|
|
|
template<class Function> class bndr_mf_1 :
|
|
public arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>,
|
|
private arity2_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_mf_1(const Function &f, typename Function::first_argument_type a1) :
|
|
arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), arity2_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(f), arg1val(a1) {}
|
|
inline bndr_mf_1(const bndr_mf_1& bndri) :
|
|
arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), arity2_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const {
|
|
pmf2type pmf = reinterpret_cast<pmf2type>(pmf0);
|
|
return (o.*pmf)(arg1val, a2);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding const pmf of arity 2 to arity 1
|
|
|
|
template<class Function> class bndr_const_mf_2 :
|
|
public arity1pmf_const<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>,
|
|
private arity2_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_const_mf_2(const Function &f, typename Function::second_argument_type a2) :
|
|
arity1pmf_const<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), arity2_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(f), arg2val(a2) {}
|
|
inline bndr_const_mf_2(const bndr_const_mf_2& bndri) :
|
|
arity1pmf_const<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), arity2_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const {
|
|
pmf2type pmf = reinterpret_cast<pmf2type>(pmf0);
|
|
return (o.*pmf)(a1, arg2val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
};
|
|
|
|
template<class Function> class bndr_const_mf_1 :
|
|
public arity1pmf_const<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>,
|
|
private arity2_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_const_mf_1(const Function &f, typename Function::first_argument_type a1) :
|
|
arity1pmf_const<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), arity2_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(f), arg1val(a1) {}
|
|
inline bndr_const_mf_1(const bndr_const_mf_1& bndri) :
|
|
arity1pmf_const<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), arity2_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const {
|
|
pmf2type pmf = reinterpret_cast<pmf2type>(pmf0);
|
|
return (o.*pmf)(arg1val, a2);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding obj&pmf Ref of arity 2 to arity 1
|
|
|
|
template<class Function> class bndr_obj_2 :
|
|
public arity1opmf<Function>,
|
|
private arity2_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_obj_2(typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2) :
|
|
arity1opmf<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), arity2_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(f), arg2val(a2) {}
|
|
inline bndr_obj_2(const bndr_obj_2& bndri) :
|
|
arity1opmf<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), arity2_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1) const {
|
|
pmf2type pmf = reinterpret_cast<pmf2type>(pmf0);
|
|
return (objval.*pmf)(a1, arg2val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
};
|
|
|
|
template<class Function> class bndr_obj_1 :
|
|
public arity1opmf<Function>,
|
|
private arity2_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_obj_1(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1) :
|
|
arity1opmf<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), arity2_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(f), arg1val(a1) {}
|
|
inline bndr_obj_1(const bndr_obj_1& bndri) :
|
|
arity1opmf<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), arity2_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val) {}
|
|
inline typename Function::result_type operator()(typename Function::second_argument_type a2) const {
|
|
pmf2type pmf = reinterpret_cast<pmf2type>(pmf0);
|
|
return (objval.*pmf)(arg1val, a2);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding const obj&pmf Ref of arity 2 to arity 1
|
|
|
|
template<class Function> class bndr_const_obj_2 :
|
|
public arity1opmf_const<Function>,
|
|
private arity2_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_const_obj_2(const typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2) :
|
|
arity1opmf_const<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), arity2_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(f), arg2val(a2) {}
|
|
inline bndr_const_obj_2(const bndr_const_obj_2& bndri) :
|
|
arity1opmf_const<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), arity2_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1) const {
|
|
pmf2type pmf = reinterpret_cast<pmf2type>(pmf0);
|
|
return (objval.*pmf)(a1, arg2val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
};
|
|
|
|
template<class Function> class bndr_const_obj_1 :
|
|
public arity1opmf_const<Function>,
|
|
private arity2_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_const_obj_1(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1) :
|
|
arity1opmf_const<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), arity2_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(f), arg1val(a1) {}
|
|
inline bndr_const_obj_1(const bndr_const_obj_1& bndri) :
|
|
arity1opmf_const<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), arity2_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val) {}
|
|
inline typename Function::result_type operator()(typename Function::second_argument_type a2) const {
|
|
pmf2type pmf = reinterpret_cast<pmf2type>(pmf0);
|
|
return (objval.*pmf)(arg1val, a2);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding arity 2 to arity 1
|
|
|
|
|
|
// Template Functions for binding function ptrs of arity 2 to arity 1
|
|
|
|
template<class Function, class A2> inline bndr_2<Function>
|
|
bind_fp_2(const Function &f, A2 a2) {
|
|
return bndr_2<Function>(f, typename Function::second_argument_type(a2));
|
|
};
|
|
|
|
template<class Function, class A1> inline bndr_1<Function>
|
|
bind_fp_1(const Function &f, A1 a1) {
|
|
return bndr_1<Function>(f, typename Function::first_argument_type(a1));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding pmf of arity 2 to arity 1
|
|
|
|
template<class Function, class A2> inline bndr_mf_2<Function>
|
|
bind_mf_2(const Function &f, A2 a2) {
|
|
return bndr_mf_2<Function>(f, typename Function::second_argument_type(a2));
|
|
};
|
|
|
|
template<class Function, class A1> inline bndr_mf_1<Function>
|
|
bind_mf_1(const Function &f, A1 a1) {
|
|
return bndr_mf_1<Function>(f, typename Function::first_argument_type(a1));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding const pmf of arity 2 to arity 1
|
|
|
|
template<class Function, class A2> inline bndr_const_mf_2<Function>
|
|
bind_const_mf_2(const Function &f, A2 a2) {
|
|
return bndr_const_mf_2<Function>(f, typename Function::second_argument_type(a2));
|
|
};
|
|
|
|
template<class Function, class A1> inline bndr_const_mf_1<Function>
|
|
bind_const_mf_1(const Function &f, A1 a1) {
|
|
return bndr_const_mf_1<Function>(f, typename Function::first_argument_type(a1));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding obj&pmf Ref of arity 2 to arity 1
|
|
|
|
template<class Function, class Object,
|
|
class A2> inline bndr_obj_2<Function>
|
|
bind_obj_2(Object& oi, const Function &f, A2 a2) {
|
|
return bndr_obj_2<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::second_argument_type(a2));
|
|
};
|
|
|
|
template<class Function, class Object,
|
|
class A1> inline bndr_obj_1<Function>
|
|
bind_obj_1(Object& oi, const Function &f, A1 a1) {
|
|
return bndr_obj_1<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding const obj&pmf Ref of arity 2 to arity 1
|
|
|
|
template<class Function, const class Object,
|
|
class A2> inline bndr_const_obj_2<Function>
|
|
bind_const_obj_2(const Object& oi, const Function &f, A2 a2) {
|
|
return bndr_const_obj_2<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::second_argument_type(a2));
|
|
};
|
|
|
|
template<class Function, const class Object,
|
|
class A1> inline bndr_const_obj_1<Function>
|
|
bind_const_obj_1(const Object& oi, const Function &f, A1 a1) {
|
|
return bndr_const_obj_1<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1));
|
|
};
|
|
|
|
|
|
|
|
//
|
|
// binders for arity 3
|
|
//
|
|
|
|
|
|
// Template Classes for binding arity 3 to arity 1
|
|
|
|
|
|
// Template Classes for binding function ptrs of arity 3 to arity 1
|
|
|
|
template<class Function> class bndr_2_3 :
|
|
public arity1fp<typename Function::first_argument_type, typename Function::result_type> {
|
|
public:
|
|
typedef typename Function::result_type (*const pf3type) (typename Function::first_argument_type, typename Function::second_argument_type, typename Function::argument_3_type);
|
|
explicit inline bndr_2_3(const Function &f, typename Function::second_argument_type a2,
|
|
typename Function::argument_3_type a3) :
|
|
arity1fp<typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pf1type>(f.pf0)), arg2val(a2), arg3val(a3) {}
|
|
inline bndr_2_3(const bndr_2_3& bndri) :
|
|
arity1fp<typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pf1type>(bndri.pf0)), arg2val(bndri.arg2val), arg3val(bndri.arg3val) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1) const {
|
|
pf3type pf = reinterpret_cast<pf3type>(pf0);
|
|
return pf(a1, arg2val, arg3val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
};
|
|
|
|
template<class Function> class bndr_1_3 :
|
|
public arity1fp<typename Function::second_argument_type, typename Function::result_type> {
|
|
public:
|
|
typedef typename Function::result_type (*const pf3type) (typename Function::first_argument_type, typename Function::second_argument_type, typename Function::argument_3_type);
|
|
explicit inline bndr_1_3(const Function &f, typename Function::first_argument_type a1,
|
|
typename Function::argument_3_type a3) :
|
|
arity1fp<typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pf1type>(f.pf0)), arg1val(a1), arg3val(a3) {}
|
|
inline bndr_1_3(const bndr_1_3& bndri) :
|
|
arity1fp<typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pf1type>(bndri.pf0)), arg1val(bndri.arg1val), arg3val(bndri.arg3val) {}
|
|
inline typename Function::result_type operator()(typename Function::second_argument_type a2) const {
|
|
pf3type pf = reinterpret_cast<pf3type>(pf0);
|
|
return pf(arg1val, a2, arg3val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
};
|
|
|
|
template<class Function> class bndr_1_2 :
|
|
public arity1fp<typename Function::argument_3_type, typename Function::result_type> {
|
|
public:
|
|
typedef typename Function::result_type (*const pf3type) (typename Function::first_argument_type, typename Function::second_argument_type, typename Function::argument_3_type);
|
|
explicit inline bndr_1_2(const Function &f, typename Function::first_argument_type a1,
|
|
typename Function::second_argument_type a2) :
|
|
arity1fp<typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pf1type>(f.pf0)), arg1val(a1), arg2val(a2) {}
|
|
inline bndr_1_2(const bndr_1_2& bndri) :
|
|
arity1fp<typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pf1type>(bndri.pf0)), arg1val(bndri.arg1val), arg2val(bndri.arg2val) {}
|
|
inline typename Function::result_type operator()(typename Function::argument_3_type a3) const {
|
|
pf3type pf = reinterpret_cast<pf3type>(pf0);
|
|
return pf(arg1val, arg2val, a3);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding pmf of arity 3 to arity 1
|
|
|
|
template<class Function> class bndr_mf_2_3 :
|
|
public arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>,
|
|
private arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_mf_2_3(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3) :
|
|
arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3) {}
|
|
inline bndr_mf_2_3(const bndr_mf_2_3& bndri) :
|
|
arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (o.*pmf)(a1, arg2val, arg3val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
};
|
|
|
|
template<class Function> class bndr_mf_1_3 :
|
|
public arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>,
|
|
private arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_mf_1_3(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3) :
|
|
arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3) {}
|
|
inline bndr_mf_1_3(const bndr_mf_1_3& bndri) :
|
|
arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (o.*pmf)(arg1val, a2, arg3val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
};
|
|
|
|
template<class Function> class bndr_mf_1_2 :
|
|
public arity1pmf<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>,
|
|
private arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_mf_1_2(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2) :
|
|
arity1pmf<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2) {}
|
|
inline bndr_mf_1_2(const bndr_mf_1_2& bndri) :
|
|
arity1pmf<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (o.*pmf)(arg1val, arg2val, a3);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding const pmf of arity 3 to arity 1
|
|
|
|
template<class Function> class bndr_const_mf_2_3 :
|
|
public arity1pmf_const<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>,
|
|
private arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_const_mf_2_3(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3) :
|
|
arity1pmf_const<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3) {}
|
|
inline bndr_const_mf_2_3(const bndr_const_mf_2_3& bndri) :
|
|
arity1pmf_const<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (o.*pmf)(a1, arg2val, arg3val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
};
|
|
|
|
template<class Function> class bndr_const_mf_1_3 :
|
|
public arity1pmf_const<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>,
|
|
private arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_const_mf_1_3(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3) :
|
|
arity1pmf_const<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3) {}
|
|
inline bndr_const_mf_1_3(const bndr_const_mf_1_3& bndri) :
|
|
arity1pmf_const<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (o.*pmf)(arg1val, a2, arg3val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
};
|
|
|
|
template<class Function> class bndr_const_mf_1_2 :
|
|
public arity1pmf_const<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>,
|
|
private arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_const_mf_1_2(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2) :
|
|
arity1pmf_const<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2) {}
|
|
inline bndr_const_mf_1_2(const bndr_const_mf_1_2& bndri) :
|
|
arity1pmf_const<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (o.*pmf)(arg1val, arg2val, a3);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding obj&pmf Ref of arity 3 to arity 1
|
|
|
|
template<class Function> class bndr_obj_2_3 :
|
|
public arity1opmf<Function>,
|
|
private arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_obj_2_3(typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3) :
|
|
arity1opmf<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3) {}
|
|
inline bndr_obj_2_3(const bndr_obj_2_3& bndri) :
|
|
arity1opmf<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (objval.*pmf)(a1, arg2val, arg3val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
};
|
|
|
|
template<class Function> class bndr_obj_1_3 :
|
|
public arity1opmf<Function>,
|
|
private arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_obj_1_3(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3) :
|
|
arity1opmf<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3) {}
|
|
inline bndr_obj_1_3(const bndr_obj_1_3& bndri) :
|
|
arity1opmf<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val) {}
|
|
inline typename Function::result_type operator()(typename Function::second_argument_type a2) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (objval.*pmf)(arg1val, a2, arg3val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
};
|
|
|
|
template<class Function> class bndr_obj_1_2 :
|
|
public arity1opmf<Function>,
|
|
private arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_obj_1_2(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2) :
|
|
arity1opmf<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2) {}
|
|
inline bndr_obj_1_2(const bndr_obj_1_2& bndri) :
|
|
arity1opmf<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val) {}
|
|
inline typename Function::result_type operator()(typename Function::argument_3_type a3) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (objval.*pmf)(arg1val, arg2val, a3);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding const obj&pmf Ref of arity 3 to arity 1
|
|
|
|
template<class Function> class bndr_const_obj_2_3 :
|
|
public arity1opmf_const<Function>,
|
|
private arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_const_obj_2_3(const typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3) :
|
|
arity1opmf_const<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3) {}
|
|
inline bndr_const_obj_2_3(const bndr_const_obj_2_3& bndri) :
|
|
arity1opmf_const<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (objval.*pmf)(a1, arg2val, arg3val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
};
|
|
|
|
template<class Function> class bndr_const_obj_1_3 :
|
|
public arity1opmf_const<Function>,
|
|
private arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_const_obj_1_3(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3) :
|
|
arity1opmf_const<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3) {}
|
|
inline bndr_const_obj_1_3(const bndr_const_obj_1_3& bndri) :
|
|
arity1opmf_const<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val) {}
|
|
inline typename Function::result_type operator()(typename Function::second_argument_type a2) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (objval.*pmf)(arg1val, a2, arg3val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
};
|
|
|
|
template<class Function> class bndr_const_obj_1_2 :
|
|
public arity1opmf_const<Function>,
|
|
private arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_const_obj_1_2(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2) :
|
|
arity1opmf_const<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2) {}
|
|
inline bndr_const_obj_1_2(const bndr_const_obj_1_2& bndri) :
|
|
arity1opmf_const<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val) {}
|
|
inline typename Function::result_type operator()(typename Function::argument_3_type a3) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (objval.*pmf)(arg1val, arg2val, a3);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding arity 3 to arity 1
|
|
|
|
|
|
// Template Functions for binding function ptrs of arity 3 to arity 1
|
|
|
|
template<class Function, class A2,
|
|
class A3> inline bndr_2_3<Function>
|
|
bind_fp_2_3(const Function &f, A2 a2,
|
|
A3 a3) {
|
|
return bndr_2_3<Function>(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A3> inline bndr_1_3<Function>
|
|
bind_fp_1_3(const Function &f, A1 a1,
|
|
A3 a3) {
|
|
return bndr_1_3<Function>(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A2> inline bndr_1_2<Function>
|
|
bind_fp_1_2(const Function &f, A1 a1,
|
|
A2 a2) {
|
|
return bndr_1_2<Function>(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding pmf of arity 3 to arity 1
|
|
|
|
template<class Function, class A2,
|
|
class A3> inline bndr_mf_2_3<Function>
|
|
bind_mf_2_3(const Function &f, A2 a2,
|
|
A3 a3) {
|
|
return bndr_mf_2_3<Function>(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A3> inline bndr_mf_1_3<Function>
|
|
bind_mf_1_3(const Function &f, A1 a1,
|
|
A3 a3) {
|
|
return bndr_mf_1_3<Function>(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A2> inline bndr_mf_1_2<Function>
|
|
bind_mf_1_2(const Function &f, A1 a1,
|
|
A2 a2) {
|
|
return bndr_mf_1_2<Function>(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding const pmf of arity 3 to arity 1
|
|
|
|
template<class Function, class A2,
|
|
class A3> inline bndr_const_mf_2_3<Function>
|
|
bind_const_mf_2_3(const Function &f, A2 a2,
|
|
A3 a3) {
|
|
return bndr_const_mf_2_3<Function>(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A3> inline bndr_const_mf_1_3<Function>
|
|
bind_const_mf_1_3(const Function &f, A1 a1,
|
|
A3 a3) {
|
|
return bndr_const_mf_1_3<Function>(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A2> inline bndr_const_mf_1_2<Function>
|
|
bind_const_mf_1_2(const Function &f, A1 a1,
|
|
A2 a2) {
|
|
return bndr_const_mf_1_2<Function>(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding obj&pmf Ref of arity 3 to arity 1
|
|
|
|
template<class Function, class Object,
|
|
class A2,
|
|
class A3> inline bndr_obj_2_3<Function>
|
|
bind_obj_2_3(Object& oi, const Function &f, A2 a2,
|
|
A3 a3) {
|
|
return bndr_obj_2_3<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3));
|
|
};
|
|
|
|
template<class Function, class Object,
|
|
class A1,
|
|
class A3> inline bndr_obj_1_3<Function>
|
|
bind_obj_1_3(Object& oi, const Function &f, A1 a1,
|
|
A3 a3) {
|
|
return bndr_obj_1_3<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3));
|
|
};
|
|
|
|
template<class Function, class Object,
|
|
class A1,
|
|
class A2> inline bndr_obj_1_2<Function>
|
|
bind_obj_1_2(Object& oi, const Function &f, A1 a1,
|
|
A2 a2) {
|
|
return bndr_obj_1_2<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding const obj&pmf Ref of arity 3 to arity 1
|
|
|
|
template<class Function, const class Object,
|
|
class A2,
|
|
class A3> inline bndr_const_obj_2_3<Function>
|
|
bind_const_obj_2_3(const Object& oi, const Function &f, A2 a2,
|
|
A3 a3) {
|
|
return bndr_const_obj_2_3<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3));
|
|
};
|
|
|
|
template<class Function, const class Object,
|
|
class A1,
|
|
class A3> inline bndr_const_obj_1_3<Function>
|
|
bind_const_obj_1_3(const Object& oi, const Function &f, A1 a1,
|
|
A3 a3) {
|
|
return bndr_const_obj_1_3<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3));
|
|
};
|
|
|
|
template<class Function, const class Object,
|
|
class A1,
|
|
class A2> inline bndr_const_obj_1_2<Function>
|
|
bind_const_obj_1_2(const Object& oi, const Function &f, A1 a1,
|
|
A2 a2) {
|
|
return bndr_const_obj_1_2<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2));
|
|
};
|
|
|
|
|
|
|
|
//
|
|
// binders for arity 4
|
|
//
|
|
|
|
|
|
// Template Classes for binding arity 4 to arity 1
|
|
|
|
|
|
// Template Classes for binding pmf of arity 4 to arity 1
|
|
|
|
template<class Function> class bndr_mf_2_3_4 :
|
|
public arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>,
|
|
private arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_mf_2_3_4(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4) :
|
|
arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3), arg4val(a4) {}
|
|
inline bndr_mf_2_3_4(const bndr_mf_2_3_4& bndri) :
|
|
arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (o.*pmf)(a1, arg2val, arg3val, arg4val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
};
|
|
|
|
template<class Function> class bndr_mf_1_3_4 :
|
|
public arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>,
|
|
private arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_mf_1_3_4(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4) :
|
|
arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3), arg4val(a4) {}
|
|
inline bndr_mf_1_3_4(const bndr_mf_1_3_4& bndri) :
|
|
arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (o.*pmf)(arg1val, a2, arg3val, arg4val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
};
|
|
|
|
template<class Function> class bndr_mf_1_2_4 :
|
|
public arity1pmf<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>,
|
|
private arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_mf_1_2_4(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4) :
|
|
arity1pmf<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2), arg4val(a4) {}
|
|
inline bndr_mf_1_2_4(const bndr_mf_1_2_4& bndri) :
|
|
arity1pmf<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (o.*pmf)(arg1val, arg2val, a3, arg4val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_4_type arg4val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding const pmf of arity 4 to arity 1
|
|
|
|
template<class Function> class bndr_const_mf_2_3_4 :
|
|
public arity1pmf_const<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>,
|
|
private arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_const_mf_2_3_4(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4) :
|
|
arity1pmf_const<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3), arg4val(a4) {}
|
|
inline bndr_const_mf_2_3_4(const bndr_const_mf_2_3_4& bndri) :
|
|
arity1pmf_const<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (o.*pmf)(a1, arg2val, arg3val, arg4val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
};
|
|
|
|
template<class Function> class bndr_const_mf_1_3_4 :
|
|
public arity1pmf_const<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>,
|
|
private arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_const_mf_1_3_4(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4) :
|
|
arity1pmf_const<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3), arg4val(a4) {}
|
|
inline bndr_const_mf_1_3_4(const bndr_const_mf_1_3_4& bndri) :
|
|
arity1pmf_const<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (o.*pmf)(arg1val, a2, arg3val, arg4val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
};
|
|
|
|
template<class Function> class bndr_const_mf_1_2_4 :
|
|
public arity1pmf_const<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>,
|
|
private arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_const_mf_1_2_4(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4) :
|
|
arity1pmf_const<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2), arg4val(a4) {}
|
|
inline bndr_const_mf_1_2_4(const bndr_const_mf_1_2_4& bndri) :
|
|
arity1pmf_const<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (o.*pmf)(arg1val, arg2val, a3, arg4val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_4_type arg4val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding obj&pmf Ref of arity 4 to arity 1
|
|
|
|
template<class Function> class bndr_obj_2_3_4 :
|
|
public arity1opmf<Function>,
|
|
private arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_obj_2_3_4(typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4) :
|
|
arity1opmf<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3), arg4val(a4) {}
|
|
inline bndr_obj_2_3_4(const bndr_obj_2_3_4& bndri) :
|
|
arity1opmf<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (objval.*pmf)(a1, arg2val, arg3val, arg4val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
};
|
|
|
|
template<class Function> class bndr_obj_1_3_4 :
|
|
public arity1opmf<Function>,
|
|
private arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_obj_1_3_4(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4) :
|
|
arity1opmf<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3), arg4val(a4) {}
|
|
inline bndr_obj_1_3_4(const bndr_obj_1_3_4& bndri) :
|
|
arity1opmf<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {}
|
|
inline typename Function::result_type operator()(typename Function::second_argument_type a2) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (objval.*pmf)(arg1val, a2, arg3val, arg4val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
};
|
|
|
|
template<class Function> class bndr_obj_1_2_4 :
|
|
public arity1opmf<Function>,
|
|
private arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_obj_1_2_4(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4) :
|
|
arity1opmf<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2), arg4val(a4) {}
|
|
inline bndr_obj_1_2_4(const bndr_obj_1_2_4& bndri) :
|
|
arity1opmf<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val) {}
|
|
inline typename Function::result_type operator()(typename Function::argument_3_type a3) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (objval.*pmf)(arg1val, arg2val, a3, arg4val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_4_type arg4val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding const obj&pmf Ref of arity 4 to arity 1
|
|
|
|
template<class Function> class bndr_const_obj_2_3_4 :
|
|
public arity1opmf_const<Function>,
|
|
private arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_const_obj_2_3_4(const typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4) :
|
|
arity1opmf_const<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3), arg4val(a4) {}
|
|
inline bndr_const_obj_2_3_4(const bndr_const_obj_2_3_4& bndri) :
|
|
arity1opmf_const<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (objval.*pmf)(a1, arg2val, arg3val, arg4val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
};
|
|
|
|
template<class Function> class bndr_const_obj_1_3_4 :
|
|
public arity1opmf_const<Function>,
|
|
private arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_const_obj_1_3_4(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4) :
|
|
arity1opmf_const<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3), arg4val(a4) {}
|
|
inline bndr_const_obj_1_3_4(const bndr_const_obj_1_3_4& bndri) :
|
|
arity1opmf_const<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {}
|
|
inline typename Function::result_type operator()(typename Function::second_argument_type a2) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (objval.*pmf)(arg1val, a2, arg3val, arg4val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
};
|
|
|
|
template<class Function> class bndr_const_obj_1_2_4 :
|
|
public arity1opmf_const<Function>,
|
|
private arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_const_obj_1_2_4(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4) :
|
|
arity1opmf_const<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2), arg4val(a4) {}
|
|
inline bndr_const_obj_1_2_4(const bndr_const_obj_1_2_4& bndri) :
|
|
arity1opmf_const<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val) {}
|
|
inline typename Function::result_type operator()(typename Function::argument_3_type a3) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (objval.*pmf)(arg1val, arg2val, a3, arg4val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_4_type arg4val;
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding arity 4 to arity 1
|
|
|
|
|
|
// Template Functions for binding pmf of arity 4 to arity 1
|
|
|
|
template<class Function, class A2,
|
|
class A3,
|
|
class A4> inline bndr_mf_2_3_4<Function>
|
|
bind_mf_2_3_4(const Function &f, A2 a2,
|
|
A3 a3,
|
|
A4 a4) {
|
|
return bndr_mf_2_3_4<Function>(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A3,
|
|
class A4> inline bndr_mf_1_3_4<Function>
|
|
bind_mf_1_3_4(const Function &f, A1 a1,
|
|
A3 a3,
|
|
A4 a4) {
|
|
return bndr_mf_1_3_4<Function>(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A2,
|
|
class A4> inline bndr_mf_1_2_4<Function>
|
|
bind_mf_1_2_4(const Function &f, A1 a1,
|
|
A2 a2,
|
|
A4 a4) {
|
|
return bndr_mf_1_2_4<Function>(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding const pmf of arity 4 to arity 1
|
|
|
|
template<class Function, class A2,
|
|
class A3,
|
|
class A4> inline bndr_const_mf_2_3_4<Function>
|
|
bind_const_mf_2_3_4(const Function &f, A2 a2,
|
|
A3 a3,
|
|
A4 a4) {
|
|
return bndr_const_mf_2_3_4<Function>(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A3,
|
|
class A4> inline bndr_const_mf_1_3_4<Function>
|
|
bind_const_mf_1_3_4(const Function &f, A1 a1,
|
|
A3 a3,
|
|
A4 a4) {
|
|
return bndr_const_mf_1_3_4<Function>(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A2,
|
|
class A4> inline bndr_const_mf_1_2_4<Function>
|
|
bind_const_mf_1_2_4(const Function &f, A1 a1,
|
|
A2 a2,
|
|
A4 a4) {
|
|
return bndr_const_mf_1_2_4<Function>(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding obj&pmf Ref of arity 4 to arity 1
|
|
|
|
template<class Function, class Object,
|
|
class A2,
|
|
class A3,
|
|
class A4> inline bndr_obj_2_3_4<Function>
|
|
bind_obj_2_3_4(Object& oi, const Function &f, A2 a2,
|
|
A3 a3,
|
|
A4 a4) {
|
|
return bndr_obj_2_3_4<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4));
|
|
};
|
|
|
|
template<class Function, class Object,
|
|
class A1,
|
|
class A3,
|
|
class A4> inline bndr_obj_1_3_4<Function>
|
|
bind_obj_1_3_4(Object& oi, const Function &f, A1 a1,
|
|
A3 a3,
|
|
A4 a4) {
|
|
return bndr_obj_1_3_4<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4));
|
|
};
|
|
|
|
template<class Function, class Object,
|
|
class A1,
|
|
class A2,
|
|
class A4> inline bndr_obj_1_2_4<Function>
|
|
bind_obj_1_2_4(Object& oi, const Function &f, A1 a1,
|
|
A2 a2,
|
|
A4 a4) {
|
|
return bndr_obj_1_2_4<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding const obj&pmf Ref of arity 4 to arity 1
|
|
|
|
template<class Function, const class Object,
|
|
class A2,
|
|
class A3,
|
|
class A4> inline bndr_const_obj_2_3_4<Function>
|
|
bind_const_obj_2_3_4(const Object& oi, const Function &f, A2 a2,
|
|
A3 a3,
|
|
A4 a4) {
|
|
return bndr_const_obj_2_3_4<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4));
|
|
};
|
|
|
|
template<class Function, const class Object,
|
|
class A1,
|
|
class A3,
|
|
class A4> inline bndr_const_obj_1_3_4<Function>
|
|
bind_const_obj_1_3_4(const Object& oi, const Function &f, A1 a1,
|
|
A3 a3,
|
|
A4 a4) {
|
|
return bndr_const_obj_1_3_4<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4));
|
|
};
|
|
|
|
template<class Function, const class Object,
|
|
class A1,
|
|
class A2,
|
|
class A4> inline bndr_const_obj_1_2_4<Function>
|
|
bind_const_obj_1_2_4(const Object& oi, const Function &f, A1 a1,
|
|
A2 a2,
|
|
A4 a4) {
|
|
return bndr_const_obj_1_2_4<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4));
|
|
};
|
|
|
|
|
|
|
|
//
|
|
// binders for arity 5
|
|
//
|
|
|
|
|
|
// Template Classes for binding arity 5 to arity 1
|
|
|
|
|
|
// Template Classes for binding pmf of arity 5 to arity 1
|
|
|
|
template<class Function> class bndr_mf_2_3_4_5 :
|
|
public arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>,
|
|
private arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_mf_2_3_4_5(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) :
|
|
arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5) {}
|
|
inline bndr_mf_2_3_4_5(const bndr_mf_2_3_4_5& bndri) :
|
|
arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (o.*pmf)(a1, arg2val, arg3val, arg4val, arg5val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
};
|
|
|
|
template<class Function> class bndr_mf_1_3_4_5 :
|
|
public arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>,
|
|
private arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_mf_1_3_4_5(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) :
|
|
arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5) {}
|
|
inline bndr_mf_1_3_4_5(const bndr_mf_1_3_4_5& bndri) :
|
|
arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (o.*pmf)(arg1val, a2, arg3val, arg4val, arg5val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
};
|
|
|
|
template<class Function> class bndr_mf_1_2_4_5 :
|
|
public arity1pmf<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>,
|
|
private arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_mf_1_2_4_5(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5) :
|
|
arity1pmf<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5) {}
|
|
inline bndr_mf_1_2_4_5(const bndr_mf_1_2_4_5& bndri) :
|
|
arity1pmf<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (o.*pmf)(arg1val, arg2val, a3, arg4val, arg5val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding const pmf of arity 5 to arity 1
|
|
|
|
template<class Function> class bndr_const_mf_2_3_4_5 :
|
|
public arity1pmf_const<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>,
|
|
private arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_const_mf_2_3_4_5(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) :
|
|
arity1pmf_const<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5) {}
|
|
inline bndr_const_mf_2_3_4_5(const bndr_const_mf_2_3_4_5& bndri) :
|
|
arity1pmf_const<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (o.*pmf)(a1, arg2val, arg3val, arg4val, arg5val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
};
|
|
|
|
template<class Function> class bndr_const_mf_1_3_4_5 :
|
|
public arity1pmf_const<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>,
|
|
private arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_const_mf_1_3_4_5(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) :
|
|
arity1pmf_const<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5) {}
|
|
inline bndr_const_mf_1_3_4_5(const bndr_const_mf_1_3_4_5& bndri) :
|
|
arity1pmf_const<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (o.*pmf)(arg1val, a2, arg3val, arg4val, arg5val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
};
|
|
|
|
template<class Function> class bndr_const_mf_1_2_4_5 :
|
|
public arity1pmf_const<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>,
|
|
private arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_const_mf_1_2_4_5(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5) :
|
|
arity1pmf_const<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5) {}
|
|
inline bndr_const_mf_1_2_4_5(const bndr_const_mf_1_2_4_5& bndri) :
|
|
arity1pmf_const<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (o.*pmf)(arg1val, arg2val, a3, arg4val, arg5val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding obj&pmf Ref of arity 5 to arity 1
|
|
|
|
template<class Function> class bndr_obj_2_3_4_5 :
|
|
public arity1opmf<Function>,
|
|
private arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_obj_2_3_4_5(typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) :
|
|
arity1opmf<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5) {}
|
|
inline bndr_obj_2_3_4_5(const bndr_obj_2_3_4_5& bndri) :
|
|
arity1opmf<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (objval.*pmf)(a1, arg2val, arg3val, arg4val, arg5val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
};
|
|
|
|
template<class Function> class bndr_obj_1_3_4_5 :
|
|
public arity1opmf<Function>,
|
|
private arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_obj_1_3_4_5(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) :
|
|
arity1opmf<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5) {}
|
|
inline bndr_obj_1_3_4_5(const bndr_obj_1_3_4_5& bndri) :
|
|
arity1opmf<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {}
|
|
inline typename Function::result_type operator()(typename Function::second_argument_type a2) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (objval.*pmf)(arg1val, a2, arg3val, arg4val, arg5val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
};
|
|
|
|
template<class Function> class bndr_obj_1_2_4_5 :
|
|
public arity1opmf<Function>,
|
|
private arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_obj_1_2_4_5(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5) :
|
|
arity1opmf<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5) {}
|
|
inline bndr_obj_1_2_4_5(const bndr_obj_1_2_4_5& bndri) :
|
|
arity1opmf<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {}
|
|
inline typename Function::result_type operator()(typename Function::argument_3_type a3) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (objval.*pmf)(arg1val, arg2val, a3, arg4val, arg5val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding const obj&pmf Ref of arity 5 to arity 1
|
|
|
|
template<class Function> class bndr_const_obj_2_3_4_5 :
|
|
public arity1opmf_const<Function>,
|
|
private arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_const_obj_2_3_4_5(const typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) :
|
|
arity1opmf_const<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5) {}
|
|
inline bndr_const_obj_2_3_4_5(const bndr_const_obj_2_3_4_5& bndri) :
|
|
arity1opmf_const<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (objval.*pmf)(a1, arg2val, arg3val, arg4val, arg5val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
};
|
|
|
|
template<class Function> class bndr_const_obj_1_3_4_5 :
|
|
public arity1opmf_const<Function>,
|
|
private arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_const_obj_1_3_4_5(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) :
|
|
arity1opmf_const<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5) {}
|
|
inline bndr_const_obj_1_3_4_5(const bndr_const_obj_1_3_4_5& bndri) :
|
|
arity1opmf_const<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {}
|
|
inline typename Function::result_type operator()(typename Function::second_argument_type a2) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (objval.*pmf)(arg1val, a2, arg3val, arg4val, arg5val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
};
|
|
|
|
template<class Function> class bndr_const_obj_1_2_4_5 :
|
|
public arity1opmf_const<Function>,
|
|
private arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_const_obj_1_2_4_5(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5) :
|
|
arity1opmf_const<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5) {}
|
|
inline bndr_const_obj_1_2_4_5(const bndr_const_obj_1_2_4_5& bndri) :
|
|
arity1opmf_const<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {}
|
|
inline typename Function::result_type operator()(typename Function::argument_3_type a3) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (objval.*pmf)(arg1val, arg2val, a3, arg4val, arg5val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding arity 5 to arity 1
|
|
|
|
|
|
// Template Functions for binding pmf of arity 5 to arity 1
|
|
|
|
template<class Function, class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5> inline bndr_mf_2_3_4_5<Function>
|
|
bind_mf_2_3_4_5(const Function &f, A2 a2,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5) {
|
|
return bndr_mf_2_3_4_5<Function>(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A3,
|
|
class A4,
|
|
class A5> inline bndr_mf_1_3_4_5<Function>
|
|
bind_mf_1_3_4_5(const Function &f, A1 a1,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5) {
|
|
return bndr_mf_1_3_4_5<Function>(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A2,
|
|
class A4,
|
|
class A5> inline bndr_mf_1_2_4_5<Function>
|
|
bind_mf_1_2_4_5(const Function &f, A1 a1,
|
|
A2 a2,
|
|
A4 a4,
|
|
A5 a5) {
|
|
return bndr_mf_1_2_4_5<Function>(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding const pmf of arity 5 to arity 1
|
|
|
|
template<class Function, class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5> inline bndr_const_mf_2_3_4_5<Function>
|
|
bind_const_mf_2_3_4_5(const Function &f, A2 a2,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5) {
|
|
return bndr_const_mf_2_3_4_5<Function>(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A3,
|
|
class A4,
|
|
class A5> inline bndr_const_mf_1_3_4_5<Function>
|
|
bind_const_mf_1_3_4_5(const Function &f, A1 a1,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5) {
|
|
return bndr_const_mf_1_3_4_5<Function>(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A2,
|
|
class A4,
|
|
class A5> inline bndr_const_mf_1_2_4_5<Function>
|
|
bind_const_mf_1_2_4_5(const Function &f, A1 a1,
|
|
A2 a2,
|
|
A4 a4,
|
|
A5 a5) {
|
|
return bndr_const_mf_1_2_4_5<Function>(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding obj&pmf Ref of arity 5 to arity 1
|
|
|
|
template<class Function, class Object,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5> inline bndr_obj_2_3_4_5<Function>
|
|
bind_obj_2_3_4_5(Object& oi, const Function &f, A2 a2,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5) {
|
|
return bndr_obj_2_3_4_5<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5));
|
|
};
|
|
|
|
template<class Function, class Object,
|
|
class A1,
|
|
class A3,
|
|
class A4,
|
|
class A5> inline bndr_obj_1_3_4_5<Function>
|
|
bind_obj_1_3_4_5(Object& oi, const Function &f, A1 a1,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5) {
|
|
return bndr_obj_1_3_4_5<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5));
|
|
};
|
|
|
|
template<class Function, class Object,
|
|
class A1,
|
|
class A2,
|
|
class A4,
|
|
class A5> inline bndr_obj_1_2_4_5<Function>
|
|
bind_obj_1_2_4_5(Object& oi, const Function &f, A1 a1,
|
|
A2 a2,
|
|
A4 a4,
|
|
A5 a5) {
|
|
return bndr_obj_1_2_4_5<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding const obj&pmf Ref of arity 5 to arity 1
|
|
|
|
template<class Function, const class Object,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5> inline bndr_const_obj_2_3_4_5<Function>
|
|
bind_const_obj_2_3_4_5(const Object& oi, const Function &f, A2 a2,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5) {
|
|
return bndr_const_obj_2_3_4_5<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5));
|
|
};
|
|
|
|
template<class Function, const class Object,
|
|
class A1,
|
|
class A3,
|
|
class A4,
|
|
class A5> inline bndr_const_obj_1_3_4_5<Function>
|
|
bind_const_obj_1_3_4_5(const Object& oi, const Function &f, A1 a1,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5) {
|
|
return bndr_const_obj_1_3_4_5<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5));
|
|
};
|
|
|
|
template<class Function, const class Object,
|
|
class A1,
|
|
class A2,
|
|
class A4,
|
|
class A5> inline bndr_const_obj_1_2_4_5<Function>
|
|
bind_const_obj_1_2_4_5(const Object& oi, const Function &f, A1 a1,
|
|
A2 a2,
|
|
A4 a4,
|
|
A5 a5) {
|
|
return bndr_const_obj_1_2_4_5<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5));
|
|
};
|
|
|
|
|
|
|
|
//
|
|
// binders for arity 6
|
|
//
|
|
|
|
|
|
// Template Classes for binding arity 6 to arity 1
|
|
|
|
|
|
// Template Classes for binding pmf of arity 6 to arity 1
|
|
|
|
template<class Function> class bndr_mf_2_3_4_5_6 :
|
|
public arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>,
|
|
private arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_mf_2_3_4_5_6(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) :
|
|
arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {}
|
|
inline bndr_mf_2_3_4_5_6(const bndr_mf_2_3_4_5_6& bndri) :
|
|
arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (o.*pmf)(a1, arg2val, arg3val, arg4val, arg5val, arg6val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
typename Function::argument_6_type arg6val;
|
|
};
|
|
|
|
template<class Function> class bndr_mf_1_3_4_5_6 :
|
|
public arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>,
|
|
private arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_mf_1_3_4_5_6(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) :
|
|
arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {}
|
|
inline bndr_mf_1_3_4_5_6(const bndr_mf_1_3_4_5_6& bndri) :
|
|
arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (o.*pmf)(arg1val, a2, arg3val, arg4val, arg5val, arg6val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
typename Function::argument_6_type arg6val;
|
|
};
|
|
|
|
template<class Function> class bndr_mf_1_2_4_5_6 :
|
|
public arity1pmf<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>,
|
|
private arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_mf_1_2_4_5_6(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) :
|
|
arity1pmf<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5), arg6val(a6) {}
|
|
inline bndr_mf_1_2_4_5_6(const bndr_mf_1_2_4_5_6& bndri) :
|
|
arity1pmf<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (o.*pmf)(arg1val, arg2val, a3, arg4val, arg5val, arg6val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
typename Function::argument_6_type arg6val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding const pmf of arity 6 to arity 1
|
|
|
|
template<class Function> class bndr_const_mf_2_3_4_5_6 :
|
|
public arity1pmf_const<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>,
|
|
private arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_const_mf_2_3_4_5_6(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) :
|
|
arity1pmf_const<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {}
|
|
inline bndr_const_mf_2_3_4_5_6(const bndr_const_mf_2_3_4_5_6& bndri) :
|
|
arity1pmf_const<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (o.*pmf)(a1, arg2val, arg3val, arg4val, arg5val, arg6val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
typename Function::argument_6_type arg6val;
|
|
};
|
|
|
|
template<class Function> class bndr_const_mf_1_3_4_5_6 :
|
|
public arity1pmf_const<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>,
|
|
private arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_const_mf_1_3_4_5_6(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) :
|
|
arity1pmf_const<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {}
|
|
inline bndr_const_mf_1_3_4_5_6(const bndr_const_mf_1_3_4_5_6& bndri) :
|
|
arity1pmf_const<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (o.*pmf)(arg1val, a2, arg3val, arg4val, arg5val, arg6val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
typename Function::argument_6_type arg6val;
|
|
};
|
|
|
|
template<class Function> class bndr_const_mf_1_2_4_5_6 :
|
|
public arity1pmf_const<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>,
|
|
private arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_const_mf_1_2_4_5_6(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) :
|
|
arity1pmf_const<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5), arg6val(a6) {}
|
|
inline bndr_const_mf_1_2_4_5_6(const bndr_const_mf_1_2_4_5_6& bndri) :
|
|
arity1pmf_const<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (o.*pmf)(arg1val, arg2val, a3, arg4val, arg5val, arg6val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
typename Function::argument_6_type arg6val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding obj&pmf Ref of arity 6 to arity 1
|
|
|
|
template<class Function> class bndr_obj_2_3_4_5_6 :
|
|
public arity1opmf<Function>,
|
|
private arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_obj_2_3_4_5_6(typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) :
|
|
arity1opmf<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {}
|
|
inline bndr_obj_2_3_4_5_6(const bndr_obj_2_3_4_5_6& bndri) :
|
|
arity1opmf<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (objval.*pmf)(a1, arg2val, arg3val, arg4val, arg5val, arg6val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
typename Function::argument_6_type arg6val;
|
|
};
|
|
|
|
template<class Function> class bndr_obj_1_3_4_5_6 :
|
|
public arity1opmf<Function>,
|
|
private arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_obj_1_3_4_5_6(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) :
|
|
arity1opmf<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {}
|
|
inline bndr_obj_1_3_4_5_6(const bndr_obj_1_3_4_5_6& bndri) :
|
|
arity1opmf<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {}
|
|
inline typename Function::result_type operator()(typename Function::second_argument_type a2) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (objval.*pmf)(arg1val, a2, arg3val, arg4val, arg5val, arg6val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
typename Function::argument_6_type arg6val;
|
|
};
|
|
|
|
template<class Function> class bndr_obj_1_2_4_5_6 :
|
|
public arity1opmf<Function>,
|
|
private arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_obj_1_2_4_5_6(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) :
|
|
arity1opmf<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5), arg6val(a6) {}
|
|
inline bndr_obj_1_2_4_5_6(const bndr_obj_1_2_4_5_6& bndri) :
|
|
arity1opmf<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {}
|
|
inline typename Function::result_type operator()(typename Function::argument_3_type a3) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (objval.*pmf)(arg1val, arg2val, a3, arg4val, arg5val, arg6val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
typename Function::argument_6_type arg6val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding const obj&pmf Ref of arity 6 to arity 1
|
|
|
|
template<class Function> class bndr_const_obj_2_3_4_5_6 :
|
|
public arity1opmf_const<Function>,
|
|
private arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_const_obj_2_3_4_5_6(const typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) :
|
|
arity1opmf_const<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {}
|
|
inline bndr_const_obj_2_3_4_5_6(const bndr_const_obj_2_3_4_5_6& bndri) :
|
|
arity1opmf_const<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (objval.*pmf)(a1, arg2val, arg3val, arg4val, arg5val, arg6val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
typename Function::argument_6_type arg6val;
|
|
};
|
|
|
|
template<class Function> class bndr_const_obj_1_3_4_5_6 :
|
|
public arity1opmf_const<Function>,
|
|
private arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_const_obj_1_3_4_5_6(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) :
|
|
arity1opmf_const<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {}
|
|
inline bndr_const_obj_1_3_4_5_6(const bndr_const_obj_1_3_4_5_6& bndri) :
|
|
arity1opmf_const<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {}
|
|
inline typename Function::result_type operator()(typename Function::second_argument_type a2) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (objval.*pmf)(arg1val, a2, arg3val, arg4val, arg5val, arg6val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
typename Function::argument_6_type arg6val;
|
|
};
|
|
|
|
template<class Function> class bndr_const_obj_1_2_4_5_6 :
|
|
public arity1opmf_const<Function>,
|
|
private arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline bndr_const_obj_1_2_4_5_6(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) :
|
|
arity1opmf_const<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5), arg6val(a6) {}
|
|
inline bndr_const_obj_1_2_4_5_6(const bndr_const_obj_1_2_4_5_6& bndri) :
|
|
arity1opmf_const<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {}
|
|
inline typename Function::result_type operator()(typename Function::argument_3_type a3) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (objval.*pmf)(arg1val, arg2val, a3, arg4val, arg5val, arg6val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
typename Function::argument_6_type arg6val;
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding arity 6 to arity 1
|
|
|
|
|
|
// Template Functions for binding pmf of arity 6 to arity 1
|
|
|
|
template<class Function, class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6> inline bndr_mf_2_3_4_5_6<Function>
|
|
bind_mf_2_3_4_5_6(const Function &f, A2 a2,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6) {
|
|
return bndr_mf_2_3_4_5_6<Function>(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6> inline bndr_mf_1_3_4_5_6<Function>
|
|
bind_mf_1_3_4_5_6(const Function &f, A1 a1,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6) {
|
|
return bndr_mf_1_3_4_5_6<Function>(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A2,
|
|
class A4,
|
|
class A5,
|
|
class A6> inline bndr_mf_1_2_4_5_6<Function>
|
|
bind_mf_1_2_4_5_6(const Function &f, A1 a1,
|
|
A2 a2,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6) {
|
|
return bndr_mf_1_2_4_5_6<Function>(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding const pmf of arity 6 to arity 1
|
|
|
|
template<class Function, class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6> inline bndr_const_mf_2_3_4_5_6<Function>
|
|
bind_const_mf_2_3_4_5_6(const Function &f, A2 a2,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6) {
|
|
return bndr_const_mf_2_3_4_5_6<Function>(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6> inline bndr_const_mf_1_3_4_5_6<Function>
|
|
bind_const_mf_1_3_4_5_6(const Function &f, A1 a1,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6) {
|
|
return bndr_const_mf_1_3_4_5_6<Function>(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A2,
|
|
class A4,
|
|
class A5,
|
|
class A6> inline bndr_const_mf_1_2_4_5_6<Function>
|
|
bind_const_mf_1_2_4_5_6(const Function &f, A1 a1,
|
|
A2 a2,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6) {
|
|
return bndr_const_mf_1_2_4_5_6<Function>(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding obj&pmf Ref of arity 6 to arity 1
|
|
|
|
template<class Function, class Object,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6> inline bndr_obj_2_3_4_5_6<Function>
|
|
bind_obj_2_3_4_5_6(Object& oi, const Function &f, A2 a2,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6) {
|
|
return bndr_obj_2_3_4_5_6<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6));
|
|
};
|
|
|
|
template<class Function, class Object,
|
|
class A1,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6> inline bndr_obj_1_3_4_5_6<Function>
|
|
bind_obj_1_3_4_5_6(Object& oi, const Function &f, A1 a1,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6) {
|
|
return bndr_obj_1_3_4_5_6<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6));
|
|
};
|
|
|
|
template<class Function, class Object,
|
|
class A1,
|
|
class A2,
|
|
class A4,
|
|
class A5,
|
|
class A6> inline bndr_obj_1_2_4_5_6<Function>
|
|
bind_obj_1_2_4_5_6(Object& oi, const Function &f, A1 a1,
|
|
A2 a2,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6) {
|
|
return bndr_obj_1_2_4_5_6<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding const obj&pmf Ref of arity 6 to arity 1
|
|
|
|
template<class Function, const class Object,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6> inline bndr_const_obj_2_3_4_5_6<Function>
|
|
bind_const_obj_2_3_4_5_6(const Object& oi, const Function &f, A2 a2,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6) {
|
|
return bndr_const_obj_2_3_4_5_6<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6));
|
|
};
|
|
|
|
template<class Function, const class Object,
|
|
class A1,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6> inline bndr_const_obj_1_3_4_5_6<Function>
|
|
bind_const_obj_1_3_4_5_6(const Object& oi, const Function &f, A1 a1,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6) {
|
|
return bndr_const_obj_1_3_4_5_6<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6));
|
|
};
|
|
|
|
template<class Function, const class Object,
|
|
class A1,
|
|
class A2,
|
|
class A4,
|
|
class A5,
|
|
class A6> inline bndr_const_obj_1_2_4_5_6<Function>
|
|
bind_const_obj_1_2_4_5_6(const Object& oi, const Function &f, A1 a1,
|
|
A2 a2,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6) {
|
|
return bndr_const_obj_1_2_4_5_6<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6));
|
|
};
|
|
|
|
|
|
|
|
//
|
|
// binders for arity 2
|
|
//
|
|
|
|
|
|
// Template Classes for binding arity 2 to arity 1
|
|
|
|
|
|
// Template Classes for binding function ptrs of arity 2 to arity 1
|
|
|
|
template<class Function> class std_bndr_2 :
|
|
public std_arity1fp<typename Function::first_argument_type, typename Function::result_type> {
|
|
public:
|
|
typedef typename Function::result_type ( __stdcall *const pf2type) (typename Function::first_argument_type, typename Function::second_argument_type);
|
|
explicit inline std_bndr_2(const Function &f, typename Function::second_argument_type a2) :
|
|
std_arity1fp<typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pf1type>(f.pf0)), arg2val(a2) {}
|
|
inline std_bndr_2(const std_bndr_2& bndri) :
|
|
std_arity1fp<typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pf1type>(bndri.pf0)), arg2val(bndri.arg2val) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1) const {
|
|
pf2type pf = reinterpret_cast<pf2type>(pf0);
|
|
return pf(a1, arg2val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_1 :
|
|
public std_arity1fp<typename Function::second_argument_type, typename Function::result_type> {
|
|
public:
|
|
typedef typename Function::result_type ( __stdcall *const pf2type) (typename Function::first_argument_type, typename Function::second_argument_type);
|
|
explicit inline std_bndr_1(const Function &f, typename Function::first_argument_type a1) :
|
|
std_arity1fp<typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pf1type>(f.pf0)), arg1val(a1) {}
|
|
inline std_bndr_1(const std_bndr_1& bndri) :
|
|
std_arity1fp<typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pf1type>(bndri.pf0)), arg1val(bndri.arg1val) {}
|
|
inline typename Function::result_type operator()(typename Function::second_argument_type a2) const {
|
|
pf2type pf = reinterpret_cast<pf2type>(pf0);
|
|
return pf(arg1val, a2);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding pmf of arity 2 to arity 1
|
|
|
|
template<class Function> class std_bndr_mf_2 :
|
|
public std_arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>,
|
|
private std_arity2_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_mf_2(const Function &f, typename Function::second_argument_type a2) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), std_arity2_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(f), arg2val(a2) {}
|
|
inline std_bndr_mf_2(const std_bndr_mf_2& bndri) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity2_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const {
|
|
pmf2type pmf = reinterpret_cast<pmf2type>(pmf0);
|
|
return (o.*pmf)(a1, arg2val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_mf_1 :
|
|
public std_arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>,
|
|
private std_arity2_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_mf_1(const Function &f, typename Function::first_argument_type a1) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), std_arity2_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(f), arg1val(a1) {}
|
|
inline std_bndr_mf_1(const std_bndr_mf_1& bndri) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity2_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const {
|
|
pmf2type pmf = reinterpret_cast<pmf2type>(pmf0);
|
|
return (o.*pmf)(arg1val, a2);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding const pmf of arity 2 to arity 1
|
|
|
|
template<class Function> class std_bndr_const_mf_2 :
|
|
public std_arity1pmf_const<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>,
|
|
private std_arity2_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_const_mf_2(const Function &f, typename Function::second_argument_type a2) :
|
|
std_arity1pmf_const<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), std_arity2_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(f), arg2val(a2) {}
|
|
inline std_bndr_const_mf_2(const std_bndr_const_mf_2& bndri) :
|
|
std_arity1pmf_const<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity2_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const {
|
|
pmf2type pmf = reinterpret_cast<pmf2type>(pmf0);
|
|
return (o.*pmf)(a1, arg2val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_const_mf_1 :
|
|
public std_arity1pmf_const<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>,
|
|
private std_arity2_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_const_mf_1(const Function &f, typename Function::first_argument_type a1) :
|
|
std_arity1pmf_const<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), std_arity2_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(f), arg1val(a1) {}
|
|
inline std_bndr_const_mf_1(const std_bndr_const_mf_1& bndri) :
|
|
std_arity1pmf_const<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity2_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const {
|
|
pmf2type pmf = reinterpret_cast<pmf2type>(pmf0);
|
|
return (o.*pmf)(arg1val, a2);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding obj&pmf Ref of arity 2 to arity 1
|
|
|
|
template<class Function> class std_bndr_obj_2 :
|
|
public std_arity1opmf<Function>,
|
|
private std_arity2_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_obj_2(typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2) :
|
|
std_arity1opmf<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), std_arity2_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(f), arg2val(a2) {}
|
|
inline std_bndr_obj_2(const std_bndr_obj_2& bndri) :
|
|
std_arity1opmf<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity2_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1) const {
|
|
pmf2type pmf = reinterpret_cast<pmf2type>(pmf0);
|
|
return (objval.*pmf)(a1, arg2val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_obj_1 :
|
|
public std_arity1opmf<Function>,
|
|
private std_arity2_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_obj_1(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1) :
|
|
std_arity1opmf<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), std_arity2_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(f), arg1val(a1) {}
|
|
inline std_bndr_obj_1(const std_bndr_obj_1& bndri) :
|
|
std_arity1opmf<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity2_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val) {}
|
|
inline typename Function::result_type operator()(typename Function::second_argument_type a2) const {
|
|
pmf2type pmf = reinterpret_cast<pmf2type>(pmf0);
|
|
return (objval.*pmf)(arg1val, a2);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding const obj&pmf Ref of arity 2 to arity 1
|
|
|
|
template<class Function> class std_bndr_const_obj_2 :
|
|
public std_arity1opmf_const<Function>,
|
|
private std_arity2_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_const_obj_2(const typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2) :
|
|
std_arity1opmf_const<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), std_arity2_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(f), arg2val(a2) {}
|
|
inline std_bndr_const_obj_2(const std_bndr_const_obj_2& bndri) :
|
|
std_arity1opmf_const<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity2_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1) const {
|
|
pmf2type pmf = reinterpret_cast<pmf2type>(pmf0);
|
|
return (objval.*pmf)(a1, arg2val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_const_obj_1 :
|
|
public std_arity1opmf_const<Function>,
|
|
private std_arity2_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_const_obj_1(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1) :
|
|
std_arity1opmf_const<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), std_arity2_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(f), arg1val(a1) {}
|
|
inline std_bndr_const_obj_1(const std_bndr_const_obj_1& bndri) :
|
|
std_arity1opmf_const<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity2_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val) {}
|
|
inline typename Function::result_type operator()(typename Function::second_argument_type a2) const {
|
|
pmf2type pmf = reinterpret_cast<pmf2type>(pmf0);
|
|
return (objval.*pmf)(arg1val, a2);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding arity 2 to arity 1
|
|
|
|
|
|
// Template Functions for binding function ptrs of arity 2 to arity 1
|
|
|
|
template<class Function, class A2> inline std_bndr_2<Function>
|
|
std_bind_fp_2(const Function &f, A2 a2) {
|
|
return std_bndr_2<Function>(f, typename Function::second_argument_type(a2));
|
|
};
|
|
|
|
template<class Function, class A1> inline std_bndr_1<Function>
|
|
std_bind_fp_1(const Function &f, A1 a1) {
|
|
return std_bndr_1<Function>(f, typename Function::first_argument_type(a1));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding pmf of arity 2 to arity 1
|
|
|
|
template<class Function, class A2> inline std_bndr_mf_2<Function>
|
|
std_bind_mf_2(const Function &f, A2 a2) {
|
|
return std_bndr_mf_2<Function>(f, typename Function::second_argument_type(a2));
|
|
};
|
|
|
|
template<class Function, class A1> inline std_bndr_mf_1<Function>
|
|
std_bind_mf_1(const Function &f, A1 a1) {
|
|
return std_bndr_mf_1<Function>(f, typename Function::first_argument_type(a1));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding const pmf of arity 2 to arity 1
|
|
|
|
template<class Function, class A2> inline std_bndr_const_mf_2<Function>
|
|
std_bind_const_mf_2(const Function &f, A2 a2) {
|
|
return std_bndr_const_mf_2<Function>(f, typename Function::second_argument_type(a2));
|
|
};
|
|
|
|
template<class Function, class A1> inline std_bndr_const_mf_1<Function>
|
|
std_bind_const_mf_1(const Function &f, A1 a1) {
|
|
return std_bndr_const_mf_1<Function>(f, typename Function::first_argument_type(a1));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding obj&pmf Ref of arity 2 to arity 1
|
|
|
|
template<class Function, class Object,
|
|
class A2> inline std_bndr_obj_2<Function>
|
|
std_bind_obj_2(Object& oi, const Function &f, A2 a2) {
|
|
return std_bndr_obj_2<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::second_argument_type(a2));
|
|
};
|
|
|
|
template<class Function, class Object,
|
|
class A1> inline std_bndr_obj_1<Function>
|
|
std_bind_obj_1(Object& oi, const Function &f, A1 a1) {
|
|
return std_bndr_obj_1<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding const obj&pmf Ref of arity 2 to arity 1
|
|
|
|
template<class Function, const class Object,
|
|
class A2> inline std_bndr_const_obj_2<Function>
|
|
std_bind_const_obj_2(const Object& oi, const Function &f, A2 a2) {
|
|
return std_bndr_const_obj_2<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::second_argument_type(a2));
|
|
};
|
|
|
|
template<class Function, const class Object,
|
|
class A1> inline std_bndr_const_obj_1<Function>
|
|
std_bind_const_obj_1(const Object& oi, const Function &f, A1 a1) {
|
|
return std_bndr_const_obj_1<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1));
|
|
};
|
|
|
|
|
|
|
|
//
|
|
// binders for arity 3
|
|
//
|
|
|
|
|
|
// Template Classes for binding arity 3 to arity 1
|
|
|
|
|
|
// Template Classes for binding function ptrs of arity 3 to arity 1
|
|
|
|
template<class Function> class std_bndr_2_3 :
|
|
public std_arity1fp<typename Function::first_argument_type, typename Function::result_type> {
|
|
public:
|
|
typedef typename Function::result_type ( __stdcall *const pf3type) (typename Function::first_argument_type, typename Function::second_argument_type, typename Function::argument_3_type);
|
|
explicit inline std_bndr_2_3(const Function &f, typename Function::second_argument_type a2,
|
|
typename Function::argument_3_type a3) :
|
|
std_arity1fp<typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pf1type>(f.pf0)), arg2val(a2), arg3val(a3) {}
|
|
inline std_bndr_2_3(const std_bndr_2_3& bndri) :
|
|
std_arity1fp<typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pf1type>(bndri.pf0)), arg2val(bndri.arg2val), arg3val(bndri.arg3val) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1) const {
|
|
pf3type pf = reinterpret_cast<pf3type>(pf0);
|
|
return pf(a1, arg2val, arg3val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_1_3 :
|
|
public std_arity1fp<typename Function::second_argument_type, typename Function::result_type> {
|
|
public:
|
|
typedef typename Function::result_type ( __stdcall *const pf3type) (typename Function::first_argument_type, typename Function::second_argument_type, typename Function::argument_3_type);
|
|
explicit inline std_bndr_1_3(const Function &f, typename Function::first_argument_type a1,
|
|
typename Function::argument_3_type a3) :
|
|
std_arity1fp<typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pf1type>(f.pf0)), arg1val(a1), arg3val(a3) {}
|
|
inline std_bndr_1_3(const std_bndr_1_3& bndri) :
|
|
std_arity1fp<typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pf1type>(bndri.pf0)), arg1val(bndri.arg1val), arg3val(bndri.arg3val) {}
|
|
inline typename Function::result_type operator()(typename Function::second_argument_type a2) const {
|
|
pf3type pf = reinterpret_cast<pf3type>(pf0);
|
|
return pf(arg1val, a2, arg3val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_1_2 :
|
|
public std_arity1fp<typename Function::argument_3_type, typename Function::result_type> {
|
|
public:
|
|
typedef typename Function::result_type ( __stdcall *const pf3type) (typename Function::first_argument_type, typename Function::second_argument_type, typename Function::argument_3_type);
|
|
explicit inline std_bndr_1_2(const Function &f, typename Function::first_argument_type a1,
|
|
typename Function::second_argument_type a2) :
|
|
std_arity1fp<typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pf1type>(f.pf0)), arg1val(a1), arg2val(a2) {}
|
|
inline std_bndr_1_2(const std_bndr_1_2& bndri) :
|
|
std_arity1fp<typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pf1type>(bndri.pf0)), arg1val(bndri.arg1val), arg2val(bndri.arg2val) {}
|
|
inline typename Function::result_type operator()(typename Function::argument_3_type a3) const {
|
|
pf3type pf = reinterpret_cast<pf3type>(pf0);
|
|
return pf(arg1val, arg2val, a3);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding pmf of arity 3 to arity 1
|
|
|
|
template<class Function> class std_bndr_mf_2_3 :
|
|
public std_arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>,
|
|
private std_arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_mf_2_3(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), std_arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3) {}
|
|
inline std_bndr_mf_2_3(const std_bndr_mf_2_3& bndri) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (o.*pmf)(a1, arg2val, arg3val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_mf_1_3 :
|
|
public std_arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>,
|
|
private std_arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_mf_1_3(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), std_arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3) {}
|
|
inline std_bndr_mf_1_3(const std_bndr_mf_1_3& bndri) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (o.*pmf)(arg1val, a2, arg3val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_mf_1_2 :
|
|
public std_arity1pmf<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>,
|
|
private std_arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_mf_1_2(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), std_arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2) {}
|
|
inline std_bndr_mf_1_2(const std_bndr_mf_1_2& bndri) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (o.*pmf)(arg1val, arg2val, a3);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding const pmf of arity 3 to arity 1
|
|
|
|
template<class Function> class std_bndr_const_mf_2_3 :
|
|
public std_arity1pmf_const<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>,
|
|
private std_arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_const_mf_2_3(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3) :
|
|
std_arity1pmf_const<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), std_arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3) {}
|
|
inline std_bndr_const_mf_2_3(const std_bndr_const_mf_2_3& bndri) :
|
|
std_arity1pmf_const<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (o.*pmf)(a1, arg2val, arg3val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_const_mf_1_3 :
|
|
public std_arity1pmf_const<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>,
|
|
private std_arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_const_mf_1_3(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3) :
|
|
std_arity1pmf_const<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), std_arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3) {}
|
|
inline std_bndr_const_mf_1_3(const std_bndr_const_mf_1_3& bndri) :
|
|
std_arity1pmf_const<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (o.*pmf)(arg1val, a2, arg3val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_const_mf_1_2 :
|
|
public std_arity1pmf_const<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>,
|
|
private std_arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_const_mf_1_2(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2) :
|
|
std_arity1pmf_const<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), std_arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2) {}
|
|
inline std_bndr_const_mf_1_2(const std_bndr_const_mf_1_2& bndri) :
|
|
std_arity1pmf_const<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (o.*pmf)(arg1val, arg2val, a3);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding obj&pmf Ref of arity 3 to arity 1
|
|
|
|
template<class Function> class std_bndr_obj_2_3 :
|
|
public std_arity1opmf<Function>,
|
|
private std_arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_obj_2_3(typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3) :
|
|
std_arity1opmf<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), std_arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3) {}
|
|
inline std_bndr_obj_2_3(const std_bndr_obj_2_3& bndri) :
|
|
std_arity1opmf<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (objval.*pmf)(a1, arg2val, arg3val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_obj_1_3 :
|
|
public std_arity1opmf<Function>,
|
|
private std_arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_obj_1_3(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3) :
|
|
std_arity1opmf<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), std_arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3) {}
|
|
inline std_bndr_obj_1_3(const std_bndr_obj_1_3& bndri) :
|
|
std_arity1opmf<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val) {}
|
|
inline typename Function::result_type operator()(typename Function::second_argument_type a2) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (objval.*pmf)(arg1val, a2, arg3val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_obj_1_2 :
|
|
public std_arity1opmf<Function>,
|
|
private std_arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_obj_1_2(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2) :
|
|
std_arity1opmf<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), std_arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2) {}
|
|
inline std_bndr_obj_1_2(const std_bndr_obj_1_2& bndri) :
|
|
std_arity1opmf<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity3_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val) {}
|
|
inline typename Function::result_type operator()(typename Function::argument_3_type a3) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (objval.*pmf)(arg1val, arg2val, a3);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding const obj&pmf Ref of arity 3 to arity 1
|
|
|
|
template<class Function> class std_bndr_const_obj_2_3 :
|
|
public std_arity1opmf_const<Function>,
|
|
private std_arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_const_obj_2_3(const typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3) :
|
|
std_arity1opmf_const<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), std_arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3) {}
|
|
inline std_bndr_const_obj_2_3(const std_bndr_const_obj_2_3& bndri) :
|
|
std_arity1opmf_const<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (objval.*pmf)(a1, arg2val, arg3val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_const_obj_1_3 :
|
|
public std_arity1opmf_const<Function>,
|
|
private std_arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_const_obj_1_3(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3) :
|
|
std_arity1opmf_const<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), std_arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3) {}
|
|
inline std_bndr_const_obj_1_3(const std_bndr_const_obj_1_3& bndri) :
|
|
std_arity1opmf_const<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val) {}
|
|
inline typename Function::result_type operator()(typename Function::second_argument_type a2) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (objval.*pmf)(arg1val, a2, arg3val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_const_obj_1_2 :
|
|
public std_arity1opmf_const<Function>,
|
|
private std_arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_const_obj_1_2(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2) :
|
|
std_arity1opmf_const<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), std_arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2) {}
|
|
inline std_bndr_const_obj_1_2(const std_bndr_const_obj_1_2& bndri) :
|
|
std_arity1opmf_const<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity3_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val) {}
|
|
inline typename Function::result_type operator()(typename Function::argument_3_type a3) const {
|
|
pmf3type pmf = reinterpret_cast<pmf3type>(pmf0);
|
|
return (objval.*pmf)(arg1val, arg2val, a3);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding arity 3 to arity 1
|
|
|
|
|
|
// Template Functions for binding function ptrs of arity 3 to arity 1
|
|
|
|
template<class Function, class A2,
|
|
class A3> inline std_bndr_2_3<Function>
|
|
std_bind_fp_2_3(const Function &f, A2 a2,
|
|
A3 a3) {
|
|
return std_bndr_2_3<Function>(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A3> inline std_bndr_1_3<Function>
|
|
std_bind_fp_1_3(const Function &f, A1 a1,
|
|
A3 a3) {
|
|
return std_bndr_1_3<Function>(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A2> inline std_bndr_1_2<Function>
|
|
std_bind_fp_1_2(const Function &f, A1 a1,
|
|
A2 a2) {
|
|
return std_bndr_1_2<Function>(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding pmf of arity 3 to arity 1
|
|
|
|
template<class Function, class A2,
|
|
class A3> inline std_bndr_mf_2_3<Function>
|
|
std_bind_mf_2_3(const Function &f, A2 a2,
|
|
A3 a3) {
|
|
return std_bndr_mf_2_3<Function>(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A3> inline std_bndr_mf_1_3<Function>
|
|
std_bind_mf_1_3(const Function &f, A1 a1,
|
|
A3 a3) {
|
|
return std_bndr_mf_1_3<Function>(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A2> inline std_bndr_mf_1_2<Function>
|
|
std_bind_mf_1_2(const Function &f, A1 a1,
|
|
A2 a2) {
|
|
return std_bndr_mf_1_2<Function>(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding const pmf of arity 3 to arity 1
|
|
|
|
template<class Function, class A2,
|
|
class A3> inline std_bndr_const_mf_2_3<Function>
|
|
std_bind_const_mf_2_3(const Function &f, A2 a2,
|
|
A3 a3) {
|
|
return std_bndr_const_mf_2_3<Function>(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A3> inline std_bndr_const_mf_1_3<Function>
|
|
std_bind_const_mf_1_3(const Function &f, A1 a1,
|
|
A3 a3) {
|
|
return std_bndr_const_mf_1_3<Function>(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A2> inline std_bndr_const_mf_1_2<Function>
|
|
std_bind_const_mf_1_2(const Function &f, A1 a1,
|
|
A2 a2) {
|
|
return std_bndr_const_mf_1_2<Function>(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding obj&pmf Ref of arity 3 to arity 1
|
|
|
|
template<class Function, class Object,
|
|
class A2,
|
|
class A3> inline std_bndr_obj_2_3<Function>
|
|
std_bind_obj_2_3(Object& oi, const Function &f, A2 a2,
|
|
A3 a3) {
|
|
return std_bndr_obj_2_3<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3));
|
|
};
|
|
|
|
template<class Function, class Object,
|
|
class A1,
|
|
class A3> inline std_bndr_obj_1_3<Function>
|
|
std_bind_obj_1_3(Object& oi, const Function &f, A1 a1,
|
|
A3 a3) {
|
|
return std_bndr_obj_1_3<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3));
|
|
};
|
|
|
|
template<class Function, class Object,
|
|
class A1,
|
|
class A2> inline std_bndr_obj_1_2<Function>
|
|
std_bind_obj_1_2(Object& oi, const Function &f, A1 a1,
|
|
A2 a2) {
|
|
return std_bndr_obj_1_2<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding const obj&pmf Ref of arity 3 to arity 1
|
|
|
|
template<class Function, const class Object,
|
|
class A2,
|
|
class A3> inline std_bndr_const_obj_2_3<Function>
|
|
std_bind_const_obj_2_3(const Object& oi, const Function &f, A2 a2,
|
|
A3 a3) {
|
|
return std_bndr_const_obj_2_3<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3));
|
|
};
|
|
|
|
template<class Function, const class Object,
|
|
class A1,
|
|
class A3> inline std_bndr_const_obj_1_3<Function>
|
|
std_bind_const_obj_1_3(const Object& oi, const Function &f, A1 a1,
|
|
A3 a3) {
|
|
return std_bndr_const_obj_1_3<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3));
|
|
};
|
|
|
|
template<class Function, const class Object,
|
|
class A1,
|
|
class A2> inline std_bndr_const_obj_1_2<Function>
|
|
std_bind_const_obj_1_2(const Object& oi, const Function &f, A1 a1,
|
|
A2 a2) {
|
|
return std_bndr_const_obj_1_2<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2));
|
|
};
|
|
|
|
|
|
|
|
//
|
|
// binders for arity 4
|
|
//
|
|
|
|
|
|
// Template Classes for binding arity 4 to arity 1
|
|
|
|
|
|
// Template Classes for binding pmf of arity 4 to arity 1
|
|
|
|
template<class Function> class std_bndr_mf_2_3_4 :
|
|
public std_arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>,
|
|
private std_arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_mf_2_3_4(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), std_arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3), arg4val(a4) {}
|
|
inline std_bndr_mf_2_3_4(const std_bndr_mf_2_3_4& bndri) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (o.*pmf)(a1, arg2val, arg3val, arg4val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_mf_1_3_4 :
|
|
public std_arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>,
|
|
private std_arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_mf_1_3_4(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), std_arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3), arg4val(a4) {}
|
|
inline std_bndr_mf_1_3_4(const std_bndr_mf_1_3_4& bndri) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (o.*pmf)(arg1val, a2, arg3val, arg4val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_mf_1_2_4 :
|
|
public std_arity1pmf<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>,
|
|
private std_arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_mf_1_2_4(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), std_arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2), arg4val(a4) {}
|
|
inline std_bndr_mf_1_2_4(const std_bndr_mf_1_2_4& bndri) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (o.*pmf)(arg1val, arg2val, a3, arg4val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_4_type arg4val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding const pmf of arity 4 to arity 1
|
|
|
|
template<class Function> class std_bndr_const_mf_2_3_4 :
|
|
public std_arity1pmf_const<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>,
|
|
private std_arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_const_mf_2_3_4(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4) :
|
|
std_arity1pmf_const<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), std_arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3), arg4val(a4) {}
|
|
inline std_bndr_const_mf_2_3_4(const std_bndr_const_mf_2_3_4& bndri) :
|
|
std_arity1pmf_const<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (o.*pmf)(a1, arg2val, arg3val, arg4val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_const_mf_1_3_4 :
|
|
public std_arity1pmf_const<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>,
|
|
private std_arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_const_mf_1_3_4(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4) :
|
|
std_arity1pmf_const<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), std_arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3), arg4val(a4) {}
|
|
inline std_bndr_const_mf_1_3_4(const std_bndr_const_mf_1_3_4& bndri) :
|
|
std_arity1pmf_const<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (o.*pmf)(arg1val, a2, arg3val, arg4val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_const_mf_1_2_4 :
|
|
public std_arity1pmf_const<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>,
|
|
private std_arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_const_mf_1_2_4(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4) :
|
|
std_arity1pmf_const<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), std_arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2), arg4val(a4) {}
|
|
inline std_bndr_const_mf_1_2_4(const std_bndr_const_mf_1_2_4& bndri) :
|
|
std_arity1pmf_const<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (o.*pmf)(arg1val, arg2val, a3, arg4val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_4_type arg4val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding obj&pmf Ref of arity 4 to arity 1
|
|
|
|
template<class Function> class std_bndr_obj_2_3_4 :
|
|
public std_arity1opmf<Function>,
|
|
private std_arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_obj_2_3_4(typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4) :
|
|
std_arity1opmf<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), std_arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3), arg4val(a4) {}
|
|
inline std_bndr_obj_2_3_4(const std_bndr_obj_2_3_4& bndri) :
|
|
std_arity1opmf<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (objval.*pmf)(a1, arg2val, arg3val, arg4val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_obj_1_3_4 :
|
|
public std_arity1opmf<Function>,
|
|
private std_arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_obj_1_3_4(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4) :
|
|
std_arity1opmf<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), std_arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3), arg4val(a4) {}
|
|
inline std_bndr_obj_1_3_4(const std_bndr_obj_1_3_4& bndri) :
|
|
std_arity1opmf<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {}
|
|
inline typename Function::result_type operator()(typename Function::second_argument_type a2) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (objval.*pmf)(arg1val, a2, arg3val, arg4val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_obj_1_2_4 :
|
|
public std_arity1opmf<Function>,
|
|
private std_arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_obj_1_2_4(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4) :
|
|
std_arity1opmf<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), std_arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2), arg4val(a4) {}
|
|
inline std_bndr_obj_1_2_4(const std_bndr_obj_1_2_4& bndri) :
|
|
std_arity1opmf<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity4_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val) {}
|
|
inline typename Function::result_type operator()(typename Function::argument_3_type a3) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (objval.*pmf)(arg1val, arg2val, a3, arg4val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_4_type arg4val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding const obj&pmf Ref of arity 4 to arity 1
|
|
|
|
template<class Function> class std_bndr_const_obj_2_3_4 :
|
|
public std_arity1opmf_const<Function>,
|
|
private std_arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_const_obj_2_3_4(const typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4) :
|
|
std_arity1opmf_const<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), std_arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3), arg4val(a4) {}
|
|
inline std_bndr_const_obj_2_3_4(const std_bndr_const_obj_2_3_4& bndri) :
|
|
std_arity1opmf_const<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (objval.*pmf)(a1, arg2val, arg3val, arg4val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_const_obj_1_3_4 :
|
|
public std_arity1opmf_const<Function>,
|
|
private std_arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_const_obj_1_3_4(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4) :
|
|
std_arity1opmf_const<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), std_arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3), arg4val(a4) {}
|
|
inline std_bndr_const_obj_1_3_4(const std_bndr_const_obj_1_3_4& bndri) :
|
|
std_arity1opmf_const<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val) {}
|
|
inline typename Function::result_type operator()(typename Function::second_argument_type a2) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (objval.*pmf)(arg1val, a2, arg3val, arg4val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_const_obj_1_2_4 :
|
|
public std_arity1opmf_const<Function>,
|
|
private std_arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_const_obj_1_2_4(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4) :
|
|
std_arity1opmf_const<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), std_arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2), arg4val(a4) {}
|
|
inline std_bndr_const_obj_1_2_4(const std_bndr_const_obj_1_2_4& bndri) :
|
|
std_arity1opmf_const<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity4_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val) {}
|
|
inline typename Function::result_type operator()(typename Function::argument_3_type a3) const {
|
|
pmf4type pmf = reinterpret_cast<pmf4type>(pmf0);
|
|
return (objval.*pmf)(arg1val, arg2val, a3, arg4val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_4_type arg4val;
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding arity 4 to arity 1
|
|
|
|
|
|
// Template Functions for binding pmf of arity 4 to arity 1
|
|
|
|
template<class Function, class A2,
|
|
class A3,
|
|
class A4> inline std_bndr_mf_2_3_4<Function>
|
|
std_bind_mf_2_3_4(const Function &f, A2 a2,
|
|
A3 a3,
|
|
A4 a4) {
|
|
return std_bndr_mf_2_3_4<Function>(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A3,
|
|
class A4> inline std_bndr_mf_1_3_4<Function>
|
|
std_bind_mf_1_3_4(const Function &f, A1 a1,
|
|
A3 a3,
|
|
A4 a4) {
|
|
return std_bndr_mf_1_3_4<Function>(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A2,
|
|
class A4> inline std_bndr_mf_1_2_4<Function>
|
|
std_bind_mf_1_2_4(const Function &f, A1 a1,
|
|
A2 a2,
|
|
A4 a4) {
|
|
return std_bndr_mf_1_2_4<Function>(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding const pmf of arity 4 to arity 1
|
|
|
|
template<class Function, class A2,
|
|
class A3,
|
|
class A4> inline std_bndr_const_mf_2_3_4<Function>
|
|
std_bind_const_mf_2_3_4(const Function &f, A2 a2,
|
|
A3 a3,
|
|
A4 a4) {
|
|
return std_bndr_const_mf_2_3_4<Function>(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A3,
|
|
class A4> inline std_bndr_const_mf_1_3_4<Function>
|
|
std_bind_const_mf_1_3_4(const Function &f, A1 a1,
|
|
A3 a3,
|
|
A4 a4) {
|
|
return std_bndr_const_mf_1_3_4<Function>(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A2,
|
|
class A4> inline std_bndr_const_mf_1_2_4<Function>
|
|
std_bind_const_mf_1_2_4(const Function &f, A1 a1,
|
|
A2 a2,
|
|
A4 a4) {
|
|
return std_bndr_const_mf_1_2_4<Function>(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding obj&pmf Ref of arity 4 to arity 1
|
|
|
|
template<class Function, class Object,
|
|
class A2,
|
|
class A3,
|
|
class A4> inline std_bndr_obj_2_3_4<Function>
|
|
std_bind_obj_2_3_4(Object& oi, const Function &f, A2 a2,
|
|
A3 a3,
|
|
A4 a4) {
|
|
return std_bndr_obj_2_3_4<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4));
|
|
};
|
|
|
|
template<class Function, class Object,
|
|
class A1,
|
|
class A3,
|
|
class A4> inline std_bndr_obj_1_3_4<Function>
|
|
std_bind_obj_1_3_4(Object& oi, const Function &f, A1 a1,
|
|
A3 a3,
|
|
A4 a4) {
|
|
return std_bndr_obj_1_3_4<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4));
|
|
};
|
|
|
|
template<class Function, class Object,
|
|
class A1,
|
|
class A2,
|
|
class A4> inline std_bndr_obj_1_2_4<Function>
|
|
std_bind_obj_1_2_4(Object& oi, const Function &f, A1 a1,
|
|
A2 a2,
|
|
A4 a4) {
|
|
return std_bndr_obj_1_2_4<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding const obj&pmf Ref of arity 4 to arity 1
|
|
|
|
template<class Function, const class Object,
|
|
class A2,
|
|
class A3,
|
|
class A4> inline std_bndr_const_obj_2_3_4<Function>
|
|
std_bind_const_obj_2_3_4(const Object& oi, const Function &f, A2 a2,
|
|
A3 a3,
|
|
A4 a4) {
|
|
return std_bndr_const_obj_2_3_4<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4));
|
|
};
|
|
|
|
template<class Function, const class Object,
|
|
class A1,
|
|
class A3,
|
|
class A4> inline std_bndr_const_obj_1_3_4<Function>
|
|
std_bind_const_obj_1_3_4(const Object& oi, const Function &f, A1 a1,
|
|
A3 a3,
|
|
A4 a4) {
|
|
return std_bndr_const_obj_1_3_4<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4));
|
|
};
|
|
|
|
template<class Function, const class Object,
|
|
class A1,
|
|
class A2,
|
|
class A4> inline std_bndr_const_obj_1_2_4<Function>
|
|
std_bind_const_obj_1_2_4(const Object& oi, const Function &f, A1 a1,
|
|
A2 a2,
|
|
A4 a4) {
|
|
return std_bndr_const_obj_1_2_4<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4));
|
|
};
|
|
|
|
|
|
|
|
//
|
|
// binders for arity 5
|
|
//
|
|
|
|
|
|
// Template Classes for binding arity 5 to arity 1
|
|
|
|
|
|
// Template Classes for binding pmf of arity 5 to arity 1
|
|
|
|
template<class Function> class std_bndr_mf_2_3_4_5 :
|
|
public std_arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>,
|
|
private std_arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_mf_2_3_4_5(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), std_arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5) {}
|
|
inline std_bndr_mf_2_3_4_5(const std_bndr_mf_2_3_4_5& bndri) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (o.*pmf)(a1, arg2val, arg3val, arg4val, arg5val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_mf_1_3_4_5 :
|
|
public std_arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>,
|
|
private std_arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_mf_1_3_4_5(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), std_arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5) {}
|
|
inline std_bndr_mf_1_3_4_5(const std_bndr_mf_1_3_4_5& bndri) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (o.*pmf)(arg1val, a2, arg3val, arg4val, arg5val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_mf_1_2_4_5 :
|
|
public std_arity1pmf<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>,
|
|
private std_arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_mf_1_2_4_5(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), std_arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5) {}
|
|
inline std_bndr_mf_1_2_4_5(const std_bndr_mf_1_2_4_5& bndri) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (o.*pmf)(arg1val, arg2val, a3, arg4val, arg5val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding const pmf of arity 5 to arity 1
|
|
|
|
template<class Function> class std_bndr_const_mf_2_3_4_5 :
|
|
public std_arity1pmf_const<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>,
|
|
private std_arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_const_mf_2_3_4_5(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) :
|
|
std_arity1pmf_const<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), std_arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5) {}
|
|
inline std_bndr_const_mf_2_3_4_5(const std_bndr_const_mf_2_3_4_5& bndri) :
|
|
std_arity1pmf_const<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (o.*pmf)(a1, arg2val, arg3val, arg4val, arg5val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_const_mf_1_3_4_5 :
|
|
public std_arity1pmf_const<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>,
|
|
private std_arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_const_mf_1_3_4_5(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) :
|
|
std_arity1pmf_const<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), std_arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5) {}
|
|
inline std_bndr_const_mf_1_3_4_5(const std_bndr_const_mf_1_3_4_5& bndri) :
|
|
std_arity1pmf_const<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (o.*pmf)(arg1val, a2, arg3val, arg4val, arg5val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_const_mf_1_2_4_5 :
|
|
public std_arity1pmf_const<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>,
|
|
private std_arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_const_mf_1_2_4_5(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5) :
|
|
std_arity1pmf_const<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), std_arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5) {}
|
|
inline std_bndr_const_mf_1_2_4_5(const std_bndr_const_mf_1_2_4_5& bndri) :
|
|
std_arity1pmf_const<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (o.*pmf)(arg1val, arg2val, a3, arg4val, arg5val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding obj&pmf Ref of arity 5 to arity 1
|
|
|
|
template<class Function> class std_bndr_obj_2_3_4_5 :
|
|
public std_arity1opmf<Function>,
|
|
private std_arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_obj_2_3_4_5(typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) :
|
|
std_arity1opmf<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), std_arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5) {}
|
|
inline std_bndr_obj_2_3_4_5(const std_bndr_obj_2_3_4_5& bndri) :
|
|
std_arity1opmf<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (objval.*pmf)(a1, arg2val, arg3val, arg4val, arg5val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_obj_1_3_4_5 :
|
|
public std_arity1opmf<Function>,
|
|
private std_arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_obj_1_3_4_5(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) :
|
|
std_arity1opmf<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), std_arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5) {}
|
|
inline std_bndr_obj_1_3_4_5(const std_bndr_obj_1_3_4_5& bndri) :
|
|
std_arity1opmf<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {}
|
|
inline typename Function::result_type operator()(typename Function::second_argument_type a2) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (objval.*pmf)(arg1val, a2, arg3val, arg4val, arg5val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_obj_1_2_4_5 :
|
|
public std_arity1opmf<Function>,
|
|
private std_arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_obj_1_2_4_5(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5) :
|
|
std_arity1opmf<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), std_arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5) {}
|
|
inline std_bndr_obj_1_2_4_5(const std_bndr_obj_1_2_4_5& bndri) :
|
|
std_arity1opmf<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity5_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {}
|
|
inline typename Function::result_type operator()(typename Function::argument_3_type a3) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (objval.*pmf)(arg1val, arg2val, a3, arg4val, arg5val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding const obj&pmf Ref of arity 5 to arity 1
|
|
|
|
template<class Function> class std_bndr_const_obj_2_3_4_5 :
|
|
public std_arity1opmf_const<Function>,
|
|
private std_arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_const_obj_2_3_4_5(const typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) :
|
|
std_arity1opmf_const<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), std_arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5) {}
|
|
inline std_bndr_const_obj_2_3_4_5(const std_bndr_const_obj_2_3_4_5& bndri) :
|
|
std_arity1opmf_const<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (objval.*pmf)(a1, arg2val, arg3val, arg4val, arg5val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_const_obj_1_3_4_5 :
|
|
public std_arity1opmf_const<Function>,
|
|
private std_arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_const_obj_1_3_4_5(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5) :
|
|
std_arity1opmf_const<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), std_arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5) {}
|
|
inline std_bndr_const_obj_1_3_4_5(const std_bndr_const_obj_1_3_4_5& bndri) :
|
|
std_arity1opmf_const<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {}
|
|
inline typename Function::result_type operator()(typename Function::second_argument_type a2) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (objval.*pmf)(arg1val, a2, arg3val, arg4val, arg5val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_const_obj_1_2_4_5 :
|
|
public std_arity1opmf_const<Function>,
|
|
private std_arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_const_obj_1_2_4_5(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5) :
|
|
std_arity1opmf_const<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), std_arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5) {}
|
|
inline std_bndr_const_obj_1_2_4_5(const std_bndr_const_obj_1_2_4_5& bndri) :
|
|
std_arity1opmf_const<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity5_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val) {}
|
|
inline typename Function::result_type operator()(typename Function::argument_3_type a3) const {
|
|
pmf5type pmf = reinterpret_cast<pmf5type>(pmf0);
|
|
return (objval.*pmf)(arg1val, arg2val, a3, arg4val, arg5val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding arity 5 to arity 1
|
|
|
|
|
|
// Template Functions for binding pmf of arity 5 to arity 1
|
|
|
|
template<class Function, class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5> inline std_bndr_mf_2_3_4_5<Function>
|
|
std_bind_mf_2_3_4_5(const Function &f, A2 a2,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5) {
|
|
return std_bndr_mf_2_3_4_5<Function>(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A3,
|
|
class A4,
|
|
class A5> inline std_bndr_mf_1_3_4_5<Function>
|
|
std_bind_mf_1_3_4_5(const Function &f, A1 a1,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5) {
|
|
return std_bndr_mf_1_3_4_5<Function>(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A2,
|
|
class A4,
|
|
class A5> inline std_bndr_mf_1_2_4_5<Function>
|
|
std_bind_mf_1_2_4_5(const Function &f, A1 a1,
|
|
A2 a2,
|
|
A4 a4,
|
|
A5 a5) {
|
|
return std_bndr_mf_1_2_4_5<Function>(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding const pmf of arity 5 to arity 1
|
|
|
|
template<class Function, class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5> inline std_bndr_const_mf_2_3_4_5<Function>
|
|
std_bind_const_mf_2_3_4_5(const Function &f, A2 a2,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5) {
|
|
return std_bndr_const_mf_2_3_4_5<Function>(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A3,
|
|
class A4,
|
|
class A5> inline std_bndr_const_mf_1_3_4_5<Function>
|
|
std_bind_const_mf_1_3_4_5(const Function &f, A1 a1,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5) {
|
|
return std_bndr_const_mf_1_3_4_5<Function>(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A2,
|
|
class A4,
|
|
class A5> inline std_bndr_const_mf_1_2_4_5<Function>
|
|
std_bind_const_mf_1_2_4_5(const Function &f, A1 a1,
|
|
A2 a2,
|
|
A4 a4,
|
|
A5 a5) {
|
|
return std_bndr_const_mf_1_2_4_5<Function>(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding obj&pmf Ref of arity 5 to arity 1
|
|
|
|
template<class Function, class Object,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5> inline std_bndr_obj_2_3_4_5<Function>
|
|
std_bind_obj_2_3_4_5(Object& oi, const Function &f, A2 a2,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5) {
|
|
return std_bndr_obj_2_3_4_5<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5));
|
|
};
|
|
|
|
template<class Function, class Object,
|
|
class A1,
|
|
class A3,
|
|
class A4,
|
|
class A5> inline std_bndr_obj_1_3_4_5<Function>
|
|
std_bind_obj_1_3_4_5(Object& oi, const Function &f, A1 a1,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5) {
|
|
return std_bndr_obj_1_3_4_5<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5));
|
|
};
|
|
|
|
template<class Function, class Object,
|
|
class A1,
|
|
class A2,
|
|
class A4,
|
|
class A5> inline std_bndr_obj_1_2_4_5<Function>
|
|
std_bind_obj_1_2_4_5(Object& oi, const Function &f, A1 a1,
|
|
A2 a2,
|
|
A4 a4,
|
|
A5 a5) {
|
|
return std_bndr_obj_1_2_4_5<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding const obj&pmf Ref of arity 5 to arity 1
|
|
|
|
template<class Function, const class Object,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5> inline std_bndr_const_obj_2_3_4_5<Function>
|
|
std_bind_const_obj_2_3_4_5(const Object& oi, const Function &f, A2 a2,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5) {
|
|
return std_bndr_const_obj_2_3_4_5<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5));
|
|
};
|
|
|
|
template<class Function, const class Object,
|
|
class A1,
|
|
class A3,
|
|
class A4,
|
|
class A5> inline std_bndr_const_obj_1_3_4_5<Function>
|
|
std_bind_const_obj_1_3_4_5(const Object& oi, const Function &f, A1 a1,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5) {
|
|
return std_bndr_const_obj_1_3_4_5<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5));
|
|
};
|
|
|
|
template<class Function, const class Object,
|
|
class A1,
|
|
class A2,
|
|
class A4,
|
|
class A5> inline std_bndr_const_obj_1_2_4_5<Function>
|
|
std_bind_const_obj_1_2_4_5(const Object& oi, const Function &f, A1 a1,
|
|
A2 a2,
|
|
A4 a4,
|
|
A5 a5) {
|
|
return std_bndr_const_obj_1_2_4_5<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5));
|
|
};
|
|
|
|
|
|
|
|
//
|
|
// binders for arity 6
|
|
//
|
|
|
|
|
|
// Template Classes for binding arity 6 to arity 1
|
|
|
|
|
|
// Template Classes for binding pmf of arity 6 to arity 1
|
|
|
|
template<class Function> class std_bndr_mf_2_3_4_5_6 :
|
|
public std_arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>,
|
|
private std_arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_mf_2_3_4_5_6(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), std_arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {}
|
|
inline std_bndr_mf_2_3_4_5_6(const std_bndr_mf_2_3_4_5_6& bndri) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (o.*pmf)(a1, arg2val, arg3val, arg4val, arg5val, arg6val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
typename Function::argument_6_type arg6val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_mf_1_3_4_5_6 :
|
|
public std_arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>,
|
|
private std_arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_mf_1_3_4_5_6(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), std_arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {}
|
|
inline std_bndr_mf_1_3_4_5_6(const std_bndr_mf_1_3_4_5_6& bndri) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (o.*pmf)(arg1val, a2, arg3val, arg4val, arg5val, arg6val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
typename Function::argument_6_type arg6val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_mf_1_2_4_5_6 :
|
|
public std_arity1pmf<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>,
|
|
private std_arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_mf_1_2_4_5_6(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), std_arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5), arg6val(a6) {}
|
|
inline std_bndr_mf_1_2_4_5_6(const std_bndr_mf_1_2_4_5_6& bndri) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (o.*pmf)(arg1val, arg2val, a3, arg4val, arg5val, arg6val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
typename Function::argument_6_type arg6val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding const pmf of arity 6 to arity 1
|
|
|
|
template<class Function> class std_bndr_const_mf_2_3_4_5_6 :
|
|
public std_arity1pmf_const<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>,
|
|
private std_arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_const_mf_2_3_4_5_6(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) :
|
|
std_arity1pmf_const<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), std_arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {}
|
|
inline std_bndr_const_mf_2_3_4_5_6(const std_bndr_const_mf_2_3_4_5_6& bndri) :
|
|
std_arity1pmf_const<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (o.*pmf)(a1, arg2val, arg3val, arg4val, arg5val, arg6val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
typename Function::argument_6_type arg6val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_const_mf_1_3_4_5_6 :
|
|
public std_arity1pmf_const<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>,
|
|
private std_arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_const_mf_1_3_4_5_6(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) :
|
|
std_arity1pmf_const<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), std_arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {}
|
|
inline std_bndr_const_mf_1_3_4_5_6(const std_bndr_const_mf_1_3_4_5_6& bndri) :
|
|
std_arity1pmf_const<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (o.*pmf)(arg1val, a2, arg3val, arg4val, arg5val, arg6val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
typename Function::argument_6_type arg6val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_const_mf_1_2_4_5_6 :
|
|
public std_arity1pmf_const<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>,
|
|
private std_arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_const_mf_1_2_4_5_6(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) :
|
|
std_arity1pmf_const<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), std_arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5), arg6val(a6) {}
|
|
inline std_bndr_const_mf_1_2_4_5_6(const std_bndr_const_mf_1_2_4_5_6& bndri) :
|
|
std_arity1pmf_const<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (o.*pmf)(arg1val, arg2val, a3, arg4val, arg5val, arg6val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
typename Function::argument_6_type arg6val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding obj&pmf Ref of arity 6 to arity 1
|
|
|
|
template<class Function> class std_bndr_obj_2_3_4_5_6 :
|
|
public std_arity1opmf<Function>,
|
|
private std_arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_obj_2_3_4_5_6(typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) :
|
|
std_arity1opmf<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), std_arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {}
|
|
inline std_bndr_obj_2_3_4_5_6(const std_bndr_obj_2_3_4_5_6& bndri) :
|
|
std_arity1opmf<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (objval.*pmf)(a1, arg2val, arg3val, arg4val, arg5val, arg6val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
typename Function::argument_6_type arg6val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_obj_1_3_4_5_6 :
|
|
public std_arity1opmf<Function>,
|
|
private std_arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_obj_1_3_4_5_6(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) :
|
|
std_arity1opmf<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), std_arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {}
|
|
inline std_bndr_obj_1_3_4_5_6(const std_bndr_obj_1_3_4_5_6& bndri) :
|
|
std_arity1opmf<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {}
|
|
inline typename Function::result_type operator()(typename Function::second_argument_type a2) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (objval.*pmf)(arg1val, a2, arg3val, arg4val, arg5val, arg6val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
typename Function::argument_6_type arg6val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_obj_1_2_4_5_6 :
|
|
public std_arity1opmf<Function>,
|
|
private std_arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_obj_1_2_4_5_6(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) :
|
|
std_arity1opmf<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), std_arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5), arg6val(a6) {}
|
|
inline std_bndr_obj_1_2_4_5_6(const std_bndr_obj_1_2_4_5_6& bndri) :
|
|
std_arity1opmf<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity6_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {}
|
|
inline typename Function::result_type operator()(typename Function::argument_3_type a3) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (objval.*pmf)(arg1val, arg2val, a3, arg4val, arg5val, arg6val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
typename Function::argument_6_type arg6val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding const obj&pmf Ref of arity 6 to arity 1
|
|
|
|
template<class Function> class std_bndr_const_obj_2_3_4_5_6 :
|
|
public std_arity1opmf_const<Function>,
|
|
private std_arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_const_obj_2_3_4_5_6(const typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) :
|
|
std_arity1opmf_const<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), std_arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {}
|
|
inline std_bndr_const_obj_2_3_4_5_6(const std_bndr_const_obj_2_3_4_5_6& bndri) :
|
|
std_arity1opmf_const<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (objval.*pmf)(a1, arg2val, arg3val, arg4val, arg5val, arg6val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
typename Function::argument_6_type arg6val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_const_obj_1_3_4_5_6 :
|
|
public std_arity1opmf_const<Function>,
|
|
private std_arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_const_obj_1_3_4_5_6(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) :
|
|
std_arity1opmf_const<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), std_arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6) {}
|
|
inline std_bndr_const_obj_1_3_4_5_6(const std_bndr_const_obj_1_3_4_5_6& bndri) :
|
|
std_arity1opmf_const<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {}
|
|
inline typename Function::result_type operator()(typename Function::second_argument_type a2) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (objval.*pmf)(arg1val, a2, arg3val, arg4val, arg5val, arg6val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
typename Function::argument_6_type arg6val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_const_obj_1_2_4_5_6 :
|
|
public std_arity1opmf_const<Function>,
|
|
private std_arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_const_obj_1_2_4_5_6(const typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6) :
|
|
std_arity1opmf_const<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), std_arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5), arg6val(a6) {}
|
|
inline std_bndr_const_obj_1_2_4_5_6(const std_bndr_const_obj_1_2_4_5_6& bndri) :
|
|
std_arity1opmf_const<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity6_const_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val) {}
|
|
inline typename Function::result_type operator()(typename Function::argument_3_type a3) const {
|
|
pmf6type pmf = reinterpret_cast<pmf6type>(pmf0);
|
|
return (objval.*pmf)(arg1val, arg2val, a3, arg4val, arg5val, arg6val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
typename Function::argument_6_type arg6val;
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding arity 6 to arity 1
|
|
|
|
|
|
// Template Functions for binding pmf of arity 6 to arity 1
|
|
|
|
template<class Function, class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6> inline std_bndr_mf_2_3_4_5_6<Function>
|
|
std_bind_mf_2_3_4_5_6(const Function &f, A2 a2,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6) {
|
|
return std_bndr_mf_2_3_4_5_6<Function>(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6> inline std_bndr_mf_1_3_4_5_6<Function>
|
|
std_bind_mf_1_3_4_5_6(const Function &f, A1 a1,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6) {
|
|
return std_bndr_mf_1_3_4_5_6<Function>(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A2,
|
|
class A4,
|
|
class A5,
|
|
class A6> inline std_bndr_mf_1_2_4_5_6<Function>
|
|
std_bind_mf_1_2_4_5_6(const Function &f, A1 a1,
|
|
A2 a2,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6) {
|
|
return std_bndr_mf_1_2_4_5_6<Function>(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding const pmf of arity 6 to arity 1
|
|
|
|
template<class Function, class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6> inline std_bndr_const_mf_2_3_4_5_6<Function>
|
|
std_bind_const_mf_2_3_4_5_6(const Function &f, A2 a2,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6) {
|
|
return std_bndr_const_mf_2_3_4_5_6<Function>(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6> inline std_bndr_const_mf_1_3_4_5_6<Function>
|
|
std_bind_const_mf_1_3_4_5_6(const Function &f, A1 a1,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6) {
|
|
return std_bndr_const_mf_1_3_4_5_6<Function>(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A2,
|
|
class A4,
|
|
class A5,
|
|
class A6> inline std_bndr_const_mf_1_2_4_5_6<Function>
|
|
std_bind_const_mf_1_2_4_5_6(const Function &f, A1 a1,
|
|
A2 a2,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6) {
|
|
return std_bndr_const_mf_1_2_4_5_6<Function>(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding obj&pmf Ref of arity 6 to arity 1
|
|
|
|
template<class Function, class Object,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6> inline std_bndr_obj_2_3_4_5_6<Function>
|
|
std_bind_obj_2_3_4_5_6(Object& oi, const Function &f, A2 a2,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6) {
|
|
return std_bndr_obj_2_3_4_5_6<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6));
|
|
};
|
|
|
|
template<class Function, class Object,
|
|
class A1,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6> inline std_bndr_obj_1_3_4_5_6<Function>
|
|
std_bind_obj_1_3_4_5_6(Object& oi, const Function &f, A1 a1,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6) {
|
|
return std_bndr_obj_1_3_4_5_6<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6));
|
|
};
|
|
|
|
template<class Function, class Object,
|
|
class A1,
|
|
class A2,
|
|
class A4,
|
|
class A5,
|
|
class A6> inline std_bndr_obj_1_2_4_5_6<Function>
|
|
std_bind_obj_1_2_4_5_6(Object& oi, const Function &f, A1 a1,
|
|
A2 a2,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6) {
|
|
return std_bndr_obj_1_2_4_5_6<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding const obj&pmf Ref of arity 6 to arity 1
|
|
|
|
template<class Function, const class Object,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6> inline std_bndr_const_obj_2_3_4_5_6<Function>
|
|
std_bind_const_obj_2_3_4_5_6(const Object& oi, const Function &f, A2 a2,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6) {
|
|
return std_bndr_const_obj_2_3_4_5_6<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6));
|
|
};
|
|
|
|
template<class Function, const class Object,
|
|
class A1,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6> inline std_bndr_const_obj_1_3_4_5_6<Function>
|
|
std_bind_const_obj_1_3_4_5_6(const Object& oi, const Function &f, A1 a1,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6) {
|
|
return std_bndr_const_obj_1_3_4_5_6<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6));
|
|
};
|
|
|
|
template<class Function, const class Object,
|
|
class A1,
|
|
class A2,
|
|
class A4,
|
|
class A5,
|
|
class A6> inline std_bndr_const_obj_1_2_4_5_6<Function>
|
|
std_bind_const_obj_1_2_4_5_6(const Object& oi, const Function &f, A1 a1,
|
|
A2 a2,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6) {
|
|
return std_bndr_const_obj_1_2_4_5_6<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6));
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding arity 15 to 1
|
|
|
|
|
|
// Template Classes for binding pmf of arity 15 to arity 1
|
|
|
|
template<class Function> class std_bndr_mf_2_3_4_5_6_7_8_9_10_11_12_13_14_15 :
|
|
public std_arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>,
|
|
private std_arity15_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::argument_7_type,
|
|
typename Function::argument_8_type,
|
|
typename Function::argument_9_type,
|
|
typename Function::argument_10_type,
|
|
typename Function::argument_11_type,
|
|
typename Function::argument_12_type,
|
|
typename Function::argument_13_type,
|
|
typename Function::argument_14_type,
|
|
typename Function::argument_15_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_mf_2_3_4_5_6_7_8_9_10_11_12_13_14_15(const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6, typename Function::argument_7_type a7, typename Function::argument_8_type a8, typename Function::argument_9_type a9, typename Function::argument_10_type a10, typename Function::argument_11_type a11, typename Function::argument_12_type a12, typename Function::argument_13_type a13, typename Function::argument_14_type a14, typename Function::argument_15_type a15) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), std_arity15_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::argument_7_type,
|
|
typename Function::argument_8_type,
|
|
typename Function::argument_9_type,
|
|
typename Function::argument_10_type,
|
|
typename Function::argument_11_type,
|
|
typename Function::argument_12_type,
|
|
typename Function::argument_13_type,
|
|
typename Function::argument_14_type,
|
|
typename Function::argument_15_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6), arg7val(a7), arg8val(a8), arg9val(a9), arg10val(a10), arg11val(a11), arg12val(a12), arg13val(a13), arg14val(a14), arg15val(a15) {}
|
|
inline std_bndr_mf_2_3_4_5_6_7_8_9_10_11_12_13_14_15(const std_bndr_mf_2_3_4_5_6_7_8_9_10_11_12_13_14_15& bndri) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::first_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity15_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::argument_7_type,
|
|
typename Function::argument_8_type,
|
|
typename Function::argument_9_type,
|
|
typename Function::argument_10_type,
|
|
typename Function::argument_11_type,
|
|
typename Function::argument_12_type,
|
|
typename Function::argument_13_type,
|
|
typename Function::argument_14_type,
|
|
typename Function::argument_15_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val), arg7val(bndri.arg7val), arg8val(bndri.arg8val), arg9val(bndri.arg9val), arg10val(bndri.arg10val), arg11val(bndri.arg11val), arg12val(bndri.arg12val), arg13val(bndri.arg13val), arg14val(bndri.arg14val), arg15val(bndri.arg15val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::first_argument_type a1) const {
|
|
pmf15type pmf = reinterpret_cast<pmf15type>(pmf0);
|
|
return (o.*pmf)(a1, arg2val, arg3val, arg4val, arg5val, arg6val, arg7val, arg8val, arg9val, arg10val, arg11val, arg12val, arg13val, arg14val, arg15val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
typename Function::argument_6_type arg6val;
|
|
typename Function::argument_7_type arg7val;
|
|
typename Function::argument_8_type arg8val;
|
|
typename Function::argument_9_type arg9val;
|
|
typename Function::argument_10_type arg10val;
|
|
typename Function::argument_11_type arg11val;
|
|
typename Function::argument_12_type arg12val;
|
|
typename Function::argument_13_type arg13val;
|
|
typename Function::argument_14_type arg14val;
|
|
typename Function::argument_15_type arg15val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_mf_1_3_4_5_6_7_8_9_10_11_12_13_14_15 :
|
|
public std_arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>,
|
|
private std_arity15_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::argument_7_type,
|
|
typename Function::argument_8_type,
|
|
typename Function::argument_9_type,
|
|
typename Function::argument_10_type,
|
|
typename Function::argument_11_type,
|
|
typename Function::argument_12_type,
|
|
typename Function::argument_13_type,
|
|
typename Function::argument_14_type,
|
|
typename Function::argument_15_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_mf_1_3_4_5_6_7_8_9_10_11_12_13_14_15(const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6, typename Function::argument_7_type a7, typename Function::argument_8_type a8, typename Function::argument_9_type a9, typename Function::argument_10_type a10, typename Function::argument_11_type a11, typename Function::argument_12_type a12, typename Function::argument_13_type a13, typename Function::argument_14_type a14, typename Function::argument_15_type a15) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), std_arity15_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::argument_7_type,
|
|
typename Function::argument_8_type,
|
|
typename Function::argument_9_type,
|
|
typename Function::argument_10_type,
|
|
typename Function::argument_11_type,
|
|
typename Function::argument_12_type,
|
|
typename Function::argument_13_type,
|
|
typename Function::argument_14_type,
|
|
typename Function::argument_15_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6), arg7val(a7), arg8val(a8), arg9val(a9), arg10val(a10), arg11val(a11), arg12val(a12), arg13val(a13), arg14val(a14), arg15val(a15) {}
|
|
inline std_bndr_mf_1_3_4_5_6_7_8_9_10_11_12_13_14_15(const std_bndr_mf_1_3_4_5_6_7_8_9_10_11_12_13_14_15& bndri) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::second_argument_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity15_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::argument_7_type,
|
|
typename Function::argument_8_type,
|
|
typename Function::argument_9_type,
|
|
typename Function::argument_10_type,
|
|
typename Function::argument_11_type,
|
|
typename Function::argument_12_type,
|
|
typename Function::argument_13_type,
|
|
typename Function::argument_14_type,
|
|
typename Function::argument_15_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val), arg7val(bndri.arg7val), arg8val(bndri.arg8val), arg9val(bndri.arg9val), arg10val(bndri.arg10val), arg11val(bndri.arg11val), arg12val(bndri.arg12val), arg13val(bndri.arg13val), arg14val(bndri.arg14val), arg15val(bndri.arg15val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::second_argument_type a2) const {
|
|
pmf15type pmf = reinterpret_cast<pmf15type>(pmf0);
|
|
return (o.*pmf)(arg1val, a2, arg3val, arg4val, arg5val, arg6val, arg7val, arg8val, arg9val, arg10val, arg11val, arg12val, arg13val, arg14val, arg15val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
typename Function::argument_6_type arg6val;
|
|
typename Function::argument_7_type arg7val;
|
|
typename Function::argument_8_type arg8val;
|
|
typename Function::argument_9_type arg9val;
|
|
typename Function::argument_10_type arg10val;
|
|
typename Function::argument_11_type arg11val;
|
|
typename Function::argument_12_type arg12val;
|
|
typename Function::argument_13_type arg13val;
|
|
typename Function::argument_14_type arg14val;
|
|
typename Function::argument_15_type arg15val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_mf_1_2_4_5_6_7_8_9_10_11_12_13_14_15 :
|
|
public std_arity1pmf<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>,
|
|
private std_arity15_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::argument_7_type,
|
|
typename Function::argument_8_type,
|
|
typename Function::argument_9_type,
|
|
typename Function::argument_10_type,
|
|
typename Function::argument_11_type,
|
|
typename Function::argument_12_type,
|
|
typename Function::argument_13_type,
|
|
typename Function::argument_14_type,
|
|
typename Function::argument_15_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_mf_1_2_4_5_6_7_8_9_10_11_12_13_14_15(const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6, typename Function::argument_7_type a7, typename Function::argument_8_type a8, typename Function::argument_9_type a9, typename Function::argument_10_type a10, typename Function::argument_11_type a11, typename Function::argument_12_type a12, typename Function::argument_13_type a13, typename Function::argument_14_type a14, typename Function::argument_15_type a15) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(f.pmf0)), std_arity15_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::argument_7_type,
|
|
typename Function::argument_8_type,
|
|
typename Function::argument_9_type,
|
|
typename Function::argument_10_type,
|
|
typename Function::argument_11_type,
|
|
typename Function::argument_12_type,
|
|
typename Function::argument_13_type,
|
|
typename Function::argument_14_type,
|
|
typename Function::argument_15_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5), arg6val(a6), arg7val(a7), arg8val(a8), arg9val(a9), arg10val(a10), arg11val(a11), arg12val(a12), arg13val(a13), arg14val(a14), arg15val(a15) {}
|
|
inline std_bndr_mf_1_2_4_5_6_7_8_9_10_11_12_13_14_15(const std_bndr_mf_1_2_4_5_6_7_8_9_10_11_12_13_14_15& bndri) :
|
|
std_arity1pmf<typename Function::object_type, typename Function::argument_3_type, typename Function::result_type>(reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity15_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::argument_7_type,
|
|
typename Function::argument_8_type,
|
|
typename Function::argument_9_type,
|
|
typename Function::argument_10_type,
|
|
typename Function::argument_11_type,
|
|
typename Function::argument_12_type,
|
|
typename Function::argument_13_type,
|
|
typename Function::argument_14_type,
|
|
typename Function::argument_15_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val), arg7val(bndri.arg7val), arg8val(bndri.arg8val), arg9val(bndri.arg9val), arg10val(bndri.arg10val), arg11val(bndri.arg11val), arg12val(bndri.arg12val), arg13val(bndri.arg13val), arg14val(bndri.arg14val), arg15val(bndri.arg15val) {}
|
|
inline virtual typename Function::result_type operator()(typename Function::object_type& o, typename Function::argument_3_type a3) const {
|
|
pmf15type pmf = reinterpret_cast<pmf15type>(pmf0);
|
|
return (o.*pmf)(arg1val, arg2val, a3, arg4val, arg5val, arg6val, arg7val, arg8val, arg9val, arg10val, arg11val, arg12val, arg13val, arg14val, arg15val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
typename Function::argument_6_type arg6val;
|
|
typename Function::argument_7_type arg7val;
|
|
typename Function::argument_8_type arg8val;
|
|
typename Function::argument_9_type arg9val;
|
|
typename Function::argument_10_type arg10val;
|
|
typename Function::argument_11_type arg11val;
|
|
typename Function::argument_12_type arg12val;
|
|
typename Function::argument_13_type arg13val;
|
|
typename Function::argument_14_type arg14val;
|
|
typename Function::argument_15_type arg15val;
|
|
};
|
|
|
|
|
|
|
|
// Template Classes for binding obj&pmf Ref of arity 15 to arity 1
|
|
|
|
template<class Function> class std_bndr_obj_2_3_4_5_6_7_8_9_10_11_12_13_14_15 :
|
|
public std_arity1opmf<Function>,
|
|
private std_arity15_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::argument_7_type,
|
|
typename Function::argument_8_type,
|
|
typename Function::argument_9_type,
|
|
typename Function::argument_10_type,
|
|
typename Function::argument_11_type,
|
|
typename Function::argument_12_type,
|
|
typename Function::argument_13_type,
|
|
typename Function::argument_14_type,
|
|
typename Function::argument_15_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_obj_2_3_4_5_6_7_8_9_10_11_12_13_14_15(typename Function::object_type& oi, const Function &f, typename Function::second_argument_type a2, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6, typename Function::argument_7_type a7, typename Function::argument_8_type a8, typename Function::argument_9_type a9, typename Function::argument_10_type a10, typename Function::argument_11_type a11, typename Function::argument_12_type a12, typename Function::argument_13_type a13, typename Function::argument_14_type a14, typename Function::argument_15_type a15) :
|
|
std_arity1opmf<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), std_arity15_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::argument_7_type,
|
|
typename Function::argument_8_type,
|
|
typename Function::argument_9_type,
|
|
typename Function::argument_10_type,
|
|
typename Function::argument_11_type,
|
|
typename Function::argument_12_type,
|
|
typename Function::argument_13_type,
|
|
typename Function::argument_14_type,
|
|
typename Function::argument_15_type, typename Function::result_type>(f), arg2val(a2), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6), arg7val(a7), arg8val(a8), arg9val(a9), arg10val(a10), arg11val(a11), arg12val(a12), arg13val(a13), arg14val(a14), arg15val(a15) {}
|
|
inline std_bndr_obj_2_3_4_5_6_7_8_9_10_11_12_13_14_15(const std_bndr_obj_2_3_4_5_6_7_8_9_10_11_12_13_14_15& bndri) :
|
|
std_arity1opmf<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity15_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::argument_7_type,
|
|
typename Function::argument_8_type,
|
|
typename Function::argument_9_type,
|
|
typename Function::argument_10_type,
|
|
typename Function::argument_11_type,
|
|
typename Function::argument_12_type,
|
|
typename Function::argument_13_type,
|
|
typename Function::argument_14_type,
|
|
typename Function::argument_15_type, typename Function::result_type>(bndri), arg2val(bndri.arg2val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val), arg7val(bndri.arg7val), arg8val(bndri.arg8val), arg9val(bndri.arg9val), arg10val(bndri.arg10val), arg11val(bndri.arg11val), arg12val(bndri.arg12val), arg13val(bndri.arg13val), arg14val(bndri.arg14val), arg15val(bndri.arg15val) {}
|
|
inline typename Function::result_type operator()(typename Function::first_argument_type a1) const {
|
|
pmf15type pmf = reinterpret_cast<pmf15type>(pmf0);
|
|
return (objval.*pmf)(a1, arg2val, arg3val, arg4val, arg5val, arg6val, arg7val, arg8val, arg9val, arg10val, arg11val, arg12val, arg13val, arg14val, arg15val);
|
|
}
|
|
public:
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
typename Function::argument_6_type arg6val;
|
|
typename Function::argument_7_type arg7val;
|
|
typename Function::argument_8_type arg8val;
|
|
typename Function::argument_9_type arg9val;
|
|
typename Function::argument_10_type arg10val;
|
|
typename Function::argument_11_type arg11val;
|
|
typename Function::argument_12_type arg12val;
|
|
typename Function::argument_13_type arg13val;
|
|
typename Function::argument_14_type arg14val;
|
|
typename Function::argument_15_type arg15val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_obj_1_3_4_5_6_7_8_9_10_11_12_13_14_15 :
|
|
public std_arity1opmf<Function>,
|
|
private std_arity15_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::argument_7_type,
|
|
typename Function::argument_8_type,
|
|
typename Function::argument_9_type,
|
|
typename Function::argument_10_type,
|
|
typename Function::argument_11_type,
|
|
typename Function::argument_12_type,
|
|
typename Function::argument_13_type,
|
|
typename Function::argument_14_type,
|
|
typename Function::argument_15_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_obj_1_3_4_5_6_7_8_9_10_11_12_13_14_15(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::argument_3_type a3, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6, typename Function::argument_7_type a7, typename Function::argument_8_type a8, typename Function::argument_9_type a9, typename Function::argument_10_type a10, typename Function::argument_11_type a11, typename Function::argument_12_type a12, typename Function::argument_13_type a13, typename Function::argument_14_type a14, typename Function::argument_15_type a15) :
|
|
std_arity1opmf<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), std_arity15_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::argument_7_type,
|
|
typename Function::argument_8_type,
|
|
typename Function::argument_9_type,
|
|
typename Function::argument_10_type,
|
|
typename Function::argument_11_type,
|
|
typename Function::argument_12_type,
|
|
typename Function::argument_13_type,
|
|
typename Function::argument_14_type,
|
|
typename Function::argument_15_type, typename Function::result_type>(f), arg1val(a1), arg3val(a3), arg4val(a4), arg5val(a5), arg6val(a6), arg7val(a7), arg8val(a8), arg9val(a9), arg10val(a10), arg11val(a11), arg12val(a12), arg13val(a13), arg14val(a14), arg15val(a15) {}
|
|
inline std_bndr_obj_1_3_4_5_6_7_8_9_10_11_12_13_14_15(const std_bndr_obj_1_3_4_5_6_7_8_9_10_11_12_13_14_15& bndri) :
|
|
std_arity1opmf<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity15_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::argument_7_type,
|
|
typename Function::argument_8_type,
|
|
typename Function::argument_9_type,
|
|
typename Function::argument_10_type,
|
|
typename Function::argument_11_type,
|
|
typename Function::argument_12_type,
|
|
typename Function::argument_13_type,
|
|
typename Function::argument_14_type,
|
|
typename Function::argument_15_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg3val(bndri.arg3val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val), arg7val(bndri.arg7val), arg8val(bndri.arg8val), arg9val(bndri.arg9val), arg10val(bndri.arg10val), arg11val(bndri.arg11val), arg12val(bndri.arg12val), arg13val(bndri.arg13val), arg14val(bndri.arg14val), arg15val(bndri.arg15val) {}
|
|
inline typename Function::result_type operator()(typename Function::second_argument_type a2) const {
|
|
pmf15type pmf = reinterpret_cast<pmf15type>(pmf0);
|
|
return (objval.*pmf)(arg1val, a2, arg3val, arg4val, arg5val, arg6val, arg7val, arg8val, arg9val, arg10val, arg11val, arg12val, arg13val, arg14val, arg15val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::argument_3_type arg3val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
typename Function::argument_6_type arg6val;
|
|
typename Function::argument_7_type arg7val;
|
|
typename Function::argument_8_type arg8val;
|
|
typename Function::argument_9_type arg9val;
|
|
typename Function::argument_10_type arg10val;
|
|
typename Function::argument_11_type arg11val;
|
|
typename Function::argument_12_type arg12val;
|
|
typename Function::argument_13_type arg13val;
|
|
typename Function::argument_14_type arg14val;
|
|
typename Function::argument_15_type arg15val;
|
|
};
|
|
|
|
template<class Function> class std_bndr_obj_1_2_4_5_6_7_8_9_10_11_12_13_14_15 :
|
|
public std_arity1opmf<Function>,
|
|
private std_arity15_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::argument_7_type,
|
|
typename Function::argument_8_type,
|
|
typename Function::argument_9_type,
|
|
typename Function::argument_10_type,
|
|
typename Function::argument_11_type,
|
|
typename Function::argument_12_type,
|
|
typename Function::argument_13_type,
|
|
typename Function::argument_14_type,
|
|
typename Function::argument_15_type, typename Function::result_type> {
|
|
public:
|
|
explicit inline std_bndr_obj_1_2_4_5_6_7_8_9_10_11_12_13_14_15(typename Function::object_type& oi, const Function &f, typename Function::first_argument_type a1, typename Function::second_argument_type a2, typename Function::argument_4_type a4, typename Function::argument_5_type a5, typename Function::argument_6_type a6, typename Function::argument_7_type a7, typename Function::argument_8_type a8, typename Function::argument_9_type a9, typename Function::argument_10_type a10, typename Function::argument_11_type a11, typename Function::argument_12_type a12, typename Function::argument_13_type a13, typename Function::argument_14_type a14, typename Function::argument_15_type a15) :
|
|
std_arity1opmf<Function>(oi, reinterpret_cast<pmf1type>(f.pmf0)), std_arity15_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::argument_7_type,
|
|
typename Function::argument_8_type,
|
|
typename Function::argument_9_type,
|
|
typename Function::argument_10_type,
|
|
typename Function::argument_11_type,
|
|
typename Function::argument_12_type,
|
|
typename Function::argument_13_type,
|
|
typename Function::argument_14_type,
|
|
typename Function::argument_15_type, typename Function::result_type>(f), arg1val(a1), arg2val(a2), arg4val(a4), arg5val(a5), arg6val(a6), arg7val(a7), arg8val(a8), arg9val(a9), arg10val(a10), arg11val(a11), arg12val(a12), arg13val(a13), arg14val(a14), arg15val(a15) {}
|
|
inline std_bndr_obj_1_2_4_5_6_7_8_9_10_11_12_13_14_15(const std_bndr_obj_1_2_4_5_6_7_8_9_10_11_12_13_14_15& bndri) :
|
|
std_arity1opmf<Function>(bndri.objval, reinterpret_cast<pmf1type>(bndri.pmf0)), std_arity15_mf<typename Function::object_type, typename Function::first_argument_type,
|
|
typename Function::second_argument_type,
|
|
typename Function::argument_3_type,
|
|
typename Function::argument_4_type,
|
|
typename Function::argument_5_type,
|
|
typename Function::argument_6_type,
|
|
typename Function::argument_7_type,
|
|
typename Function::argument_8_type,
|
|
typename Function::argument_9_type,
|
|
typename Function::argument_10_type,
|
|
typename Function::argument_11_type,
|
|
typename Function::argument_12_type,
|
|
typename Function::argument_13_type,
|
|
typename Function::argument_14_type,
|
|
typename Function::argument_15_type, typename Function::result_type>(bndri), arg1val(bndri.arg1val), arg2val(bndri.arg2val), arg4val(bndri.arg4val), arg5val(bndri.arg5val), arg6val(bndri.arg6val), arg7val(bndri.arg7val), arg8val(bndri.arg8val), arg9val(bndri.arg9val), arg10val(bndri.arg10val), arg11val(bndri.arg11val), arg12val(bndri.arg12val), arg13val(bndri.arg13val), arg14val(bndri.arg14val), arg15val(bndri.arg15val) {}
|
|
inline typename Function::result_type operator()(typename Function::argument_3_type a3) const {
|
|
pmf15type pmf = reinterpret_cast<pmf15type>(pmf0);
|
|
return (objval.*pmf)(arg1val, arg2val, a3, arg4val, arg5val, arg6val, arg7val, arg8val, arg9val, arg10val, arg11val, arg12val, arg13val, arg14val, arg15val);
|
|
}
|
|
public:
|
|
typename Function::first_argument_type arg1val;
|
|
typename Function::second_argument_type arg2val;
|
|
typename Function::argument_4_type arg4val;
|
|
typename Function::argument_5_type arg5val;
|
|
typename Function::argument_6_type arg6val;
|
|
typename Function::argument_7_type arg7val;
|
|
typename Function::argument_8_type arg8val;
|
|
typename Function::argument_9_type arg9val;
|
|
typename Function::argument_10_type arg10val;
|
|
typename Function::argument_11_type arg11val;
|
|
typename Function::argument_12_type arg12val;
|
|
typename Function::argument_13_type arg13val;
|
|
typename Function::argument_14_type arg14val;
|
|
typename Function::argument_15_type arg15val;
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding arity 15 to 1
|
|
|
|
|
|
// Template Functions for binding pmf of arity 15 to arity 1
|
|
|
|
template<class Function, class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class A12,
|
|
class A13,
|
|
class A14,
|
|
class A15> inline std_bndr_mf_2_3_4_5_6_7_8_9_10_11_12_13_14_15<Function>
|
|
std_bind_mf_2_3_4_5_6_7_8_9_10_11_12_13_14_15(const Function &f, A2 a2,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6,
|
|
A7 a7,
|
|
A8 a8,
|
|
A9 a9,
|
|
A10 a10,
|
|
A11 a11,
|
|
A12 a12,
|
|
A13 a13,
|
|
A14 a14,
|
|
A15 a15) {
|
|
return std_bndr_mf_2_3_4_5_6_7_8_9_10_11_12_13_14_15<Function>(f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6), typename Function::argument_7_type(a7), typename Function::argument_8_type(a8), typename Function::argument_9_type(a9), typename Function::argument_10_type(a10), typename Function::argument_11_type(a11), typename Function::argument_12_type(a12), typename Function::argument_13_type(a13), typename Function::argument_14_type(a14), typename Function::argument_15_type(a15));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class A12,
|
|
class A13,
|
|
class A14,
|
|
class A15> inline std_bndr_mf_1_3_4_5_6_7_8_9_10_11_12_13_14_15<Function>
|
|
std_bind_mf_1_3_4_5_6_7_8_9_10_11_12_13_14_15(const Function &f, A1 a1,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6,
|
|
A7 a7,
|
|
A8 a8,
|
|
A9 a9,
|
|
A10 a10,
|
|
A11 a11,
|
|
A12 a12,
|
|
A13 a13,
|
|
A14 a14,
|
|
A15 a15) {
|
|
return std_bndr_mf_1_3_4_5_6_7_8_9_10_11_12_13_14_15<Function>(f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6), typename Function::argument_7_type(a7), typename Function::argument_8_type(a8), typename Function::argument_9_type(a9), typename Function::argument_10_type(a10), typename Function::argument_11_type(a11), typename Function::argument_12_type(a12), typename Function::argument_13_type(a13), typename Function::argument_14_type(a14), typename Function::argument_15_type(a15));
|
|
};
|
|
|
|
template<class Function, class A1,
|
|
class A2,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class A12,
|
|
class A13,
|
|
class A14,
|
|
class A15> inline std_bndr_mf_1_2_4_5_6_7_8_9_10_11_12_13_14_15<Function>
|
|
std_bind_mf_1_2_4_5_6_7_8_9_10_11_12_13_14_15(const Function &f, A1 a1,
|
|
A2 a2,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6,
|
|
A7 a7,
|
|
A8 a8,
|
|
A9 a9,
|
|
A10 a10,
|
|
A11 a11,
|
|
A12 a12,
|
|
A13 a13,
|
|
A14 a14,
|
|
A15 a15) {
|
|
return std_bndr_mf_1_2_4_5_6_7_8_9_10_11_12_13_14_15<Function>(f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6), typename Function::argument_7_type(a7), typename Function::argument_8_type(a8), typename Function::argument_9_type(a9), typename Function::argument_10_type(a10), typename Function::argument_11_type(a11), typename Function::argument_12_type(a12), typename Function::argument_13_type(a13), typename Function::argument_14_type(a14), typename Function::argument_15_type(a15));
|
|
};
|
|
|
|
|
|
|
|
// Template Functions for binding obj&pmf Ref of arity 15 to arity 1
|
|
|
|
template<class Function, class Object,
|
|
class A2,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class A12,
|
|
class A13,
|
|
class A14,
|
|
class A15> inline std_bndr_obj_2_3_4_5_6_7_8_9_10_11_12_13_14_15<Function>
|
|
std_bind_obj_2_3_4_5_6_7_8_9_10_11_12_13_14_15(Object& oi, const Function &f, A2 a2,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6,
|
|
A7 a7,
|
|
A8 a8,
|
|
A9 a9,
|
|
A10 a10,
|
|
A11 a11,
|
|
A12 a12,
|
|
A13 a13,
|
|
A14 a14,
|
|
A15 a15) {
|
|
return std_bndr_obj_2_3_4_5_6_7_8_9_10_11_12_13_14_15<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::second_argument_type(a2), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6), typename Function::argument_7_type(a7), typename Function::argument_8_type(a8), typename Function::argument_9_type(a9), typename Function::argument_10_type(a10), typename Function::argument_11_type(a11), typename Function::argument_12_type(a12), typename Function::argument_13_type(a13), typename Function::argument_14_type(a14), typename Function::argument_15_type(a15));
|
|
};
|
|
|
|
template<class Function, class Object,
|
|
class A1,
|
|
class A3,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class A12,
|
|
class A13,
|
|
class A14,
|
|
class A15> inline std_bndr_obj_1_3_4_5_6_7_8_9_10_11_12_13_14_15<Function>
|
|
std_bind_obj_1_3_4_5_6_7_8_9_10_11_12_13_14_15(Object& oi, const Function &f, A1 a1,
|
|
A3 a3,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6,
|
|
A7 a7,
|
|
A8 a8,
|
|
A9 a9,
|
|
A10 a10,
|
|
A11 a11,
|
|
A12 a12,
|
|
A13 a13,
|
|
A14 a14,
|
|
A15 a15) {
|
|
return std_bndr_obj_1_3_4_5_6_7_8_9_10_11_12_13_14_15<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::argument_3_type(a3), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6), typename Function::argument_7_type(a7), typename Function::argument_8_type(a8), typename Function::argument_9_type(a9), typename Function::argument_10_type(a10), typename Function::argument_11_type(a11), typename Function::argument_12_type(a12), typename Function::argument_13_type(a13), typename Function::argument_14_type(a14), typename Function::argument_15_type(a15));
|
|
};
|
|
|
|
template<class Function, class Object,
|
|
class A1,
|
|
class A2,
|
|
class A4,
|
|
class A5,
|
|
class A6,
|
|
class A7,
|
|
class A8,
|
|
class A9,
|
|
class A10,
|
|
class A11,
|
|
class A12,
|
|
class A13,
|
|
class A14,
|
|
class A15> inline std_bndr_obj_1_2_4_5_6_7_8_9_10_11_12_13_14_15<Function>
|
|
std_bind_obj_1_2_4_5_6_7_8_9_10_11_12_13_14_15(Object& oi, const Function &f, A1 a1,
|
|
A2 a2,
|
|
A4 a4,
|
|
A5 a5,
|
|
A6 a6,
|
|
A7 a7,
|
|
A8 a8,
|
|
A9 a9,
|
|
A10 a10,
|
|
A11 a11,
|
|
A12 a12,
|
|
A13 a13,
|
|
A14 a14,
|
|
A15 a15) {
|
|
return std_bndr_obj_1_2_4_5_6_7_8_9_10_11_12_13_14_15<Function>(static_cast<typename Function::object_type&>(oi), f, typename Function::first_argument_type(a1), typename Function::second_argument_type(a2), typename Function::argument_4_type(a4), typename Function::argument_5_type(a5), typename Function::argument_6_type(a6), typename Function::argument_7_type(a7), typename Function::argument_8_type(a8), typename Function::argument_9_type(a9), typename Function::argument_10_type(a10), typename Function::argument_11_type(a11), typename Function::argument_12_type(a12), typename Function::argument_13_type(a13), typename Function::argument_14_type(a14), typename Function::argument_15_type(a15));
|
|
};
|