// Copyright David Abrahams 2001. | |
// Distributed under the Boost Software License, Version 1.0. (See | |
// accompanying file LICENSE_1_0.txt or copy at | |
// http://www.boost.org/LICENSE_1_0.txt) | |
#ifndef FUNCTION_DWA20011214_HPP | |
# define FUNCTION_DWA20011214_HPP | |
# include <boost/python/detail/prefix.hpp> | |
# include <boost/python/args_fwd.hpp> | |
# include <boost/python/handle.hpp> | |
# include <boost/function/function2.hpp> | |
# include <boost/python/object_core.hpp> | |
# include <boost/python/object/py_function.hpp> | |
namespace boost { namespace python { namespace objects { | |
struct BOOST_PYTHON_DECL function : PyObject | |
{ | |
function( | |
py_function const& | |
, python::detail::keyword const* names_and_defaults | |
, unsigned num_keywords); | |
~function(); | |
PyObject* call(PyObject*, PyObject*) const; | |
// Add an attribute to the name_space with the given name. If it is | |
// a function object (this class), and an existing function is | |
// already there, add it as an overload. | |
static void add_to_namespace( | |
object const& name_space, char const* name, object const& attribute); | |
static void add_to_namespace( | |
object const& name_space, char const* name, object const& attribute, char const* doc); | |
object const& doc() const; | |
void doc(object const& x); | |
object const& name() const; | |
object const& get_namespace() const { return m_namespace; } | |
private: // helper functions | |
object signature(bool show_return_type=false) const; | |
object signatures(bool show_return_type=false) const; | |
void argument_error(PyObject* args, PyObject* keywords) const; | |
void add_overload(handle<function> const&); | |
private: // data members | |
py_function m_fn; | |
handle<function> m_overloads; | |
object m_name; | |
object m_namespace; | |
object m_doc; | |
object m_arg_names; | |
unsigned m_nkeyword_values; | |
friend class function_doc_signature_generator; | |
}; | |
// | |
// implementations | |
// | |
inline object const& function::doc() const | |
{ | |
return this->m_doc; | |
} | |
inline void function::doc(object const& x) | |
{ | |
this->m_doc = x; | |
} | |
inline object const& function::name() const | |
{ | |
return this->m_name; | |
} | |
}}} // namespace boost::python::objects | |
#endif // FUNCTION_DWA20011214_HPP |