Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_33_1/libs/python/src/object_operators.cpp @ 12

Last change on this file since 12 was 12, checked in by landauf, 17 years ago

added boost

File size: 2.3 KB
Line 
1// Copyright David Abrahams 2002.
2// Distributed under the Boost Software License, Version 1.0. (See
3// accompanying file LICENSE_1_0.txt or copy at
4// http://www.boost.org/LICENSE_1_0.txt)
5
6#include <boost/python/object_operators.hpp>
7#include <boost/python/detail/raw_pyobject.hpp>
8
9namespace boost { namespace python { namespace api {
10
11#define BOOST_PYTHON_BINARY_OPERATOR(op, name)                          \
12BOOST_PYTHON_DECL object operator op(object const& l, object const& r)  \
13{                                                                       \
14    return object(                                                      \
15        detail::new_reference(                                          \
16            PyNumber_##name(l.ptr(), r.ptr()))                          \
17        );                                                              \
18}
19
20BOOST_PYTHON_BINARY_OPERATOR(+, Add)
21BOOST_PYTHON_BINARY_OPERATOR(-, Subtract)
22BOOST_PYTHON_BINARY_OPERATOR(*, Multiply)
23BOOST_PYTHON_BINARY_OPERATOR(/, Divide)
24BOOST_PYTHON_BINARY_OPERATOR(%, Remainder)
25BOOST_PYTHON_BINARY_OPERATOR(<<, Lshift)
26BOOST_PYTHON_BINARY_OPERATOR(>>, Rshift)
27BOOST_PYTHON_BINARY_OPERATOR(&, And)
28BOOST_PYTHON_BINARY_OPERATOR(^, Xor)
29BOOST_PYTHON_BINARY_OPERATOR(|, Or)
30#undef BOOST_PYTHON_BINARY_OPERATOR
31
32#define BOOST_PYTHON_INPLACE_OPERATOR(op, name)                         \
33BOOST_PYTHON_DECL object& operator op##=(object& l, object const& r)    \
34{                                                                       \
35    return l = object(                                                  \
36        (detail::new_reference)                                         \
37            PyNumber_InPlace##name(l.ptr(), r.ptr()));                  \
38}
39   
40BOOST_PYTHON_INPLACE_OPERATOR(+, Add)
41BOOST_PYTHON_INPLACE_OPERATOR(-, Subtract)
42BOOST_PYTHON_INPLACE_OPERATOR(*, Multiply)
43BOOST_PYTHON_INPLACE_OPERATOR(/, Divide)
44BOOST_PYTHON_INPLACE_OPERATOR(%, Remainder)
45BOOST_PYTHON_INPLACE_OPERATOR(<<, Lshift)
46BOOST_PYTHON_INPLACE_OPERATOR(>>, Rshift)
47BOOST_PYTHON_INPLACE_OPERATOR(&, And)
48BOOST_PYTHON_INPLACE_OPERATOR(^, Xor)
49BOOST_PYTHON_INPLACE_OPERATOR(|, Or)
50#undef BOOST_PYTHON_INPLACE_OPERATOR
51
52object::object(handle<> const& x)
53     : object_base(python::incref(python::expect_non_null(x.get())))
54{}
55
56}}} // namespace boost::python
Note: See TracBrowser for help on using the repository browser.