⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 object_operators.hpp

📁 CGAL is a collaborative effort of several sites in Europe and Israel. The goal is to make the most i
💻 HPP
字号:
// Copyright David Abrahams 2002.// Distributed under the Boost Software License, Version 1.0. (See// accompanying file LICENSE_1_0.txt or copy at// http://www.boost.org/LICENSE_1_0.txt)#ifndef OBJECT_OPERATORS_DWA2002617_HPP# define OBJECT_OPERATORS_DWA2002617_HPP# include <boost/python/detail/prefix.hpp># include <boost/python/object_core.hpp># include <boost/python/call.hpp># include <boost/iterator/detail/enable_if.hpp># include <boost/mpl/bool.hpp># include <boost/iterator/detail/config_def.hpp>namespace boost { namespace python { namespace api {template <class X>char is_object_operators_helper(object_operators<X> const*);    typedef char (&no_type)[2];no_type is_object_operators_helper(...);template <class X> X* make_ptr();template <class L, class R = L>struct is_object_operators{    enum {        value         = (sizeof(api::is_object_operators_helper(api::make_ptr<L>()))           + sizeof(api::is_object_operators_helper(api::make_ptr<R>()))           < 4        )    };    typedef mpl::bool_<value> type;};# if !defined(BOOST_NO_SFINAE) && !defined(BOOST_NO_IS_CONVERTIBLE)template <class L, class R, class T>struct enable_binary  : boost::iterators::enable_if<is_object_operators<L,R>, T>{};#  define BOOST_PYTHON_BINARY_RETURN(T) typename enable_binary<L,R,T>::type# else#  define BOOST_PYTHON_BINARY_RETURN(T) T# endiftemplate <class U>object object_operators<U>::operator()() const{    object_cref2 f = *static_cast<U const*>(this);    return call<object>(f.ptr());}template <class U>inlineobject_operators<U>::operator bool_type() const{    object_cref2 x = *static_cast<U const*>(this);    return PyObject_IsTrue(x.ptr()) ? &object::ptr : 0;}template <class U>inline boolobject_operators<U>::operator!() const{    object_cref2 x = *static_cast<U const*>(this);    return !PyObject_IsTrue(x.ptr());}# define BOOST_PYTHON_COMPARE_OP(op, opid)                              \template <class L, class R>                                             \BOOST_PYTHON_BINARY_RETURN(bool) operator op(L const& l, R const& r)    \{                                                                       \    return PyObject_RichCompareBool(                                    \        object(l).ptr(), object(r).ptr(), opid);                        \}BOOST_PYTHON_COMPARE_OP(>, Py_GT)BOOST_PYTHON_COMPARE_OP(>=, Py_GE)BOOST_PYTHON_COMPARE_OP(<, Py_LT)BOOST_PYTHON_COMPARE_OP(<=, Py_LE)BOOST_PYTHON_COMPARE_OP(==, Py_EQ)BOOST_PYTHON_COMPARE_OP(!=, Py_NE)# undef BOOST_PYTHON_COMPARE_OP    # define BOOST_PYTHON_BINARY_OPERATOR(op)                               \BOOST_PYTHON_DECL object operator op(object const& l, object const& r); \template <class L, class R>                                             \BOOST_PYTHON_BINARY_RETURN(object) operator op(L const& l, R const& r)  \{                                                                       \    return object(l) op object(r);                                      \}BOOST_PYTHON_BINARY_OPERATOR(+)BOOST_PYTHON_BINARY_OPERATOR(-)BOOST_PYTHON_BINARY_OPERATOR(*)BOOST_PYTHON_BINARY_OPERATOR(/)BOOST_PYTHON_BINARY_OPERATOR(%)BOOST_PYTHON_BINARY_OPERATOR(<<)BOOST_PYTHON_BINARY_OPERATOR(>>)BOOST_PYTHON_BINARY_OPERATOR(&)BOOST_PYTHON_BINARY_OPERATOR(^)BOOST_PYTHON_BINARY_OPERATOR(|)# undef BOOST_PYTHON_BINARY_OPERATOR        # define BOOST_PYTHON_INPLACE_OPERATOR(op)                              \BOOST_PYTHON_DECL object& operator op(object& l, object const& r);      \template <class R>                                                      \object& operator op(object& l, R const& r)                              \{                                                                       \    return l op object(r);                                              \}BOOST_PYTHON_INPLACE_OPERATOR(+=)BOOST_PYTHON_INPLACE_OPERATOR(-=)BOOST_PYTHON_INPLACE_OPERATOR(*=)BOOST_PYTHON_INPLACE_OPERATOR(/=)BOOST_PYTHON_INPLACE_OPERATOR(%=)BOOST_PYTHON_INPLACE_OPERATOR(<<=)BOOST_PYTHON_INPLACE_OPERATOR(>>=)BOOST_PYTHON_INPLACE_OPERATOR(&=)BOOST_PYTHON_INPLACE_OPERATOR(^=)BOOST_PYTHON_INPLACE_OPERATOR(|=)# undef BOOST_PYTHON_INPLACE_OPERATOR}}} // namespace boost::python#include <boost/iterator/detail/config_undef.hpp>#endif // OBJECT_OPERATORS_DWA2002617_HPP

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -