Chris@16
|
1 // Copyright David Abrahams 2001.
|
Chris@16
|
2 // Distributed under the Boost Software License, Version 1.0. (See
|
Chris@16
|
3 // accompanying file LICENSE_1_0.txt or copy at
|
Chris@16
|
4 // http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
5 #ifndef FUNCTION_DWA20011214_HPP
|
Chris@16
|
6 # define FUNCTION_DWA20011214_HPP
|
Chris@16
|
7
|
Chris@16
|
8 # include <boost/python/detail/prefix.hpp>
|
Chris@16
|
9 # include <boost/python/args_fwd.hpp>
|
Chris@16
|
10 # include <boost/python/handle.hpp>
|
Chris@16
|
11 # include <boost/function/function2.hpp>
|
Chris@16
|
12 # include <boost/python/object_core.hpp>
|
Chris@16
|
13 # include <boost/python/object/py_function.hpp>
|
Chris@16
|
14
|
Chris@16
|
15 namespace boost { namespace python { namespace objects {
|
Chris@16
|
16
|
Chris@16
|
17
|
Chris@16
|
18 struct BOOST_PYTHON_DECL function : PyObject
|
Chris@16
|
19 {
|
Chris@16
|
20 function(
|
Chris@16
|
21 py_function const&
|
Chris@16
|
22 , python::detail::keyword const* names_and_defaults
|
Chris@16
|
23 , unsigned num_keywords);
|
Chris@16
|
24
|
Chris@16
|
25 ~function();
|
Chris@16
|
26
|
Chris@16
|
27 PyObject* call(PyObject*, PyObject*) const;
|
Chris@16
|
28
|
Chris@16
|
29 // Add an attribute to the name_space with the given name. If it is
|
Chris@16
|
30 // a function object (this class), and an existing function is
|
Chris@16
|
31 // already there, add it as an overload.
|
Chris@16
|
32 static void add_to_namespace(
|
Chris@16
|
33 object const& name_space, char const* name, object const& attribute);
|
Chris@16
|
34
|
Chris@16
|
35 static void add_to_namespace(
|
Chris@16
|
36 object const& name_space, char const* name, object const& attribute, char const* doc);
|
Chris@16
|
37
|
Chris@16
|
38 object const& doc() const;
|
Chris@16
|
39 void doc(object const& x);
|
Chris@16
|
40
|
Chris@16
|
41 object const& name() const;
|
Chris@16
|
42
|
Chris@16
|
43 object const& get_namespace() const { return m_namespace; }
|
Chris@16
|
44
|
Chris@16
|
45 private: // helper functions
|
Chris@16
|
46 object signature(bool show_return_type=false) const;
|
Chris@16
|
47 object signatures(bool show_return_type=false) const;
|
Chris@16
|
48 void argument_error(PyObject* args, PyObject* keywords) const;
|
Chris@16
|
49 void add_overload(handle<function> const&);
|
Chris@16
|
50
|
Chris@16
|
51 private: // data members
|
Chris@16
|
52 py_function m_fn;
|
Chris@16
|
53 handle<function> m_overloads;
|
Chris@16
|
54 object m_name;
|
Chris@16
|
55 object m_namespace;
|
Chris@16
|
56 object m_doc;
|
Chris@16
|
57 object m_arg_names;
|
Chris@16
|
58 unsigned m_nkeyword_values;
|
Chris@16
|
59 friend class function_doc_signature_generator;
|
Chris@16
|
60 };
|
Chris@16
|
61
|
Chris@16
|
62 //
|
Chris@16
|
63 // implementations
|
Chris@16
|
64 //
|
Chris@16
|
65 inline object const& function::doc() const
|
Chris@16
|
66 {
|
Chris@16
|
67 return this->m_doc;
|
Chris@16
|
68 }
|
Chris@16
|
69
|
Chris@16
|
70 inline void function::doc(object const& x)
|
Chris@16
|
71 {
|
Chris@16
|
72 this->m_doc = x;
|
Chris@16
|
73 }
|
Chris@16
|
74
|
Chris@16
|
75 inline object const& function::name() const
|
Chris@16
|
76 {
|
Chris@16
|
77 return this->m_name;
|
Chris@16
|
78 }
|
Chris@16
|
79
|
Chris@16
|
80 }}} // namespace boost::python::objects
|
Chris@16
|
81
|
Chris@16
|
82 #endif // FUNCTION_DWA20011214_HPP
|