// (C) Copyright David Abrahams 2000. Permission to copy, use, modify, sell and // distribute this software is granted provided this copyright notice appears // in all copies. This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // // The author gratefully acknowleges the support of Dragon Systems, Inc., in // producing this work. // // This file generated for 5-argument member functions and 6-argument free // functions by gen_caller.python #ifndef CALLER_DWA05090_H_ # define CALLER_DWA05090_H_ # include "pyconfig.h" # include "wrap_python.h" # include # include "signatures.h" # include "none.h" # include "objects.h" namespace python { // Calling C++ from Python template struct caller { template static PyObject* call(R (T::*pmf)(), PyObject* args, PyObject* /* keywords */ ) { PyObject* self; if (!PyArg_ParseTuple(args, const_cast("O"), &self)) return 0; T& target = from_python(self, type()); return to_python((target.*pmf)()); } template static PyObject* call(R (T::*pmf)(A1), PyObject* args, PyObject* /* keywords */ ) { PyObject* self; PyObject* a1; if (!PyArg_ParseTuple(args, const_cast("OO"), &self, &a1)) return 0; T& target = from_python(self, type()); return to_python((target.*pmf)(from_python(a1, type()))); } template static PyObject* call(R (T::*pmf)(A1, A2), PyObject* args, PyObject* /* keywords */ ) { PyObject* self; PyObject* a1; PyObject* a2; if (!PyArg_ParseTuple(args, const_cast("OOO"), &self, &a1, &a2)) return 0; T& target = from_python(self, type()); return to_python((target.*pmf)(from_python(a1, type()), from_python(a2, type()))); } template static PyObject* call(R (T::*pmf)(A1, A2, A3), PyObject* args, PyObject* /* keywords */ ) { PyObject* self; PyObject* a1; PyObject* a2; PyObject* a3; if (!PyArg_ParseTuple(args, const_cast("OOOO"), &self, &a1, &a2, &a3)) return 0; T& target = from_python(self, type()); return to_python((target.*pmf)(from_python(a1, type()), from_python(a2, type()), from_python(a3, type()))); } template static PyObject* call(R (T::*pmf)(A1, A2, A3, A4), PyObject* args, PyObject* /* keywords */ ) { PyObject* self; PyObject* a1; PyObject* a2; PyObject* a3; PyObject* a4; if (!PyArg_ParseTuple(args, const_cast("OOOOO"), &self, &a1, &a2, &a3, &a4)) return 0; T& target = from_python(self, type()); return to_python((target.*pmf)(from_python(a1, type()), from_python(a2, type()), from_python(a3, type()), from_python(a4, type()))); } template static PyObject* call(R (T::*pmf)(A1, A2, A3, A4, A5), PyObject* args, PyObject* /* keywords */ ) { PyObject* self; PyObject* a1; PyObject* a2; PyObject* a3; PyObject* a4; PyObject* a5; if (!PyArg_ParseTuple(args, const_cast("OOOOOO"), &self, &a1, &a2, &a3, &a4, &a5)) return 0; T& target = from_python(self, type()); return to_python((target.*pmf)(from_python(a1, type()), from_python(a2, type()), from_python(a3, type()), from_python(a4, type()), from_python(a5, type()))); } template static PyObject* call(R (T::*pmf)() const, PyObject* args, PyObject* /* keywords */ ) { PyObject* self; if (!PyArg_ParseTuple(args, const_cast("O"), &self)) return 0; T& target = from_python(self, type()); return to_python((target.*pmf)()); } template static PyObject* call(R (T::*pmf)(A1) const, PyObject* args, PyObject* /* keywords */ ) { PyObject* self; PyObject* a1; if (!PyArg_ParseTuple(args, const_cast("OO"), &self, &a1)) return 0; T& target = from_python(self, type()); return to_python((target.*pmf)(from_python(a1, type()))); } template static PyObject* call(R (T::*pmf)(A1, A2) const, PyObject* args, PyObject* /* keywords */ ) { PyObject* self; PyObject* a1; PyObject* a2; if (!PyArg_ParseTuple(args, const_cast("OOO"), &self, &a1, &a2)) return 0; T& target = from_python(self, type()); return to_python((target.*pmf)(from_python(a1, type()), from_python(a2, type()))); } template static PyObject* call(R (T::*pmf)(A1, A2, A3) const, PyObject* args, PyObject* /* keywords */ ) { PyObject* self; PyObject* a1; PyObject* a2; PyObject* a3; if (!PyArg_ParseTuple(args, const_cast("OOOO"), &self, &a1, &a2, &a3)) return 0; T& target = from_python(self, type()); return to_python((target.*pmf)(from_python(a1, type()), from_python(a2, type()), from_python(a3, type()))); } template static PyObject* call(R (T::*pmf)(A1, A2, A3, A4) const, PyObject* args, PyObject* /* keywords */ ) { PyObject* self; PyObject* a1; PyObject* a2; PyObject* a3; PyObject* a4; if (!PyArg_ParseTuple(args, const_cast("OOOOO"), &self, &a1, &a2, &a3, &a4)) return 0; T& target = from_python(self, type()); return to_python((target.*pmf)(from_python(a1, type()), from_python(a2, type()), from_python(a3, type()), from_python(a4, type()))); } template static PyObject* call(R (T::*pmf)(A1, A2, A3, A4, A5) const, PyObject* args, PyObject* /* keywords */ ) { PyObject* self; PyObject* a1; PyObject* a2; PyObject* a3; PyObject* a4; PyObject* a5; if (!PyArg_ParseTuple(args, const_cast("OOOOOO"), &self, &a1, &a2, &a3, &a4, &a5)) return 0; T& target = from_python(self, type()); return to_python((target.*pmf)(from_python(a1, type()), from_python(a2, type()), from_python(a3, type()), from_python(a4, type()), from_python(a5, type()))); } // Free functions static PyObject* call(R (*f)(), PyObject* args, PyObject* /* keywords */ ) { if (!PyArg_ParseTuple(args, const_cast(""))) return 0; return to_python(f()); } template static PyObject* call(R (*f)(A1), PyObject* args, PyObject* /* keywords */ ) { PyObject* a1; if (!PyArg_ParseTuple(args, const_cast("O"), &a1)) return 0; return to_python(f(from_python(a1, type()))); } template static PyObject* call(R (*f)(A1, A2), PyObject* args, PyObject* /* keywords */ ) { PyObject* a1; PyObject* a2; if (!PyArg_ParseTuple(args, const_cast("OO"), &a1, &a2)) return 0; return to_python(f(from_python(a1, type()), from_python(a2, type()))); } template static PyObject* call(R (*f)(A1, A2, A3), PyObject* args, PyObject* /* keywords */ ) { PyObject* a1; PyObject* a2; PyObject* a3; if (!PyArg_ParseTuple(args, const_cast("OOO"), &a1, &a2, &a3)) return 0; return to_python(f(from_python(a1, type()), from_python(a2, type()), from_python(a3, type()))); } template static PyObject* call(R (*f)(A1, A2, A3, A4), PyObject* args, PyObject* /* keywords */ ) { PyObject* a1; PyObject* a2; PyObject* a3; PyObject* a4; if (!PyArg_ParseTuple(args, const_cast("OOOO"), &a1, &a2, &a3, &a4)) return 0; return to_python(f(from_python(a1, type()), from_python(a2, type()), from_python(a3, type()), from_python(a4, type()))); } template static PyObject* call(R (*f)(A1, A2, A3, A4, A5), PyObject* args, PyObject* /* keywords */ ) { PyObject* a1; PyObject* a2; PyObject* a3; PyObject* a4; PyObject* a5; if (!PyArg_ParseTuple(args, const_cast("OOOOO"), &a1, &a2, &a3, &a4, &a5)) return 0; return to_python(f(from_python(a1, type()), from_python(a2, type()), from_python(a3, type()), from_python(a4, type()), from_python(a5, type()))); } template static PyObject* call(R (*f)(A1, A2, A3, A4, A5, A6), PyObject* args, PyObject* /* keywords */ ) { PyObject* a1; PyObject* a2; PyObject* a3; PyObject* a4; PyObject* a5; PyObject* a6; if (!PyArg_ParseTuple(args, const_cast("OOOOOO"), &a1, &a2, &a3, &a4, &a5, &a6)) return 0; return to_python(f(from_python(a1, type()), from_python(a2, type()), from_python(a3, type()), from_python(a4, type()), from_python(a5, type()), from_python(a6, type()))); } }; template <> struct caller { template static PyObject* call(void (T::*pmf)(), PyObject* args, PyObject* /* keywords */ ) { PyObject* self; if (!PyArg_ParseTuple(args, const_cast("O"), &self)) return 0; T& target = from_python(self, type()); (target.*pmf)(); return detail::none(); } template static PyObject* call(void (T::*pmf)(A1), PyObject* args, PyObject* /* keywords */ ) { PyObject* self; PyObject* a1; if (!PyArg_ParseTuple(args, const_cast("OO"), &self, &a1)) return 0; T& target = from_python(self, type()); (target.*pmf)(from_python(a1, type())); return detail::none(); } template static PyObject* call(void (T::*pmf)(A1, A2), PyObject* args, PyObject* /* keywords */ ) { PyObject* self; PyObject* a1; PyObject* a2; if (!PyArg_ParseTuple(args, const_cast("OOO"), &self, &a1, &a2)) return 0; T& target = from_python(self, type()); (target.*pmf)(from_python(a1, type()), from_python(a2, type())); return detail::none(); } template static PyObject* call(void (T::*pmf)(A1, A2, A3), PyObject* args, PyObject* /* keywords */ ) { PyObject* self; PyObject* a1; PyObject* a2; PyObject* a3; if (!PyArg_ParseTuple(args, const_cast("OOOO"), &self, &a1, &a2, &a3)) return 0; T& target = from_python(self, type()); (target.*pmf)(from_python(a1, type()), from_python(a2, type()), from_python(a3, type())); return detail::none(); } template static PyObject* call(void (T::*pmf)(A1, A2, A3, A4), PyObject* args, PyObject* /* keywords */ ) { PyObject* self; PyObject* a1; PyObject* a2; PyObject* a3; PyObject* a4; if (!PyArg_ParseTuple(args, const_cast("OOOOO"), &self, &a1, &a2, &a3, &a4)) return 0; T& target = from_python(self, type()); (target.*pmf)(from_python(a1, type()), from_python(a2, type()), from_python(a3, type()), from_python(a4, type())); return detail::none(); } template static PyObject* call(void (T::*pmf)(A1, A2, A3, A4, A5), PyObject* args, PyObject* /* keywords */ ) { PyObject* self; PyObject* a1; PyObject* a2; PyObject* a3; PyObject* a4; PyObject* a5; if (!PyArg_ParseTuple(args, const_cast("OOOOOO"), &self, &a1, &a2, &a3, &a4, &a5)) return 0; T& target = from_python(self, type()); (target.*pmf)(from_python(a1, type()), from_python(a2, type()), from_python(a3, type()), from_python(a4, type()), from_python(a5, type())); return detail::none(); } template static PyObject* call(void (T::*pmf)() const, PyObject* args, PyObject* /* keywords */ ) { PyObject* self; if (!PyArg_ParseTuple(args, const_cast("O"), &self)) return 0; T& target = from_python(self, type()); (target.*pmf)(); return detail::none(); } template static PyObject* call(void (T::*pmf)(A1) const, PyObject* args, PyObject* /* keywords */ ) { PyObject* self; PyObject* a1; if (!PyArg_ParseTuple(args, const_cast("OO"), &self, &a1)) return 0; T& target = from_python(self, type()); (target.*pmf)(from_python(a1, type())); return detail::none(); } template static PyObject* call(void (T::*pmf)(A1, A2) const, PyObject* args, PyObject* /* keywords */ ) { PyObject* self; PyObject* a1; PyObject* a2; if (!PyArg_ParseTuple(args, const_cast("OOO"), &self, &a1, &a2)) return 0; T& target = from_python(self, type()); (target.*pmf)(from_python(a1, type()), from_python(a2, type())); return detail::none(); } template static PyObject* call(void (T::*pmf)(A1, A2, A3) const, PyObject* args, PyObject* /* keywords */ ) { PyObject* self; PyObject* a1; PyObject* a2; PyObject* a3; if (!PyArg_ParseTuple(args, const_cast("OOOO"), &self, &a1, &a2, &a3)) return 0; T& target = from_python(self, type()); (target.*pmf)(from_python(a1, type()), from_python(a2, type()), from_python(a3, type())); return detail::none(); } template static PyObject* call(void (T::*pmf)(A1, A2, A3, A4) const, PyObject* args, PyObject* /* keywords */ ) { PyObject* self; PyObject* a1; PyObject* a2; PyObject* a3; PyObject* a4; if (!PyArg_ParseTuple(args, const_cast("OOOOO"), &self, &a1, &a2, &a3, &a4)) return 0; T& target = from_python(self, type()); (target.*pmf)(from_python(a1, type()), from_python(a2, type()), from_python(a3, type()), from_python(a4, type())); return detail::none(); } template static PyObject* call(void (T::*pmf)(A1, A2, A3, A4, A5) const, PyObject* args, PyObject* /* keywords */ ) { PyObject* self; PyObject* a1; PyObject* a2; PyObject* a3; PyObject* a4; PyObject* a5; if (!PyArg_ParseTuple(args, const_cast("OOOOOO"), &self, &a1, &a2, &a3, &a4, &a5)) return 0; T& target = from_python(self, type()); (target.*pmf)(from_python(a1, type()), from_python(a2, type()), from_python(a3, type()), from_python(a4, type()), from_python(a5, type())); return detail::none(); } // Free functions static PyObject* call(void (*f)(), PyObject* args, PyObject* /* keywords */ ) { if (!PyArg_ParseTuple(args, const_cast(""))) return 0; f(); return detail::none(); } template static PyObject* call(void (*f)(A1), PyObject* args, PyObject* /* keywords */ ) { PyObject* a1; if (!PyArg_ParseTuple(args, const_cast("O"), &a1)) return 0; f(from_python(a1, type())); return detail::none(); } template static PyObject* call(void (*f)(A1, A2), PyObject* args, PyObject* /* keywords */ ) { PyObject* a1; PyObject* a2; if (!PyArg_ParseTuple(args, const_cast("OO"), &a1, &a2)) return 0; f(from_python(a1, type()), from_python(a2, type())); return detail::none(); } template static PyObject* call(void (*f)(A1, A2, A3), PyObject* args, PyObject* /* keywords */ ) { PyObject* a1; PyObject* a2; PyObject* a3; if (!PyArg_ParseTuple(args, const_cast("OOO"), &a1, &a2, &a3)) return 0; f(from_python(a1, type()), from_python(a2, type()), from_python(a3, type())); return detail::none(); } template static PyObject* call(void (*f)(A1, A2, A3, A4), PyObject* args, PyObject* /* keywords */ ) { PyObject* a1; PyObject* a2; PyObject* a3; PyObject* a4; if (!PyArg_ParseTuple(args, const_cast("OOOO"), &a1, &a2, &a3, &a4)) return 0; f(from_python(a1, type()), from_python(a2, type()), from_python(a3, type()), from_python(a4, type())); return detail::none(); } template static PyObject* call(void (*f)(A1, A2, A3, A4, A5), PyObject* args, PyObject* /* keywords */ ) { PyObject* a1; PyObject* a2; PyObject* a3; PyObject* a4; PyObject* a5; if (!PyArg_ParseTuple(args, const_cast("OOOOO"), &a1, &a2, &a3, &a4, &a5)) return 0; f(from_python(a1, type()), from_python(a2, type()), from_python(a3, type()), from_python(a4, type()), from_python(a5, type())); return detail::none(); } template static PyObject* call(void (*f)(A1, A2, A3, A4, A5, A6), PyObject* args, PyObject* /* keywords */ ) { PyObject* a1; PyObject* a2; PyObject* a3; PyObject* a4; PyObject* a5; PyObject* a6; if (!PyArg_ParseTuple(args, const_cast("OOOOOO"), &a1, &a2, &a3, &a4, &a5, &a6)) return 0; f(from_python(a1, type()), from_python(a2, type()), from_python(a3, type()), from_python(a4, type()), from_python(a5, type()), from_python(a6, type())); return detail::none(); } }; namespace detail { // create signature tuples inline PyObject* function_signature() { tuple result(0); return result.reference().release(); } template PyObject* function_signature(type) { static const bool is_plain_A1 = BOOST_PYTHON_IS_PLAIN(A1); tuple result(1); result.set_item(0, python_type_name_selector::get(type())); return result.reference().release(); } template PyObject* function_signature(type, type) { static const bool is_plain_A1 = BOOST_PYTHON_IS_PLAIN(A1); static const bool is_plain_A2 = BOOST_PYTHON_IS_PLAIN(A2); tuple result(2); result.set_item(0, python_type_name_selector::get(type())); result.set_item(1, python_type_name_selector::get(type())); return result.reference().release(); } template PyObject* function_signature(type, type, type) { static const bool is_plain_A1 = BOOST_PYTHON_IS_PLAIN(A1); static const bool is_plain_A2 = BOOST_PYTHON_IS_PLAIN(A2); static const bool is_plain_A3 = BOOST_PYTHON_IS_PLAIN(A3); tuple result(3); result.set_item(0, python_type_name_selector::get(type())); result.set_item(1, python_type_name_selector::get(type())); result.set_item(2, python_type_name_selector::get(type())); return result.reference().release(); } template PyObject* function_signature(type, type, type, type) { static const bool is_plain_A1 = BOOST_PYTHON_IS_PLAIN(A1); static const bool is_plain_A2 = BOOST_PYTHON_IS_PLAIN(A2); static const bool is_plain_A3 = BOOST_PYTHON_IS_PLAIN(A3); static const bool is_plain_A4 = BOOST_PYTHON_IS_PLAIN(A4); tuple result(4); result.set_item(0, python_type_name_selector::get(type())); result.set_item(1, python_type_name_selector::get(type())); result.set_item(2, python_type_name_selector::get(type())); result.set_item(3, python_type_name_selector::get(type())); return result.reference().release(); } template PyObject* function_signature(type, type, type, type, type) { static const bool is_plain_A1 = BOOST_PYTHON_IS_PLAIN(A1); static const bool is_plain_A2 = BOOST_PYTHON_IS_PLAIN(A2); static const bool is_plain_A3 = BOOST_PYTHON_IS_PLAIN(A3); static const bool is_plain_A4 = BOOST_PYTHON_IS_PLAIN(A4); static const bool is_plain_A5 = BOOST_PYTHON_IS_PLAIN(A5); tuple result(5); result.set_item(0, python_type_name_selector::get(type())); result.set_item(1, python_type_name_selector::get(type())); result.set_item(2, python_type_name_selector::get(type())); result.set_item(3, python_type_name_selector::get(type())); result.set_item(4, python_type_name_selector::get(type())); return result.reference().release(); } template PyObject* function_signature(type, type, type, type, type, type) { static const bool is_plain_A1 = BOOST_PYTHON_IS_PLAIN(A1); static const bool is_plain_A2 = BOOST_PYTHON_IS_PLAIN(A2); static const bool is_plain_A3 = BOOST_PYTHON_IS_PLAIN(A3); static const bool is_plain_A4 = BOOST_PYTHON_IS_PLAIN(A4); static const bool is_plain_A5 = BOOST_PYTHON_IS_PLAIN(A5); static const bool is_plain_A6 = BOOST_PYTHON_IS_PLAIN(A6); tuple result(6); result.set_item(0, python_type_name_selector::get(type())); result.set_item(1, python_type_name_selector::get(type())); result.set_item(2, python_type_name_selector::get(type())); result.set_item(3, python_type_name_selector::get(type())); result.set_item(4, python_type_name_selector::get(type())); result.set_item(5, python_type_name_selector::get(type())); return result.reference().release(); } // member functions template inline PyObject* function_signature(R (T::*pmf)()) { return function_signature( python::type()); } template inline PyObject* function_signature(R (T::*pmf)(A1)) { return function_signature( python::type(), python::type()); } template inline PyObject* function_signature(R (T::*pmf)(A1, A2)) { return function_signature( python::type(), python::type(), python::type()); } template inline PyObject* function_signature(R (T::*pmf)(A1, A2, A3)) { return function_signature( python::type(), python::type(), python::type(), python::type()); } template inline PyObject* function_signature(R (T::*pmf)(A1, A2, A3, A4)) { return function_signature( python::type(), python::type(), python::type(), python::type(), python::type()); } template inline PyObject* function_signature(R (T::*pmf)(A1, A2, A3, A4, A5)) { return function_signature( python::type(), python::type(), python::type(), python::type(), python::type(), python::type()); } // const member functions template inline PyObject* function_signature(R (T::*pmf)() const) { return function_signature( python::type()); } template inline PyObject* function_signature(R (T::*pmf)(A1) const) { return function_signature( python::type(), python::type()); } template inline PyObject* function_signature(R (T::*pmf)(A1, A2) const) { return function_signature( python::type(), python::type(), python::type()); } template inline PyObject* function_signature(R (T::*pmf)(A1, A2, A3) const) { return function_signature( python::type(), python::type(), python::type(), python::type()); } template inline PyObject* function_signature(R (T::*pmf)(A1, A2, A3, A4) const) { return function_signature( python::type(), python::type(), python::type(), python::type(), python::type()); } template inline PyObject* function_signature(R (T::*pmf)(A1, A2, A3, A4, A5) const) { return function_signature( python::type(), python::type(), python::type(), python::type(), python::type(), python::type()); } // free functions template inline PyObject* function_signature(R (*f)()) { return function_signature(); } template inline PyObject* function_signature(R (*f)(A1)) { return function_signature( python::type()); } template inline PyObject* function_signature(R (*f)(A1, A2)) { return function_signature( python::type(), python::type()); } template inline PyObject* function_signature(R (*f)(A1, A2, A3)) { return function_signature( python::type(), python::type(), python::type()); } template inline PyObject* function_signature(R (*f)(A1, A2, A3, A4)) { return function_signature( python::type(), python::type(), python::type(), python::type()); } template inline PyObject* function_signature(R (*f)(A1, A2, A3, A4, A5)) { return function_signature( python::type(), python::type(), python::type(), python::type(), python::type()); } template inline PyObject* function_signature(R (*f)(A1, A2, A3, A4, A5, A6)) { return function_signature( python::type(), python::type(), python::type(), python::type(), python::type(), python::type()); } } // namespace detail } // namespace python #endif // CALLER_DWA05090_H_