Compare commits
13 Commits
boost-1.49
...
boost-1.58
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e1e9eb303a | ||
|
|
9eee9ef461 | ||
|
|
fe24ab9dd5 | ||
|
|
a911c17fd6 | ||
|
|
8d5d777ebb | ||
|
|
17a7655c74 | ||
|
|
832a1edd79 | ||
|
|
ca18dc9daa | ||
|
|
8cc149f4f4 | ||
|
|
a3f478e9af | ||
|
|
46796f3413 | ||
|
|
0b8b88abc7 | ||
|
|
76db3311ed |
BIN
build/Attic/python_v1.zip
Normal file
0
doc/PyConDC_2003/bpl.html
Normal file → Executable file
0
doc/PyConDC_2003/bpl.pdf
Normal file → Executable file
0
doc/PyConDC_2003/python_cpp_mix.jpg
Normal file → Executable file
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
0
doc/PyConDC_2003/python_cpp_mix.png
Normal file → Executable file
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 6.1 KiB |
0
doc/internals.html
Normal file → Executable file
0
doc/internals.rst
Normal file → Executable file
@@ -396,27 +396,33 @@
|
||||
</blockquote>
|
||||
</dd>
|
||||
|
||||
<dt><b><a href="http://www.rationaldiscovery.com">Rational Discovery
|
||||
LLC</a></b></dt>
|
||||
<dt><b><a href="http://pyrap.googlecode.com/">Pyrap</a></b></dt>
|
||||
<dd>
|
||||
<p><a href="diepen@astron.nl"
|
||||
>Ger van Diepen</a> writes:</p>
|
||||
|
||||
<blockquote>
|
||||
<p>Pyrap is the python interface to the Radio-Astronomical Package
|
||||
casacore (<a href="http://casacore.googlecode.com/"
|
||||
>casacore.googlecode.com</a>). Astronomers love pyrap because
|
||||
it makes it easily possible to get their data (observed with
|
||||
radio-astronomical telescopes like LOFAR, ASKAP, and eVLA) in numpy
|
||||
arrays and do basic data inspection and manipulation using the many
|
||||
python packages that are available.</p>
|
||||
|
||||
<p>Boost.Python made it quite easily possible to create converters for
|
||||
the various data types, also for numpy arrays and individual elements
|
||||
of a numpy array. It's nice they work fully recursively. Mapping C++
|
||||
functions to Python was straightforward.</p>
|
||||
</blockquote>
|
||||
</dd>
|
||||
|
||||
<dt><b><a href="http://www.rdkit.org/"
|
||||
>RDKit: Cheminformatics and Machine Learning Software</a></b></dt>
|
||||
|
||||
<dd>
|
||||
Rational Discovery provides computational modeling, combinatorial
|
||||
library design and custom software development services to the
|
||||
pharmaceutical, biotech and chemical industries. We do a substantial
|
||||
amount of internal research to develop new approaches for applying
|
||||
machine-learning techniques to solve chemical problems. Because we're a
|
||||
small organization and chemistry is a large and complex field, it is
|
||||
essential that we be able to quickly and easily prototype and test new
|
||||
algorithms.
|
||||
|
||||
<p>For our internal software, we implement core data structures in C
|
||||
and expose them to Python using Boost.Python. Algorithm development is
|
||||
done in Python and then translated to C if required (often it's not).
|
||||
This hybrid development approach not only greatly increases our
|
||||
productivity, but it also allows "non-developers" (people without C
|
||||
experience) to take part in method development. Learning C is a
|
||||
daunting task, but "Python fits your brain." (Thanks to Bruce Eckel for
|
||||
the quote.)</p>
|
||||
A collection of cheminformatics and machine-learning software
|
||||
written in C++ and Python.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
0
doc/tutorial/doc/html/images/alert.png
Normal file → Executable file
|
Before Width: | Height: | Size: 603 B After Width: | Height: | Size: 603 B |
0
doc/tutorial/doc/html/images/home.png
Normal file → Executable file
|
Before Width: | Height: | Size: 358 B After Width: | Height: | Size: 358 B |
0
doc/tutorial/doc/html/images/next.png
Normal file → Executable file
|
Before Width: | Height: | Size: 336 B After Width: | Height: | Size: 336 B |
0
doc/tutorial/doc/html/images/note.png
Normal file → Executable file
|
Before Width: | Height: | Size: 658 B After Width: | Height: | Size: 658 B |
0
doc/tutorial/doc/html/images/prev.png
Normal file → Executable file
|
Before Width: | Height: | Size: 334 B After Width: | Height: | Size: 334 B |
0
doc/tutorial/doc/html/images/tip.png
Normal file → Executable file
|
Before Width: | Height: | Size: 640 B After Width: | Height: | Size: 640 B |
0
doc/tutorial/doc/html/images/up.png
Normal file → Executable file
|
Before Width: | Height: | Size: 370 B After Width: | Height: | Size: 370 B |
@@ -372,8 +372,8 @@ Namespaces are one honking great idea -- let's do more of those!
|
||||
or writing thin wrappers:
|
||||
</p>
|
||||
<pre class="programlisting"><span class="comment">// write "thin wrappers"</span>
|
||||
<span class="keyword">int</span> <span class="identifier">f1</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">x</span><span class="special">)</span> <span class="special">{</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">x</span><span class="special">);</span> <span class="special">}</span>
|
||||
<span class="keyword">int</span> <span class="identifier">f2</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">x</span><span class="special">,</span> <span class="keyword">double</span> <span class="identifier">y</span><span class="special">)</span> <span class="special">{</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">x</span><span class="special">,</span><span class="identifier">y</span><span class="special">);</span> <span class="special">}</span>
|
||||
<span class="keyword">int</span> <span class="identifier">f1</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">x</span><span class="special">)</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">x</span><span class="special">);</span> <span class="special">}</span>
|
||||
<span class="keyword">int</span> <span class="identifier">f2</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">x</span><span class="special">,</span> <span class="keyword">double</span> <span class="identifier">y</span><span class="special">)</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">x</span><span class="special">,</span><span class="identifier">y</span><span class="special">);</span> <span class="special">}</span>
|
||||
|
||||
<span class="comment">/*...*/</span>
|
||||
|
||||
|
||||
@@ -901,8 +901,8 @@ wrapping as outlined in the [link python.overloading previous section], or
|
||||
writing thin wrappers:
|
||||
|
||||
// write "thin wrappers"
|
||||
int f1(int x) { f(x); }
|
||||
int f2(int x, double y) { f(x,y); }
|
||||
int f1(int x) { return f(x); }
|
||||
int f2(int x, double y) { return f(x,y); }
|
||||
|
||||
/*...*/
|
||||
|
||||
|
||||
0
doc/v2/instance_holder.html
Normal file → Executable file
0
doc/v2/lvalue_from_pytype.html
Normal file → Executable file
@@ -96,10 +96,10 @@ template <class F, class Policies, class Keywords, class Signature>
|
||||
to <code>f</code>. <ul>
|
||||
<li> If <code>policies</code> are supplied, it
|
||||
will be applied to the function as described <a href=
|
||||
"CallPolicies.html">here</a>.
|
||||
"CallPolicies.html">here</a>.
|
||||
<li>If <code>keywords</code> are
|
||||
supplied, the keywords will be applied in order to the final
|
||||
arguments of the resulting function.
|
||||
arguments of the resulting function.
|
||||
<li>If <code>Signature</code>
|
||||
is supplied, it should be an instance of an <a
|
||||
href="../../../mpl/doc/refmanual/front-extensible-sequence.html">MPL front-extensible
|
||||
@@ -125,36 +125,33 @@ template <class F, class Policies, class Keywords, class Signature>
|
||||
</dl>
|
||||
|
||||
<pre>
|
||||
<a name=
|
||||
"make_constructor-spec"></a>template <class T, class ArgList, class Generator>
|
||||
<a href="object.html#object-spec">object</a> make_constructor();
|
||||
|
||||
template <class ArgList, class Generator, class Policies>
|
||||
<a name="make_constructor-spec">template <class F></a>
|
||||
<a href="object.html#object-spec">object</a> make_constructor(F f)
|
||||
|
||||
template <class F, class Policies>
|
||||
<a href=
|
||||
"object.html#object-spec">object</a> make_constructor(Policies const& policies)
|
||||
"object.html#object-spec">object</a> make_constructor(F f, Policies const& policies)
|
||||
|
||||
template <class F, class Policies, class KeywordsOrSignature>
|
||||
<a href=
|
||||
"object.html#object-spec">object</a> make_constructor(F f, Policies const& policies, KeywordsOrSignature const& ks)
|
||||
|
||||
template <class F, class Policies, class Keywords, class Signature>
|
||||
<a href=
|
||||
"object.html#object-spec">object</a> make_constructor(F f, Policies const& policies, Keywords const& kw, Signature const& sig)
|
||||
</pre>
|
||||
|
||||
<dl class="function-semantics">
|
||||
<dt><b>Requires:</b> <code>T</code> is a class type.
|
||||
<code>Policies</code> is a model of <a href=
|
||||
"CallPolicies.html">CallPolicies</a>. <code>ArgList</code> is an <a
|
||||
href="../../../mpl/doc/refmanual/forward-sequence.html">MPL sequence</a> of C++ argument
|
||||
types (<i>A1, A2,... AN</i>) such that if
|
||||
<code>a1, a2</code>... <code>aN</code> are objects of type
|
||||
<i>A1, A2,... AN</i> respectively, the expression <code>new
|
||||
Generator::apply<T>::type(a1, a2</code>... <code>aN</code>)
|
||||
is valid. Generator is a model of <a href=
|
||||
"HolderGenerator.html">HolderGenerator</a>.</dt>
|
||||
<dt><b>Requires:</b> <code>F</code> is a
|
||||
function pointer type. If <code>policies</code> are supplied, it must
|
||||
be a model of <a href="CallPolicies.html">CallPolicies</a>. If
|
||||
<code>kewords</code> are supplied, it must be the result of a <a href=
|
||||
"args.html#keyword-expression"><em>keyword-expression</em></a>
|
||||
specifying no more arguments than the <a href=
|
||||
"definitions.html#arity">arity</a> of <code>f</code>.</dt>
|
||||
|
||||
<dt><b>Effects:</b> Creates a Python callable object which, when called
|
||||
from Python, expects its first argument to be a Boost.Python extension
|
||||
class object. It converts its remaining its arguments to C++ and passes
|
||||
them to the constructor of a dynamically-allocated
|
||||
<code>Generator::apply<T>::type</code> object, which is then
|
||||
installed in the extension class object. In the second form, the
|
||||
<code>policies</code> are applied to the arguments and result (<a href=
|
||||
"http://www.python.org/doc/current/lib/bltin-null-object.html">None</a>)
|
||||
of the Python callable object</dt>
|
||||
from Python, converts its arguments to C++ and calls <code>f</code>.</dt>
|
||||
|
||||
<dt><b>Returns:</b> An instance of <a href=
|
||||
"object.html#object-spec">object</a> which holds the new Python
|
||||
@@ -186,7 +183,7 @@ BOOST_PYTHON_MODULE(make_function_test)
|
||||
def("choose_function", choose_function);
|
||||
}
|
||||
</pre>
|
||||
It can be used this way in Python:
|
||||
It can be used this way in Python:
|
||||
<pre>
|
||||
>>> from make_function_test import *
|
||||
>>> f = choose_function(1)
|
||||
|
||||
0
doc/v2/operators.html
Normal file → Executable file
0
doc/v2/raw_function.html
Normal file → Executable file
0
doc/v2/return_arg.html
Normal file → Executable file
0
doc/v2/stl_iterator.html
Normal file → Executable file
0
doc/v2/type_id.html
Normal file → Executable file
0
doc/v2/wrapper.html
Normal file → Executable file
@@ -11,7 +11,10 @@ use-project boost
|
||||
# boost_python library from the project whose global ID is
|
||||
# /boost/python.
|
||||
project
|
||||
: requirements <library>/boost/python//boost_python ;
|
||||
: requirements <library>/boost/python//boost_python
|
||||
<implicit-dependency>/boost//headers
|
||||
: usage-requirements <implicit-dependency>/boost//headers
|
||||
;
|
||||
|
||||
# Declare the three extension modules. You can specify multiple
|
||||
# source files after the colon separated by spaces.
|
||||
|
||||
0
example/boost-build.jam
Normal file → Executable file
@@ -12,6 +12,8 @@ use-project boost
|
||||
# /boost/python.
|
||||
project boost-python-quickstart
|
||||
: requirements <library>/boost/python//boost_python
|
||||
<implicit-dependency>/boost//headers
|
||||
: usage-requirements <implicit-dependency>/boost//headers
|
||||
;
|
||||
|
||||
# Make the definition of the python-extension rule available
|
||||
|
||||
@@ -20,7 +20,10 @@ use-project boost
|
||||
# boost_python library from the project whose global ID is
|
||||
# /boost/python.
|
||||
project
|
||||
: requirements <library>/boost/python//boost_python ;
|
||||
: requirements <library>/boost/python//boost_python
|
||||
<implicit-dependency>/boost//headers
|
||||
: usage-requirements <implicit-dependency>/boost//headers
|
||||
;
|
||||
|
||||
# Declare the three extension modules. You can specify multiple
|
||||
# source files after the colon separated by spaces.
|
||||
|
||||
0
include/boost/python/arg_from_python.hpp
Normal file → Executable file
0
include/boost/python/base_type_traits.hpp
Normal file → Executable file
0
include/boost/python/borrowed.hpp
Normal file → Executable file
0
include/boost/python/cast.hpp
Normal file → Executable file
0
include/boost/python/converter/arg_from_python.hpp
Normal file → Executable file
0
include/boost/python/converter/arg_to_python.hpp
Normal file → Executable file
0
include/boost/python/converter/arg_to_python_base.hpp
Normal file → Executable file
0
include/boost/python/converter/context_result_converter.hpp
Normal file → Executable file
0
include/boost/python/converter/object_manager.hpp
Normal file → Executable file
0
include/boost/python/converter/pytype_function.hpp
Normal file → Executable file
0
include/boost/python/converter/return_from_python.hpp
Normal file → Executable file
0
include/boost/python/def_visitor.hpp
Normal file → Executable file
0
include/boost/python/detail/borrowed_ptr.hpp
Normal file → Executable file
@@ -76,13 +76,13 @@
|
||||
|
||||
# if BOOST_PYTHON_USE_GCC_SYMBOL_VISIBILITY
|
||||
# if defined(BOOST_PYTHON_SOURCE)
|
||||
# define BOOST_PYTHON_DECL __attribute__ ((visibility("default")))
|
||||
# define BOOST_PYTHON_DECL __attribute__ ((__visibility__("default")))
|
||||
# define BOOST_PYTHON_BUILD_DLL
|
||||
# else
|
||||
# define BOOST_PYTHON_DECL
|
||||
# endif
|
||||
# define BOOST_PYTHON_DECL_FORWARD
|
||||
# define BOOST_PYTHON_DECL_EXCEPTION __attribute__ ((visibility("default")))
|
||||
# define BOOST_PYTHON_DECL_EXCEPTION __attribute__ ((__visibility__("default")))
|
||||
# elif (defined(_WIN32) || defined(__CYGWIN__))
|
||||
# if defined(BOOST_PYTHON_SOURCE)
|
||||
# define BOOST_PYTHON_DECL __declspec(dllexport)
|
||||
|
||||
0
include/boost/python/detail/convertible.hpp
Normal file → Executable file
0
include/boost/python/detail/copy_ctor_mutates_rhs.hpp
Normal file → Executable file
0
include/boost/python/detail/def_helper_fwd.hpp
Normal file → Executable file
0
include/boost/python/detail/enable_if.hpp
Normal file → Executable file
0
include/boost/python/detail/force_instantiate.hpp
Normal file → Executable file
0
include/boost/python/detail/is_shared_ptr.hpp
Normal file → Executable file
0
include/boost/python/detail/is_wrapper.hpp
Normal file → Executable file
0
include/boost/python/detail/nullary_function_adaptor.hpp
Normal file → Executable file
0
include/boost/python/detail/prefix.hpp
Normal file → Executable file
0
include/boost/python/detail/python_type.hpp
Normal file → Executable file
0
include/boost/python/detail/sfinae.hpp
Normal file → Executable file
0
include/boost/python/detail/unwind_type.hpp
Normal file → Executable file
0
include/boost/python/detail/unwrap_type_id.hpp
Normal file → Executable file
0
include/boost/python/detail/unwrap_wrapper.hpp
Normal file → Executable file
0
include/boost/python/detail/value_arg.hpp
Normal file → Executable file
0
include/boost/python/detail/wrapper_base.hpp
Normal file → Executable file
0
include/boost/python/docstring_options.hpp
Normal file → Executable file
@@ -8,6 +8,7 @@
|
||||
# include <boost/python/detail/prefix.hpp>
|
||||
|
||||
# include <boost/bind.hpp>
|
||||
# include <boost/bind/placeholders.hpp>
|
||||
# include <boost/type.hpp>
|
||||
# include <boost/python/detail/translate_exception.hpp>
|
||||
# include <boost/python/detail/exception_handler.hpp>
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
# include <boost/python/detail/copy_ctor_mutates_rhs.hpp>
|
||||
# include <boost/python/detail/void_ptr.hpp>
|
||||
# include <boost/python/detail/void_return.hpp>
|
||||
# include <boost/utility.hpp>
|
||||
# include <boost/call_traits.hpp>
|
||||
|
||||
#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) || BOOST_WORKAROUND(BOOST_INTEL_WIN, <= 900)
|
||||
|
||||
0
include/boost/python/handle.hpp
Normal file → Executable file
0
include/boost/python/handle_fwd.hpp
Normal file → Executable file
@@ -7,7 +7,7 @@
|
||||
|
||||
# include <boost/python/detail/prefix.hpp>
|
||||
|
||||
# include <boost/utility.hpp>
|
||||
# include <boost/noncopyable.hpp>
|
||||
# include <boost/python/type_id.hpp>
|
||||
# include <cstddef>
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@ extern "C" __declspec(dllexport) _BOOST_PYTHON_MODULE_INIT(name)
|
||||
|
||||
# define BOOST_PYTHON_MODULE_INIT(name) \
|
||||
void BOOST_PP_CAT(init_module_,name)(); \
|
||||
extern "C" __attribute__ ((visibility("default"))) _BOOST_PYTHON_MODULE_INIT(name)
|
||||
extern "C" __attribute__ ((__visibility__("default"))) _BOOST_PYTHON_MODULE_INIT(name)
|
||||
|
||||
# else
|
||||
|
||||
|
||||
0
include/boost/python/object.hpp
Normal file → Executable file
@@ -6,7 +6,6 @@
|
||||
# define CLASS_DWA20011214_HPP
|
||||
|
||||
# include <boost/python/detail/prefix.hpp>
|
||||
# include <boost/utility.hpp>
|
||||
# include <boost/python/object_core.hpp>
|
||||
# include <boost/python/type_id.hpp>
|
||||
# include <cstddef>
|
||||
|
||||
0
include/boost/python/object/function_doc_signature.hpp
Normal file → Executable file
0
include/boost/python/object/inheritance_query.hpp
Normal file → Executable file
0
include/boost/python/object/stl_iterator_core.hpp
Normal file → Executable file
@@ -348,12 +348,12 @@ namespace api
|
||||
// Macros for forwarding constructors in classes derived from
|
||||
// object. Derived classes will usually want these as an
|
||||
// implementation detail
|
||||
# define BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS_(derived, base) \
|
||||
inline explicit derived(python::detail::borrowed_reference p) \
|
||||
: base(p) {} \
|
||||
inline explicit derived(python::detail::new_reference p) \
|
||||
: base(p) {} \
|
||||
inline explicit derived(python::detail::new_non_null_reference p) \
|
||||
# define BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS_(derived, base) \
|
||||
inline explicit derived(::boost::python::detail::borrowed_reference p) \
|
||||
: base(p) {} \
|
||||
inline explicit derived(::boost::python::detail::new_reference p) \
|
||||
: base(p) {} \
|
||||
inline explicit derived(::boost::python::detail::new_non_null_reference p) \
|
||||
: base(p) {}
|
||||
|
||||
# if !defined(BOOST_MSVC) || BOOST_MSVC >= 1300
|
||||
|
||||
0
include/boost/python/object_items.hpp
Normal file → Executable file
0
include/boost/python/object_protocol_core.hpp
Normal file → Executable file
0
include/boost/python/other.hpp
Normal file → Executable file
0
include/boost/python/proxy.hpp
Normal file → Executable file
0
include/boost/python/pure_virtual.hpp
Normal file → Executable file
0
include/boost/python/raw_function.hpp
Normal file → Executable file
0
include/boost/python/refcount.hpp
Normal file → Executable file
0
include/boost/python/return_arg.hpp
Normal file → Executable file
@@ -8,7 +8,6 @@
|
||||
# include <boost/python/detail/prefix.hpp>
|
||||
# include <boost/python/object.hpp>
|
||||
# include <boost/python/refcount.hpp>
|
||||
# include <boost/utility.hpp>
|
||||
|
||||
namespace boost { namespace python {
|
||||
|
||||
|
||||
0
include/boost/python/self.hpp
Normal file → Executable file
0
include/boost/python/stl_iterator.hpp
Normal file → Executable file
0
include/boost/python/wrapper.hpp
Normal file → Executable file
15
meta/libraries.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"key": "python",
|
||||
"name": "Python",
|
||||
"authors": [
|
||||
"Dave Abrahams"
|
||||
],
|
||||
"description": "The Boost Python Library is a framework for interfacing Python and C++. It allows you to quickly and seamlessly expose C++ classes functions and objects to Python, and vice-versa, using no special tools -- just your C++ compiler.",
|
||||
"category": [
|
||||
"Inter-language"
|
||||
],
|
||||
"maintainers": [
|
||||
"Ralf Grosse-Kunstleve <rwgrosse-kunstleve -at- lbl.gov>",
|
||||
"Ravi Rajagopal <lists_ravi -at- lavabit.com>"
|
||||
]
|
||||
}
|
||||
@@ -377,7 +377,8 @@ namespace
|
||||
static unaryfunc* get_slot(PyObject* obj)
|
||||
{
|
||||
#if PY_VERSION_HEX >= 0x03000000
|
||||
return (PyUnicode_Check(obj)) ? &py_unicode_as_string_unaryfunc : 0;
|
||||
return (PyUnicode_Check(obj)) ? &py_unicode_as_string_unaryfunc :
|
||||
PyBytes_Check(obj) ? &py_object_identity : 0;
|
||||
#else
|
||||
return (PyString_Check(obj)) ? &obj->ob_type->tp_str : 0;
|
||||
|
||||
|
||||
18
src/exec.cpp
@@ -84,22 +84,24 @@ object BOOST_PYTHON_DECL exec_file(str filename, object global, object local)
|
||||
if (local.is_none()) local = global;
|
||||
// should be 'char const *' but older python versions don't use 'const' yet.
|
||||
char *f = python::extract<char *>(filename);
|
||||
#if PY_VERSION_HEX >= 0x03000000
|
||||
// TODO(bhy) temporary workaround for Python 3.
|
||||
// should figure out a way to avoid binary incompatibilities as the Python 2
|
||||
// version did.
|
||||
FILE *fs = fopen(f, "r");
|
||||
#else
|
||||
|
||||
// Let python open the file to avoid potential binary incompatibilities.
|
||||
#if PY_VERSION_HEX >= 0x03000000
|
||||
// See http://www.codeproject.com/Articles/820116/Embedding-Python-program-in-a-C-Cplusplus-code
|
||||
FILE *fs = _Py_fopen(f, "r");
|
||||
#else
|
||||
PyObject *pyfile = PyFile_FromString(f, const_cast<char*>("r"));
|
||||
if (!pyfile) throw std::invalid_argument(std::string(f) + " : no such file");
|
||||
python::handle<> file(pyfile);
|
||||
FILE *fs = PyFile_AsFile(file.get());
|
||||
#endif
|
||||
PyObject* result = PyRun_File(fs,
|
||||
|
||||
int closeit = 1; // Close file before PyRun returns
|
||||
PyObject* result = PyRun_FileEx(fs,
|
||||
f,
|
||||
Py_file_input,
|
||||
global.ptr(), local.ptr());
|
||||
global.ptr(), local.ptr(),
|
||||
closeit);
|
||||
if (!result) throw_error_already_set();
|
||||
return object(detail::new_reference(result));
|
||||
}
|
||||
|
||||