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