pybind.py (13714:35636064b7a1) pybind.py (13763:1adc93bf6a65)
1# Copyright (c) 2017 ARM Limited
2# All rights reserved.
3#
4# The license below extends only to copyright in the software and shall
5# not be construed as granting a license to any other intellectual
6# property including but not limited to intellectual property relating
7# to a hardware implementation of the functionality of the software
8# licensed hereunder. You may use the software subject to the license

--- 44 unchanged lines hidden (view full) ---

53 self.cxx_name = cxx_name if cxx_name else name
54 self.writable = writable
55
56 def export(self, code, cname):
57 export = "def_readwrite" if self.writable else "def_readonly"
58 code('.${export}("${{self.name}}", &${cname}::${{self.cxx_name}})')
59
60class PyBindMethod(PyBindExport):
1# Copyright (c) 2017 ARM Limited
2# All rights reserved.
3#
4# The license below extends only to copyright in the software and shall
5# not be construed as granting a license to any other intellectual
6# property including but not limited to intellectual property relating
7# to a hardware implementation of the functionality of the software
8# licensed hereunder. You may use the software subject to the license

--- 44 unchanged lines hidden (view full) ---

53 self.cxx_name = cxx_name if cxx_name else name
54 self.writable = writable
55
56 def export(self, code, cname):
57 export = "def_readwrite" if self.writable else "def_readonly"
58 code('.${export}("${{self.name}}", &${cname}::${{self.cxx_name}})')
59
60class PyBindMethod(PyBindExport):
61 def __init__(self, name, cxx_name=None, args=None):
61 def __init__(self, name, cxx_name=None, args=None,
62 return_value_policy=None):
62 self.name = name
63 self.cxx_name = cxx_name if cxx_name else name
64 self.args = args
63 self.name = name
64 self.cxx_name = cxx_name if cxx_name else name
65 self.args = args
66 self.return_value_policy = return_value_policy
65
66 def _conv_arg(self, value):
67 if isinstance(value, bool):
68 return "true" if value else "false"
69 elif isinstance(value, (float, int)):
70 return repr(value)
71 else:
72 raise TypeError("Unsupported PyBind default value type")
73
74 def export(self, code, cname):
67
68 def _conv_arg(self, value):
69 if isinstance(value, bool):
70 return "true" if value else "false"
71 elif isinstance(value, (float, int)):
72 return repr(value)
73 else:
74 raise TypeError("Unsupported PyBind default value type")
75
76 def export(self, code, cname):
77 arguments = [ '"${{self.name}}"', '&${cname}::${{self.cxx_name}}' ]
78 if self.return_value_policy:
79 arguments.append('pybind11::return_value_policy::'
80 '${{self.return_value_policy}}')
75 if self.args:
76 def get_arg_decl(arg):
77 if isinstance(arg, tuple):
78 name, default = arg
79 return 'py::arg("%s") = %s' % (
80 name, self._conv_arg(default))
81 else:
82 return 'py::arg("%s")' % arg
83
81 if self.args:
82 def get_arg_decl(arg):
83 if isinstance(arg, tuple):
84 name, default = arg
85 return 'py::arg("%s") = %s' % (
86 name, self._conv_arg(default))
87 else:
88 return 'py::arg("%s")' % arg
89
84 code('.def("${{self.name}}", &${cname}::${{self.name}}, ')
85 code(' ' + \
86 ', '.join([ get_arg_decl(a) for a in self.args ]) + ')')
87 else:
88 code('.def("${{self.name}}", &${cname}::${{self.cxx_name}})')
90 arguments.extend(list([ get_arg_decl(a) for a in self.args ]))
91 code('.def(' + ', '.join(arguments) + ')')