diff options
| author | bugaevskiy <[email protected]> | 2022-12-31 17:40:08 +0300 |
|---|---|---|
| committer | bugaevskiy <[email protected]> | 2022-12-31 17:40:08 +0300 |
| commit | 030896f914b07ae082ccf0b6b00df926d22d2454 (patch) | |
| tree | e520bd22d01faaf07ff303c49ad2fdfefa114f67 /contrib/restricted/boost/python | |
| parent | 014fdab1c4bb0fedea59974a6bb13ef3ec3b67cb (diff) | |
Remove Boost metaproject
Diffstat (limited to 'contrib/restricted/boost/python')
166 files changed, 0 insertions, 17653 deletions
diff --git a/contrib/restricted/boost/python/LICENSE_1_0.txt b/contrib/restricted/boost/python/LICENSE_1_0.txt deleted file mode 100644 index 36b7cd93cdf..00000000000 --- a/contrib/restricted/boost/python/LICENSE_1_0.txt +++ /dev/null @@ -1,23 +0,0 @@ -Boost Software License - Version 1.0 - August 17th, 2003 - -Permission is hereby granted, free of charge, to any person or organization -obtaining a copy of the software and accompanying documentation covered by -this license (the "Software") to use, reproduce, display, distribute, -execute, and transmit the Software, and to prepare derivative works of the -Software, and to permit third-parties to whom the Software is furnished to -do so, all subject to the following: - -The copyright notices in the Software and this entire statement, including -the above license grant, this restriction and the following disclaimer, -must be included in all copies of the Software, in whole or in part, and -all derivative works of the Software, unless such copies or derivative -works are solely in the form of machine-executable object code generated by -a source language processor. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT -SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE -FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. diff --git a/contrib/restricted/boost/python/README.md b/contrib/restricted/boost/python/README.md deleted file mode 100644 index f57b97505a4..00000000000 --- a/contrib/restricted/boost/python/README.md +++ /dev/null @@ -1,59 +0,0 @@ - - -# Synopsis - -[](https://gitter.im/boostorg/python?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) - -Welcome to Boost.Python, a C++ library which enables seamless interoperability between C++ and the Python programming language. The library includes support for: - -* References and Pointers -* Globally Registered Type Coercions -* Automatic Cross-Module Type Conversions -* Efficient Function Overloading -* C++ to Python Exception Translation -* Default Arguments -* Keyword Arguments -* Manipulating Python objects in C++ -* Exporting C++ Iterators as Python Iterators -* Documentation Strings - -See the [Boost.Python](http://boostorg.github.io/python) documentation for details. - -**Hint :** Check out the [development version](http://boostorg.github.io/python/develop) of the documentation to see work in progress. - -# Building    - -While Boost.Python is part of the Boost C++ Libraries super-project, and thus can be compiled as part of Boost, it can also be compiled and installed stand-alone, i.e. against a pre-installed Boost package. - -## Prerequisites - -* [Python](http://www.python.org) -* [Boost](http://www.boost.org) -* [Faber](https://stefanseefeld.github.io/faber) - -## Build - -Run - -``` -faber -``` -to build the library. - -## Test - -Run - -``` -faber test.report -``` -to run the tests. - -## Build docs - -Run - -``` -faber doc.html -``` -to build the documentation. diff --git a/contrib/restricted/boost/python/include/boost/python/arg_from_python.hpp b/contrib/restricted/boost/python/include/boost/python/arg_from_python.hpp deleted file mode 100644 index 983726b0651..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/arg_from_python.hpp +++ /dev/null @@ -1,76 +0,0 @@ -// 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 ARG_FROM_PYTHON_DWA2002128_HPP -# define ARG_FROM_PYTHON_DWA2002128_HPP - -# include <boost/python/detail/prefix.hpp> -# include <boost/python/converter/arg_from_python.hpp> -# if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \ - || BOOST_WORKAROUND(BOOST_INTEL_WIN, BOOST_TESTED_AT(800)) -# include <boost/python/detail/type_traits.hpp> -#endif - -namespace boost { namespace python { - -template <class T> -struct arg_from_python - : converter::select_arg_from_python< -# if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \ - || BOOST_WORKAROUND(BOOST_INTEL_WIN, BOOST_TESTED_AT(800)) - typename detail::remove_cv<T>::type -# else - T -# endif - >::type -{ - typedef typename converter::select_arg_from_python< -# if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \ - || BOOST_WORKAROUND(BOOST_INTEL_WIN, BOOST_TESTED_AT(800)) - typename detail::remove_cv<T>::type -# else - T -# endif - >::type base; - - arg_from_python(PyObject*); -}; - -// specialization for PyObject* -template <> -struct arg_from_python<PyObject*> -{ - typedef PyObject* result_type; - - arg_from_python(PyObject* p) : m_source(p) {} - bool convertible() const { return true; } - PyObject* operator()() const { return m_source; } - private: - PyObject* m_source; -}; - -template <> -struct arg_from_python<PyObject* const&> -{ - typedef PyObject* const& result_type; - - arg_from_python(PyObject* p) : m_source(p) {} - bool convertible() const { return true; } - PyObject*const& operator()() const { return m_source; } - private: - PyObject* m_source; -}; - -// -// implementations -// -template <class T> -inline arg_from_python<T>::arg_from_python(PyObject* source) - : base(source) -{ -} - -}} // namespace boost::python - -#endif // ARG_FROM_PYTHON_DWA2002128_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/args.hpp b/contrib/restricted/boost/python/include/boost/python/args.hpp deleted file mode 100644 index 27731bd8c99..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/args.hpp +++ /dev/null @@ -1,146 +0,0 @@ -// 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 KEYWORDS_DWA2002323_HPP -# define KEYWORDS_DWA2002323_HPP - -# include <boost/python/detail/prefix.hpp> - -# include <boost/python/args_fwd.hpp> -# include <boost/config.hpp> -# include <boost/python/detail/preprocessor.hpp> -# include <boost/python/detail/type_list.hpp> -# include <boost/python/detail/type_traits.hpp> - -# include <boost/preprocessor/enum_params.hpp> -# include <boost/preprocessor/repeat.hpp> -# include <boost/preprocessor/facilities/intercept.hpp> -# include <boost/preprocessor/iteration/local.hpp> - -# include <boost/python/detail/mpl_lambda.hpp> -# include <boost/python/object_core.hpp> - -# include <boost/mpl/bool.hpp> - -# include <cstddef> -# include <algorithm> - -namespace boost { namespace python { - -typedef detail::keywords<1> arg; -typedef arg arg_; // gcc 2.96 workaround - -namespace detail -{ - template <std::size_t nkeywords> - struct keywords_base - { - BOOST_STATIC_CONSTANT(std::size_t, size = nkeywords); - - keyword_range range() const - { - return keyword_range(elements, elements + nkeywords); - } - - keyword elements[nkeywords]; - - keywords<nkeywords+1> - operator,(python::arg const &k) const; - - keywords<nkeywords + 1> - operator,(char const *name) const; - }; - - template <std::size_t nkeywords> - struct keywords : keywords_base<nkeywords> - { - }; - - template <> - struct keywords<1> : keywords_base<1> - { - explicit keywords(char const *name) - { - elements[0].name = name; - } - - template <class T> - python::arg& operator=(T const& value) - { - object z(value); - elements[0].default_value = handle<>(python::borrowed(object(value).ptr())); - return *this; - } - - operator detail::keyword const&() const - { - return elements[0]; - } - }; - - template <std::size_t nkeywords> - inline - keywords<nkeywords+1> - keywords_base<nkeywords>::operator,(python::arg const &k) const - { - keywords<nkeywords> const& l = *static_cast<keywords<nkeywords> const*>(this); - python::detail::keywords<nkeywords+1> res; - std::copy(l.elements, l.elements+nkeywords, res.elements); - res.elements[nkeywords] = k.elements[0]; - return res; - } - - template <std::size_t nkeywords> - inline - keywords<nkeywords + 1> - keywords_base<nkeywords>::operator,(char const *name) const - { - return this->operator,(python::arg(name)); - } - - template<typename T> - struct is_keywords - { - BOOST_STATIC_CONSTANT(bool, value = false); - }; - - template<std::size_t nkeywords> - struct is_keywords<keywords<nkeywords> > - { - BOOST_STATIC_CONSTANT(bool, value = true); - }; - template <class T> - struct is_reference_to_keywords - { - BOOST_STATIC_CONSTANT(bool, is_ref = detail::is_reference<T>::value); - typedef typename detail::remove_reference<T>::type deref; - typedef typename detail::remove_cv<deref>::type key_t; - BOOST_STATIC_CONSTANT(bool, is_key = is_keywords<key_t>::value); - BOOST_STATIC_CONSTANT(bool, value = (is_ref & is_key)); - - typedef mpl::bool_<value> type; - BOOST_PYTHON_MPL_LAMBDA_SUPPORT(1,is_reference_to_keywords,(T)) - }; -} - -inline detail::keywords<1> args(char const* name) -{ - return detail::keywords<1>(name); -} - -# define BOOST_PYTHON_ASSIGN_NAME(z, n, _) result.elements[n].name = name##n; -# define BOOST_PP_LOCAL_MACRO(n) \ -inline detail::keywords<n> args(BOOST_PP_ENUM_PARAMS_Z(1, n, char const* name)) \ -{ \ - detail::keywords<n> result; \ - BOOST_PP_REPEAT_1(n, BOOST_PYTHON_ASSIGN_NAME, _) \ - return result; \ -} -# define BOOST_PP_LOCAL_LIMITS (2, BOOST_PYTHON_MAX_ARITY) -# include BOOST_PP_LOCAL_ITERATE() - -}} // namespace boost::python - - -# endif // KEYWORDS_DWA2002323_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/args_fwd.hpp b/contrib/restricted/boost/python/include/boost/python/args_fwd.hpp deleted file mode 100644 index 39239461b0e..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/args_fwd.hpp +++ /dev/null @@ -1,52 +0,0 @@ -// 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 ARGS_FWD_DWA2002927_HPP -# define ARGS_FWD_DWA2002927_HPP - -# include <boost/python/detail/prefix.hpp> - -# include <boost/python/handle.hpp> -# include <boost/config.hpp> -# include <cstddef> -# include <utility> - -namespace boost { namespace python { - -namespace detail -{ - struct keyword - { - keyword(char const* name_=0) - : name(name_) - {} - - char const* name; - handle<> default_value; - }; - - template <std::size_t nkeywords = 0> struct keywords; - - typedef std::pair<keyword const*, keyword const*> keyword_range; - - template <> - struct keywords<0> - { - BOOST_STATIC_CONSTANT(std::size_t, size = 0); - static keyword_range range() { return keyword_range(); } - }; - - namespace error - { - template <int keywords, int function_args> - struct more_keywords_than_function_arguments - { - typedef char too_many_keywords[keywords > function_args ? -1 : 1]; - }; - } -} - -}} // namespace boost::python - -#endif // ARGS_FWD_DWA2002927_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/back_reference.hpp b/contrib/restricted/boost/python/include/boost/python/back_reference.hpp deleted file mode 100644 index e68066f7d5e..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/back_reference.hpp +++ /dev/null @@ -1,71 +0,0 @@ -// 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 BACK_REFERENCE_DWA2002510_HPP -# define BACK_REFERENCE_DWA2002510_HPP - -# include <boost/python/detail/prefix.hpp> - -# include <boost/python/object_fwd.hpp> -# include <boost/python/detail/dependent.hpp> -# include <boost/python/detail/raw_pyobject.hpp> - -namespace boost { namespace python { - -template <class T> -struct back_reference -{ - private: // types - typedef typename detail::dependent<object,T>::type source_t; - public: - typedef T type; - - back_reference(PyObject*, T); - source_t const& source() const; - T get() const; - private: - source_t m_source; - T m_value; -}; - -template<typename T> -class is_back_reference -{ - public: - BOOST_STATIC_CONSTANT(bool, value = false); -}; - -template<typename T> -class is_back_reference<back_reference<T> > -{ - public: - BOOST_STATIC_CONSTANT(bool, value = true); -}; - - -// -// implementations -// -template <class T> -back_reference<T>::back_reference(PyObject* p, T x) - : m_source(detail::borrowed_reference(p)) - , m_value(x) -{ -} - -template <class T> -typename back_reference<T>::source_t const& back_reference<T>::source() const -{ - return m_source; -} - -template <class T> -T back_reference<T>::get() const -{ - return m_value; -} - -}} // namespace boost::python - -#endif // BACK_REFERENCE_DWA2002510_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/base_type_traits.hpp b/contrib/restricted/boost/python/include/boost/python/base_type_traits.hpp deleted file mode 100644 index e1c6a4843f1..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/base_type_traits.hpp +++ /dev/null @@ -1,43 +0,0 @@ -// 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 BASE_TYPE_TRAITS_DWA2002614_HPP -# define BASE_TYPE_TRAITS_DWA2002614_HPP - -# include <boost/python/detail/prefix.hpp> - -namespace boost { namespace python { - -namespace detail -{ - struct unspecialized {}; -} - -// Derive from unspecialized so we can detect whether traits are -// specialized -template <class T> struct base_type_traits - : detail::unspecialized -{}; - -template <> -struct base_type_traits<PyObject> -{ - typedef PyObject type; -}; - -template <> -struct base_type_traits<PyTypeObject> -{ - typedef PyObject type; -}; - -template <> -struct base_type_traits<PyMethodObject> -{ - typedef PyObject type; -}; - -}} // namespace boost::python - -#endif // BASE_TYPE_TRAITS_DWA2002614_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/borrowed.hpp b/contrib/restricted/boost/python/include/boost/python/borrowed.hpp deleted file mode 100644 index fd2716bfbd8..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/borrowed.hpp +++ /dev/null @@ -1,21 +0,0 @@ -// 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 BORROWED_DWA2002614_HPP -# define BORROWED_DWA2002614_HPP - -# include <boost/python/detail/prefix.hpp> -# include <boost/python/detail/borrowed_ptr.hpp> - -namespace boost { namespace python { - -template <class T> -inline python::detail::borrowed<T>* borrowed(T* p) -{ - return (detail::borrowed<T>*)p; -} - -}} // namespace boost::python - -#endif // BORROWED_DWA2002614_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/call.hpp b/contrib/restricted/boost/python/include/boost/python/call.hpp deleted file mode 100644 index c057ee9a12f..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/call.hpp +++ /dev/null @@ -1,83 +0,0 @@ -#if !defined(BOOST_PP_IS_ITERATING) - -// 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 CALL_DWA2002411_HPP -# define CALL_DWA2002411_HPP - -# include <boost/python/detail/prefix.hpp> - -# include <boost/type.hpp> - -# include <boost/python/converter/arg_to_python.hpp> -# include <boost/python/converter/return_from_python.hpp> -# include <boost/python/detail/preprocessor.hpp> -# include <boost/python/detail/void_return.hpp> - -# include <boost/preprocessor/comma_if.hpp> -# include <boost/preprocessor/iterate.hpp> -# include <boost/preprocessor/repeat.hpp> -# include <boost/preprocessor/debug/line.hpp> -# include <boost/preprocessor/repetition/enum_trailing_params.hpp> -# include <boost/preprocessor/repetition/enum_binary_params.hpp> - -namespace boost { namespace python { - -# define BOOST_PYTHON_FAST_ARG_TO_PYTHON_GET(z, n, _) \ - , converter::arg_to_python<A##n>(a##n).get() - -# define BOOST_PP_ITERATION_PARAMS_1 (3, (0, BOOST_PYTHON_MAX_ARITY, <boost/python/call.hpp>)) -# include BOOST_PP_ITERATE() - -# undef BOOST_PYTHON_FAST_ARG_TO_PYTHON_GET - -}} // namespace boost::python - -# endif // CALL_DWA2002411_HPP - -// For gcc 4.4 compatability, we must include the -// BOOST_PP_ITERATION_DEPTH test inside an #else clause. -#else // BOOST_PP_IS_ITERATING -#if BOOST_PP_ITERATION_DEPTH() == 1 -# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \ - && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201))) -# line BOOST_PP_LINE(__LINE__, call.hpp) -# endif - -# define N BOOST_PP_ITERATION() - -template < - class R - BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, class A) - > -typename detail::returnable<R>::type -call(PyObject* callable - BOOST_PP_COMMA_IF(N) BOOST_PP_ENUM_BINARY_PARAMS_Z(1, N, A, const& a) - , boost::type<R>* = 0 - ) -{ - PyObject* const result = - PyObject_CallFunction( - callable - , const_cast<char*>("(" BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_FIXED, "O") ")") - BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_FAST_ARG_TO_PYTHON_GET, nil) - ); - - // This conversion *must not* be done in the same expression as - // the call, because, in the special case where the result is a - // reference a Python object which was created by converting a C++ - // argument for passing to PyObject_CallFunction, its reference - // count will be 2 until the end of the full expression containing - // the conversion, and that interferes with dangling - // pointer/reference detection. - converter::return_from_python<R> converter; - return converter(result); -} - -# undef N - -#endif // BOOST_PP_ITERATION_DEPTH() -#endif diff --git a/contrib/restricted/boost/python/include/boost/python/cast.hpp b/contrib/restricted/boost/python/include/boost/python/cast.hpp deleted file mode 100644 index c0dd229e845..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/cast.hpp +++ /dev/null @@ -1,105 +0,0 @@ -// 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 CAST_DWA200269_HPP -# define CAST_DWA200269_HPP - -# include <boost/python/detail/prefix.hpp> -# include <boost/python/detail/type_traits.hpp> - -# include <boost/type.hpp> -# include <boost/python/base_type_traits.hpp> -# include <boost/python/detail/convertible.hpp> - -namespace boost { namespace python { - -namespace detail -{ - template <class Source, class Target> inline Target* upcast_impl(Source*, Target*); - - template <class Source, class Target> - inline Target* upcast(Source* p, yes_convertible, no_convertible, Target*) - { - return p; - } - - template <class Source, class Target> - inline Target* upcast(Source* p, no_convertible, no_convertible, Target*) - { - typedef typename base_type_traits<Source>::type base; - - return detail::upcast_impl((base*)p, (Target*)0); - } - - template <bool is_same = true> - struct upcaster - { - template <class T> - static inline T* execute(T* x, T*) { return x; } - }; - - template <> - struct upcaster<false> - { - template <class Source, class Target> - static inline Target* execute(Source* x, Target*) - { - return detail::upcast( - x, detail::convertible<Target*>::check(x) - , detail::convertible<Source*>::check((Target*)0) - , (Target*)0); - } - }; - - - template <class Target, class Source> - inline Target* downcast(Source* p, yes_convertible) - { - return static_cast<Target*>(p); - } - - template <class Target, class Source> - inline Target* downcast(Source* p, no_convertible, boost::type<Target>* = 0) - { - typedef typename base_type_traits<Source>::type base; - return (Target*)detail::downcast<base>(p, convertible<Source*>::check((base*)0)); - } - - template <class T> - inline void assert_castable(boost::type<T>* = 0) - { - typedef char must_be_a_complete_type[sizeof(T)] BOOST_ATTRIBUTE_UNUSED; - } - - template <class Source, class Target> - inline Target* upcast_impl(Source* x, Target*) - { - typedef typename detail::add_cv<Source>::type src_t; - typedef typename detail::add_cv<Target>::type target_t; - bool const same = detail::is_same<src_t,target_t>::value; - - return detail::upcaster<same>::execute(x, (Target*)0); - } -} - -template <class Target, class Source> -inline Target* upcast(Source* x, Target* = 0) -{ - detail::assert_castable<Source>(); - detail::assert_castable<Target>(); - return detail::upcast_impl(x, (Target*)0); - -} - -template <class Target, class Source> -inline Target* downcast(Source* x, Target* = 0) -{ - detail::assert_castable<Source>(); - detail::assert_castable<Target>(); - return detail::downcast<Target>(x, detail::convertible<Source*>::check((Target*)0)); -} - -}} // namespace boost::python - -#endif // CAST_DWA200269_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/converter/arg_from_python.hpp b/contrib/restricted/boost/python/include/boost/python/converter/arg_from_python.hpp deleted file mode 100644 index 0c0daabc1fe..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/converter/arg_from_python.hpp +++ /dev/null @@ -1,335 +0,0 @@ -// 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 ARG_FROM_PYTHON_DWA2002127_HPP -# define ARG_FROM_PYTHON_DWA2002127_HPP - -# include <boost/python/detail/prefix.hpp> -# include <boost/python/converter/from_python.hpp> -# include <boost/python/detail/indirect_traits.hpp> -# include <boost/python/detail/type_traits.hpp> -# include <boost/python/converter/rvalue_from_python_data.hpp> -# include <boost/mpl/eval_if.hpp> -# include <boost/mpl/if.hpp> -# include <boost/mpl/identity.hpp> -# include <boost/mpl/and.hpp> -# include <boost/mpl/or.hpp> -# include <boost/mpl/not.hpp> -# include <boost/python/converter/registry.hpp> -# include <boost/python/converter/registered.hpp> -# include <boost/python/converter/registered_pointee.hpp> -# include <boost/python/detail/void_ptr.hpp> -# include <boost/python/back_reference.hpp> -# include <boost/python/detail/referent_storage.hpp> -# include <boost/python/converter/obj_mgr_arg_from_python.hpp> - -namespace boost { namespace python -{ - template <class T> struct arg_from_python; -}} - -// This header defines Python->C++ function argument converters, -// parametrized on the argument type. - -namespace boost { namespace python { namespace converter { - -// -// lvalue converters -// -// These require that an lvalue of the type U is stored somewhere in -// the Python object being converted. - -// Used when T == U*const& -template <class T> -struct pointer_cref_arg_from_python -{ - typedef T result_type; - - pointer_cref_arg_from_python(PyObject*); - T operator()() const; - bool convertible() const; - - private: // storage for a U* - // needed because not all compilers will let us declare U* as the - // return type of operator() -- we return U*const& instead - typename python::detail::referent_storage<T>::type m_result; -}; - -// Base class for pointer and reference converters -struct arg_lvalue_from_python_base -{ - public: // member functions - arg_lvalue_from_python_base(void* result); - bool convertible() const; - - protected: // member functions - void*const& result() const; - - private: // data members - void* m_result; -}; - -// Used when T == U* -template <class T> -struct pointer_arg_from_python : arg_lvalue_from_python_base -{ - typedef T result_type; - - pointer_arg_from_python(PyObject*); - T operator()() const; -}; - -// Used when T == U& and (T != V const& or T == W volatile&) -template <class T> -struct reference_arg_from_python : arg_lvalue_from_python_base -{ - typedef T result_type; - - reference_arg_from_python(PyObject*); - T operator()() const; -}; - -// =================== - -// -// rvalue converters -// -// These require only that an object of type T can be created from -// the given Python object, but not that the T object exist -// somewhere in storage. -// - -// Used when T is a plain value (non-pointer, non-reference) type or -// a (non-volatile) const reference to a plain value type. -template <class T> -struct arg_rvalue_from_python -{ - typedef typename boost::python::detail::add_lvalue_reference< - T - // We can't add_const here, or it would be impossible to pass - // auto_ptr<U> args from Python to C++ - >::type result_type; - - arg_rvalue_from_python(PyObject*); - bool convertible() const; - -# if _MSC_FULL_VER > 13102196 - typename arg_rvalue_from_python<T>:: -# endif - result_type operator()(); - - private: - rvalue_from_python_data<result_type> m_data; - PyObject* m_source; -}; - - -// ================== - -// Converts to a (PyObject*,T) bundle, for when you need a reference -// back to the Python object -template <class T> -struct back_reference_arg_from_python - : boost::python::arg_from_python<typename T::type> -{ - typedef T result_type; - - back_reference_arg_from_python(PyObject*); - T operator()(); - private: - typedef boost::python::arg_from_python<typename T::type> base; - PyObject* m_source; -}; - - -// ================== - -template <class C, class T, class F> -struct if_2 -{ - typedef typename mpl::eval_if<C, mpl::identity<T>, F>::type type; -}; - -// This metafunction selects the appropriate arg_from_python converter -// type for an argument of type T. -template <class T> -struct select_arg_from_python -{ - typedef typename if_2< - is_object_manager<T> - , object_manager_value_arg_from_python<T> - , if_2< - is_reference_to_object_manager<T> - , object_manager_ref_arg_from_python<T> - , if_2< - is_pointer<T> - , pointer_arg_from_python<T> - , if_2< - mpl::and_< - indirect_traits::is_reference_to_pointer<T> - , indirect_traits::is_reference_to_const<T> - , mpl::not_<indirect_traits::is_reference_to_volatile<T> > - > - , pointer_cref_arg_from_python<T> - , if_2< - mpl::or_< - indirect_traits::is_reference_to_non_const<T> - , indirect_traits::is_reference_to_volatile<T> - > - , reference_arg_from_python<T> - , mpl::if_< - boost::python::is_back_reference<T> - , back_reference_arg_from_python<T> - , arg_rvalue_from_python<T> - > - > - > - > - > - >::type type; -}; - -// ================== - -// -// implementations -// - -// arg_lvalue_from_python_base -// -inline arg_lvalue_from_python_base::arg_lvalue_from_python_base(void* result) - : m_result(result) -{ -} - -inline bool arg_lvalue_from_python_base::convertible() const -{ - return m_result != 0; -} - -inline void*const& arg_lvalue_from_python_base::result() const -{ - return m_result; -} - -// pointer_cref_arg_from_python -// -namespace detail -{ - // null_ptr_reference -- a function returning a reference to a null - // pointer of type U. Needed so that extractors for T*const& can - // convert Python's None. - template <class T> - struct null_ptr_owner - { - static T value; - }; - template <class T> T null_ptr_owner<T>::value = 0; - - template <class U> - inline U& null_ptr_reference(U&(*)()) - { - return null_ptr_owner<U>::value; - } -} - -template <class T> -inline pointer_cref_arg_from_python<T>::pointer_cref_arg_from_python(PyObject* p) -{ - // T == U*const&: store a U* in the m_result storage. Nonzero - // indicates success. If find returns nonzero, it's a pointer to - // a U object. - python::detail::write_void_ptr_reference( - m_result.bytes - , p == Py_None ? p : converter::get_lvalue_from_python(p, registered_pointee<T>::converters) - , (T(*)())0); -} - -template <class T> -inline bool pointer_cref_arg_from_python<T>::convertible() const -{ - return python::detail::void_ptr_to_reference(m_result.bytes, (T(*)())0) != 0; -} -template <class T> -inline T pointer_cref_arg_from_python<T>::operator()() const -{ - return (*(void**)m_result.bytes == Py_None) // None ==> 0 - ? detail::null_ptr_reference((T(*)())0) - // Otherwise, return a U*const& to the m_result storage. - : python::detail::void_ptr_to_reference(m_result.bytes, (T(*)())0); -} - -// pointer_arg_from_python -// -template <class T> -inline pointer_arg_from_python<T>::pointer_arg_from_python(PyObject* p) - : arg_lvalue_from_python_base( - p == Py_None ? p : converter::get_lvalue_from_python(p, registered_pointee<T>::converters)) -{ -} - -template <class T> -inline T pointer_arg_from_python<T>::operator()() const -{ - return (result() == Py_None) ? 0 : T(result()); -} - -// reference_arg_from_python -// -template <class T> -inline reference_arg_from_python<T>::reference_arg_from_python(PyObject* p) - : arg_lvalue_from_python_base(converter::get_lvalue_from_python(p,registered<T>::converters)) -{ -} - -template <class T> -inline T reference_arg_from_python<T>::operator()() const -{ - return python::detail::void_ptr_to_reference(result(), (T(*)())0); -} - - -// arg_rvalue_from_python -// -template <class T> -inline arg_rvalue_from_python<T>::arg_rvalue_from_python(PyObject* obj) - : m_data(converter::rvalue_from_python_stage1(obj, registered<T>::converters)) - , m_source(obj) -{ -} - -template <class T> -inline bool arg_rvalue_from_python<T>::convertible() const -{ - return m_data.stage1.convertible != 0; -} - -template <class T> -inline typename arg_rvalue_from_python<T>::result_type -arg_rvalue_from_python<T>::operator()() -{ - if (m_data.stage1.construct != 0) - m_data.stage1.construct(m_source, &m_data.stage1); - - return python::detail::void_ptr_to_reference(m_data.stage1.convertible, (result_type(*)())0); -} - -// back_reference_arg_from_python -// -template <class T> -back_reference_arg_from_python<T>::back_reference_arg_from_python(PyObject* x) - : base(x), m_source(x) -{ -} - -template <class T> -inline T -back_reference_arg_from_python<T>::operator()() -{ - return T(m_source, base::operator()()); -} - -}}} // namespace boost::python::converter - -#endif // ARG_FROM_PYTHON_DWA2002127_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/converter/arg_to_python.hpp b/contrib/restricted/boost/python/include/boost/python/converter/arg_to_python.hpp deleted file mode 100644 index bbecae72e59..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/converter/arg_to_python.hpp +++ /dev/null @@ -1,257 +0,0 @@ -// 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 ARG_TO_PYTHON_DWA200265_HPP -# define ARG_TO_PYTHON_DWA200265_HPP - -# include <boost/python/ptr.hpp> -# include <boost/python/tag.hpp> -# include <boost/python/to_python_indirect.hpp> - -# include <boost/python/converter/registered.hpp> -# include <boost/python/converter/registered_pointee.hpp> -# include <boost/python/converter/arg_to_python_base.hpp> -# include <boost/python/converter/shared_ptr_to_python.hpp> -// Bring in specializations -# include <boost/python/converter/builtin_converters.hpp> - -# include <boost/python/object/function_handle.hpp> - -# include <boost/python/base_type_traits.hpp> - -# include <boost/python/detail/indirect_traits.hpp> -# include <boost/python/detail/convertible.hpp> -# include <boost/python/detail/string_literal.hpp> -# include <boost/python/detail/value_is_shared_ptr.hpp> -# include <boost/python/detail/type_traits.hpp> - -# include <boost/mpl/or.hpp> - -namespace boost { namespace python { namespace converter { - -template <class T> struct is_object_manager; - -namespace detail -{ - template <class T> - struct function_arg_to_python : handle<> - { - function_arg_to_python(T const& x); - }; - - template <class T> - struct reference_arg_to_python : handle<> - { - reference_arg_to_python(T& x); - private: - static PyObject* get_object(T& x); - }; - - template <class T> - struct shared_ptr_arg_to_python : handle<> - { - shared_ptr_arg_to_python(T const& x); - private: - static PyObject* get_object(T& x); - }; - - template <class T> - struct value_arg_to_python : arg_to_python_base - { - // Throw an exception if the conversion can't succeed - value_arg_to_python(T const&); - }; - - template <class Ptr> - struct pointer_deep_arg_to_python : arg_to_python_base - { - // Throw an exception if the conversion can't succeed - pointer_deep_arg_to_python(Ptr); - }; - - template <class Ptr> - struct pointer_shallow_arg_to_python : handle<> - { - // Throw an exception if the conversion can't succeed - pointer_shallow_arg_to_python(Ptr); - private: - static PyObject* get_object(Ptr p); - }; - - // Convert types that manage a Python object to_python - template <class T> - struct object_manager_arg_to_python - { - object_manager_arg_to_python(T const& x) : m_src(x) {} - - PyObject* get() const - { - return python::upcast<PyObject>(get_managed_object(m_src, tag)); - } - - private: - T const& m_src; - }; - - template <class T> - struct select_arg_to_python - { - typedef typename unwrap_reference<T>::type unwrapped_referent; - typedef typename unwrap_pointer<T>::type unwrapped_ptr; - - typedef typename mpl::if_< - // Special handling for char const[N]; interpret them as char - // const* for the sake of conversion - python::detail::is_string_literal<T const> - , arg_to_python<char const*> - - , typename mpl::if_< - python::detail::value_is_shared_ptr<T> - , shared_ptr_arg_to_python<T> - - , typename mpl::if_< - mpl::or_< - boost::python::detail::is_function<T> - , indirect_traits::is_pointer_to_function<T> - , boost::python::detail::is_member_function_pointer<T> - > - , function_arg_to_python<T> - - , typename mpl::if_< - is_object_manager<T> - , object_manager_arg_to_python<T> - - , typename mpl::if_< - boost::python::detail::is_pointer<T> - , pointer_deep_arg_to_python<T> - - , typename mpl::if_< - is_pointer_wrapper<T> - , pointer_shallow_arg_to_python<unwrapped_ptr> - - , typename mpl::if_< - is_reference_wrapper<T> - , reference_arg_to_python<unwrapped_referent> - , value_arg_to_python<T> - >::type - >::type - >::type - >::type - >::type - >::type - >::type - - type; - }; -} - -template <class T> -struct arg_to_python - : detail::select_arg_to_python<T>::type -{ - typedef typename detail::select_arg_to_python<T>::type base; - public: // member functions - // Throw an exception if the conversion can't succeed - arg_to_python(T const& x); -}; - -// -// implementations -// -namespace detail -{ - // reject_raw_object_ptr -- cause a compile-time error if the user - // should pass a raw Python object pointer - using python::detail::yes_convertible; - using python::detail::no_convertible; - using python::detail::unspecialized; - - template <class T> struct cannot_convert_raw_PyObject; - - template <class T, class Convertibility> - struct reject_raw_object_helper - { - static void error(Convertibility) - { - cannot_convert_raw_PyObject<T*>::to_python_use_handle_instead(); - } - static void error(...) {} - }; - - template <class T> - inline void reject_raw_object_ptr(T*) - { - reject_raw_object_helper<T,yes_convertible>::error( - python::detail::convertible<PyObject const volatile*>::check((T*)0)); - - typedef typename remove_cv<T>::type value_type; - - reject_raw_object_helper<T,no_convertible>::error( - python::detail::convertible<unspecialized*>::check( - (base_type_traits<value_type>*)0 - )); - } - // --------- - - template <class T> - inline function_arg_to_python<T>::function_arg_to_python(T const& x) - : handle<>(python::objects::make_function_handle(x)) - { - } - - template <class T> - inline value_arg_to_python<T>::value_arg_to_python(T const& x) - : arg_to_python_base(&x, registered<T>::converters) - { - } - - template <class Ptr> - inline pointer_deep_arg_to_python<Ptr>::pointer_deep_arg_to_python(Ptr x) - : arg_to_python_base(x, registered_pointee<Ptr>::converters) - { - detail::reject_raw_object_ptr((Ptr)0); - } - - template <class T> - inline PyObject* reference_arg_to_python<T>::get_object(T& x) - { - to_python_indirect<T&,python::detail::make_reference_holder> convert; - return convert(x); - } - - template <class T> - inline reference_arg_to_python<T>::reference_arg_to_python(T& x) - : handle<>(reference_arg_to_python<T>::get_object(x)) - { - } - - template <class T> - inline shared_ptr_arg_to_python<T>::shared_ptr_arg_to_python(T const& x) - : handle<>(shared_ptr_to_python(x)) - { - } - - template <class Ptr> - inline pointer_shallow_arg_to_python<Ptr>::pointer_shallow_arg_to_python(Ptr x) - : handle<>(pointer_shallow_arg_to_python<Ptr>::get_object(x)) - { - detail::reject_raw_object_ptr((Ptr)0); - } - - template <class Ptr> - inline PyObject* pointer_shallow_arg_to_python<Ptr>::get_object(Ptr x) - { - to_python_indirect<Ptr,python::detail::make_reference_holder> convert; - return convert(x); - } -} - -template <class T> -inline arg_to_python<T>::arg_to_python(T const& x) - : base(x) -{} - -}}} // namespace boost::python::converter - -#endif // ARG_TO_PYTHON_DWA200265_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/converter/arg_to_python_base.hpp b/contrib/restricted/boost/python/include/boost/python/converter/arg_to_python_base.hpp deleted file mode 100644 index c66ce9c3e01..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/converter/arg_to_python_base.hpp +++ /dev/null @@ -1,24 +0,0 @@ -// 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 ARG_TO_PYTHON_BASE_DWA200237_HPP -# define ARG_TO_PYTHON_BASE_DWA200237_HPP -# include <boost/python/handle.hpp> - -namespace boost { namespace python { namespace converter { - -struct registration; - -namespace detail -{ - struct BOOST_PYTHON_DECL arg_to_python_base - : handle<> - { - arg_to_python_base(void const volatile* source, registration const&); - }; -} - -}}} // namespace boost::python::converter - -#endif // ARG_TO_PYTHON_BASE_DWA200237_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/converter/builtin_converters.hpp b/contrib/restricted/boost/python/include/boost/python/converter/builtin_converters.hpp deleted file mode 100644 index c2e01c03d39..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/converter/builtin_converters.hpp +++ /dev/null @@ -1,190 +0,0 @@ -// 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 BUILTIN_CONVERTERS_DWA2002124_HPP -# define BUILTIN_CONVERTERS_DWA2002124_HPP -# include <boost/python/detail/prefix.hpp> -# include <boost/python/detail/none.hpp> -# include <boost/python/handle.hpp> -# include <boost/python/ssize_t.hpp> -# include <boost/implicit_cast.hpp> -# include <string> -# include <complex> -# include <boost/limits.hpp> - -// Since all we can use to decide how to convert an object to_python -// is its C++ type, there can be only one such converter for each -// type. Therefore, for built-in conversions we can bypass registry -// lookups using explicit specializations of arg_to_python and -// result_to_python. - -namespace boost { namespace python { - -namespace converter -{ - template <class T> struct arg_to_python; - BOOST_PYTHON_DECL PyObject* do_return_to_python(char); - BOOST_PYTHON_DECL PyObject* do_return_to_python(char const*); - BOOST_PYTHON_DECL PyObject* do_return_to_python(PyObject*); - BOOST_PYTHON_DECL PyObject* do_arg_to_python(PyObject*); -} - -// Provide specializations of to_python_value -template <class T> struct to_python_value; - -namespace detail -{ - // Since there's no registry lookup, always report the existence of - // a converter. - struct builtin_to_python - { - // This information helps make_getter() decide whether to try to - // return an internal reference or not. I don't like it much, - // but it will have to serve for now. - BOOST_STATIC_CONSTANT(bool, uses_registry = false); - }; -} - -// Use expr to create the PyObject corresponding to x -# define BOOST_PYTHON_RETURN_TO_PYTHON_BY_VALUE(T, expr, pytype)\ - template <> struct to_python_value<T&> \ - : detail::builtin_to_python \ - { \ - inline PyObject* operator()(T const& x) const \ - { \ - return (expr); \ - } \ - inline PyTypeObject const* get_pytype() const \ - { \ - return (pytype); \ - } \ - }; \ - template <> struct to_python_value<T const&> \ - : detail::builtin_to_python \ - { \ - inline PyObject* operator()(T const& x) const \ - { \ - return (expr); \ - } \ - inline PyTypeObject const* get_pytype() const \ - { \ - return (pytype); \ - } \ - }; - -# define BOOST_PYTHON_ARG_TO_PYTHON_BY_VALUE(T, expr) \ - namespace converter \ - { \ - template <> struct arg_to_python< T > \ - : handle<> \ - { \ - arg_to_python(T const& x) \ - : python::handle<>(expr) {} \ - }; \ - } - -// Specialize argument and return value converters for T using expr -# define BOOST_PYTHON_TO_PYTHON_BY_VALUE(T, expr, pytype) \ - BOOST_PYTHON_RETURN_TO_PYTHON_BY_VALUE(T,expr, pytype) \ - BOOST_PYTHON_ARG_TO_PYTHON_BY_VALUE(T,expr) - -// Specialize converters for signed and unsigned T to Python Int -#if PY_VERSION_HEX >= 0x03000000 - -# define BOOST_PYTHON_TO_INT(T) \ - BOOST_PYTHON_TO_PYTHON_BY_VALUE(signed T, ::PyLong_FromLong(x), &PyLong_Type) \ - BOOST_PYTHON_TO_PYTHON_BY_VALUE(unsigned T, ::PyLong_FromUnsignedLong(x), &PyLong_Type) - -#else - -# define BOOST_PYTHON_TO_INT(T) \ - BOOST_PYTHON_TO_PYTHON_BY_VALUE(signed T, ::PyInt_FromLong(x), &PyInt_Type) \ - BOOST_PYTHON_TO_PYTHON_BY_VALUE( \ - unsigned T \ - , static_cast<unsigned long>(x) > static_cast<unsigned long>( \ - (std::numeric_limits<long>::max)()) \ - ? ::PyLong_FromUnsignedLong(x) \ - : ::PyInt_FromLong(x), &PyInt_Type) -#endif - -// Bool is not signed. -#if PY_VERSION_HEX >= 0x02030000 -BOOST_PYTHON_TO_PYTHON_BY_VALUE(bool, ::PyBool_FromLong(x), &PyBool_Type) -#else -BOOST_PYTHON_TO_PYTHON_BY_VALUE(bool, ::PyInt_FromLong(x), &PyInt_Type) -#endif - -// note: handles signed char and unsigned char, but not char (see below) -BOOST_PYTHON_TO_INT(char) - -BOOST_PYTHON_TO_INT(short) -BOOST_PYTHON_TO_INT(int) -BOOST_PYTHON_TO_INT(long) - -# if defined(_MSC_VER) && defined(_WIN64) && PY_VERSION_HEX < 0x03000000 -/* Under 64-bit Windows std::size_t is "unsigned long long". To avoid - getting a Python long for each std::size_t the value is checked before - the conversion. A std::size_t is converted to a simple Python int - if possible; a Python long appears only if the value is too small or - too large to fit into a simple int. */ -BOOST_PYTHON_TO_PYTHON_BY_VALUE( - signed BOOST_PYTHON_LONG_LONG, - ( x < static_cast<signed BOOST_PYTHON_LONG_LONG>( - (std::numeric_limits<long>::min)()) - || x > static_cast<signed BOOST_PYTHON_LONG_LONG>( - (std::numeric_limits<long>::max)())) - ? ::PyLong_FromLongLong(x) - : ::PyInt_FromLong(static_cast<long>(x)), &PyInt_Type) -BOOST_PYTHON_TO_PYTHON_BY_VALUE( - unsigned BOOST_PYTHON_LONG_LONG, - x > static_cast<unsigned BOOST_PYTHON_LONG_LONG>( - (std::numeric_limits<long>::max)()) - ? ::PyLong_FromUnsignedLongLong(x) - : ::PyInt_FromLong(static_cast<long>(x)), &PyInt_Type) -// -# elif defined(HAVE_LONG_LONG) // using Python's macro instead of Boost's - // - we don't seem to get the config right - // all the time. -BOOST_PYTHON_TO_PYTHON_BY_VALUE(signed BOOST_PYTHON_LONG_LONG, ::PyLong_FromLongLong(x), &PyLong_Type) -BOOST_PYTHON_TO_PYTHON_BY_VALUE(unsigned BOOST_PYTHON_LONG_LONG, ::PyLong_FromUnsignedLongLong(x), &PyLong_Type) -# endif - -# undef BOOST_TO_PYTHON_INT - -#if PY_VERSION_HEX >= 0x03000000 -BOOST_PYTHON_TO_PYTHON_BY_VALUE(char, converter::do_return_to_python(x), &PyUnicode_Type) -BOOST_PYTHON_TO_PYTHON_BY_VALUE(char const*, converter::do_return_to_python(x), &PyUnicode_Type) -BOOST_PYTHON_TO_PYTHON_BY_VALUE(std::string, ::PyUnicode_FromStringAndSize(x.data(),implicit_cast<ssize_t>(x.size())), &PyUnicode_Type) -#else -BOOST_PYTHON_TO_PYTHON_BY_VALUE(char, converter::do_return_to_python(x), &PyString_Type) -BOOST_PYTHON_TO_PYTHON_BY_VALUE(char const*, converter::do_return_to_python(x), &PyString_Type) -BOOST_PYTHON_TO_PYTHON_BY_VALUE(std::string, ::PyString_FromStringAndSize(x.data(),implicit_cast<ssize_t>(x.size())), &PyString_Type) -#endif - -#if defined(Py_USING_UNICODE) && !defined(BOOST_NO_STD_WSTRING) -BOOST_PYTHON_TO_PYTHON_BY_VALUE(std::wstring, ::PyUnicode_FromWideChar(x.data(),implicit_cast<ssize_t>(x.size())), &PyUnicode_Type) -# endif -BOOST_PYTHON_TO_PYTHON_BY_VALUE(float, ::PyFloat_FromDouble(x), &PyFloat_Type) -BOOST_PYTHON_TO_PYTHON_BY_VALUE(double, ::PyFloat_FromDouble(x), &PyFloat_Type) -BOOST_PYTHON_TO_PYTHON_BY_VALUE(long double, ::PyFloat_FromDouble(x), &PyFloat_Type) -BOOST_PYTHON_RETURN_TO_PYTHON_BY_VALUE(PyObject*, converter::do_return_to_python(x), 0) -BOOST_PYTHON_TO_PYTHON_BY_VALUE(std::complex<float>, ::PyComplex_FromDoubles(x.real(), x.imag()), &PyComplex_Type) -BOOST_PYTHON_TO_PYTHON_BY_VALUE(std::complex<double>, ::PyComplex_FromDoubles(x.real(), x.imag()), &PyComplex_Type) -BOOST_PYTHON_TO_PYTHON_BY_VALUE(std::complex<long double>, ::PyComplex_FromDoubles(x.real(), x.imag()), &PyComplex_Type) - -# undef BOOST_PYTHON_RETURN_TO_PYTHON_BY_VALUE -# undef BOOST_PYTHON_ARG_TO_PYTHON_BY_VALUE -# undef BOOST_PYTHON_TO_PYTHON_BY_VALUE -# undef BOOST_PYTHON_TO_INT - -namespace converter -{ - - void initialize_builtin_converters(); - -} - -}} // namespace boost::python::converter - -#endif // BUILTIN_CONVERTERS_DWA2002124_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/converter/constructor_function.hpp b/contrib/restricted/boost/python/include/boost/python/converter/constructor_function.hpp deleted file mode 100644 index 814aa7d7632..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/converter/constructor_function.hpp +++ /dev/null @@ -1,17 +0,0 @@ -// 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 CONSTRUCTOR_FUNCTION_DWA200278_HPP -# define CONSTRUCTOR_FUNCTION_DWA200278_HPP - -namespace boost { namespace python { namespace converter { - -// Declares the type of functions used to construct C++ objects for -// rvalue from_python conversions. -struct rvalue_from_python_stage1_data; -typedef void (*constructor_function)(PyObject* source, rvalue_from_python_stage1_data*); - -}}} // namespace boost::python::converter - -#endif // CONSTRUCTOR_FUNCTION_DWA200278_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/converter/context_result_converter.hpp b/contrib/restricted/boost/python/include/boost/python/converter/context_result_converter.hpp deleted file mode 100644 index beb7e9f0980..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/converter/context_result_converter.hpp +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright David Abrahams 2003. -// 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 CONTEXT_RESULT_CONVERTER_DWA2003917_HPP -# define CONTEXT_RESULT_CONVERTER_DWA2003917_HPP - -namespace boost { namespace python { namespace converter { - -// A ResultConverter base class used to indicate that this result -// converter should be constructed with the original Python argument -// list. -struct context_result_converter {}; - -}}} // namespace boost::python::converter - -#endif // CONTEXT_RESULT_CONVERTER_DWA2003917_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/converter/convertible_function.hpp b/contrib/restricted/boost/python/include/boost/python/converter/convertible_function.hpp deleted file mode 100644 index 4b29fbb00b4..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/converter/convertible_function.hpp +++ /dev/null @@ -1,14 +0,0 @@ -// 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 CONVERTIBLE_FUNCTION_DWA200278_HPP -# define CONVERTIBLE_FUNCTION_DWA200278_HPP - -namespace boost { namespace python { namespace converter { - -typedef void* (*convertible_function)(PyObject*); - -}}} // namespace boost::python::converter - -#endif // CONVERTIBLE_FUNCTION_DWA200278_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/converter/from_python.hpp b/contrib/restricted/boost/python/include/boost/python/converter/from_python.hpp deleted file mode 100644 index b2f24b3519d..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/converter/from_python.hpp +++ /dev/null @@ -1,41 +0,0 @@ -// 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 FIND_FROM_PYTHON_DWA2002223_HPP -# define FIND_FROM_PYTHON_DWA2002223_HPP - -# include <boost/python/detail/prefix.hpp> -# include <boost/python/converter/rvalue_from_python_data.hpp> - -namespace boost { namespace python { namespace converter { - -struct registration; - - -BOOST_PYTHON_DECL void* get_lvalue_from_python( - PyObject* source, registration const&); - -BOOST_PYTHON_DECL bool implicit_rvalue_convertible_from_python( - PyObject* source, registration const&); - -BOOST_PYTHON_DECL rvalue_from_python_stage1_data rvalue_from_python_stage1( - PyObject* source, registration const&); - -BOOST_PYTHON_DECL void* rvalue_from_python_stage2( - PyObject* source, rvalue_from_python_stage1_data&, registration const&); - -BOOST_PYTHON_DECL void* rvalue_result_from_python( - PyObject*, rvalue_from_python_stage1_data&); - -BOOST_PYTHON_DECL void* reference_result_from_python(PyObject*, registration const&); -BOOST_PYTHON_DECL void* pointer_result_from_python(PyObject*, registration const&); - -BOOST_PYTHON_DECL void void_result_from_python(PyObject*); - -BOOST_PYTHON_DECL void throw_no_pointer_from_python(PyObject*, registration const&); -BOOST_PYTHON_DECL void throw_no_reference_from_python(PyObject*, registration const&); - -}}} // namespace boost::python::converter - -#endif // FIND_FROM_PYTHON_DWA2002223_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/converter/obj_mgr_arg_from_python.hpp b/contrib/restricted/boost/python/include/boost/python/converter/obj_mgr_arg_from_python.hpp deleted file mode 100644 index 51328040820..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/converter/obj_mgr_arg_from_python.hpp +++ /dev/null @@ -1,121 +0,0 @@ -// 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 OBJ_MGR_ARG_FROM_PYTHON_DWA2002628_HPP -# define OBJ_MGR_ARG_FROM_PYTHON_DWA2002628_HPP - -# include <boost/python/detail/prefix.hpp> -# include <boost/python/detail/referent_storage.hpp> -# include <boost/python/detail/destroy.hpp> -# include <boost/python/detail/construct.hpp> -# include <boost/python/converter/object_manager.hpp> -# include <boost/python/detail/raw_pyobject.hpp> -# include <boost/python/tag.hpp> - -// -// arg_from_python converters for Python type wrappers, to be used as -// base classes for specializations. -// -namespace boost { namespace python { namespace converter { - -template <class T> -struct object_manager_value_arg_from_python -{ - typedef T result_type; - - object_manager_value_arg_from_python(PyObject*); - bool convertible() const; - T operator()() const; - private: - PyObject* m_source; -}; - -// Used for converting reference-to-object-manager arguments from -// python. The process used here is a little bit odd. Upon -// construction, we build the object manager object in the m_result -// object, *forcing* it to accept the source Python object by casting -// its pointer to detail::borrowed_reference. This is supposed to -// bypass any type checking of the source object. The convertible -// check then extracts the owned object and checks it. If the check -// fails, nothing else in the program ever gets to touch this strange -// "forced" object. -template <class Ref> -struct object_manager_ref_arg_from_python -{ - typedef Ref result_type; - - object_manager_ref_arg_from_python(PyObject*); - bool convertible() const; - Ref operator()() const; - ~object_manager_ref_arg_from_python(); - private: - typename python::detail::referent_storage<Ref>::type m_result; -}; - -// -// implementations -// - -template <class T> -inline object_manager_value_arg_from_python<T>::object_manager_value_arg_from_python(PyObject* x) - : m_source(x) -{ -} - -template <class T> -inline bool object_manager_value_arg_from_python<T>::convertible() const -{ - return object_manager_traits<T>::check(m_source); -} - -template <class T> -inline T object_manager_value_arg_from_python<T>::operator()() const -{ - return T(python::detail::borrowed_reference(m_source)); -} - -template <class Ref> -inline object_manager_ref_arg_from_python<Ref>::object_manager_ref_arg_from_python(PyObject* x) -{ -# if defined(__EDG_VERSION__) && __EDG_VERSION__ <= 243 - // needed for warning suppression - python::detail::borrowed_reference x_ = python::detail::borrowed_reference(x); - python::detail::construct_referent<Ref>(m_result.bytes, x_); -# else - python::detail::construct_referent<Ref>(m_result.bytes, (python::detail::borrowed_reference)x); -# endif -} - -template <class Ref> -inline object_manager_ref_arg_from_python<Ref>::~object_manager_ref_arg_from_python() -{ - python::detail::destroy_referent<Ref>(this->m_result.bytes); -} - -namespace detail -{ - template <class T> - inline bool object_manager_ref_check(T const& x) - { - return object_manager_traits<T>::check(get_managed_object(x, tag)); - } -} - -template <class Ref> -inline bool object_manager_ref_arg_from_python<Ref>::convertible() const -{ - return detail::object_manager_ref_check( - python::detail::void_ptr_to_reference(this->m_result.bytes, (Ref(*)())0)); -} - -template <class Ref> -inline Ref object_manager_ref_arg_from_python<Ref>::operator()() const -{ - return python::detail::void_ptr_to_reference( - this->m_result.bytes, (Ref(*)())0); -} - -}}} // namespace boost::python::converter - -#endif // OBJ_MGR_ARG_FROM_PYTHON_DWA2002628_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/converter/object_manager.hpp b/contrib/restricted/boost/python/include/boost/python/converter/object_manager.hpp deleted file mode 100644 index b2271a7ea28..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/converter/object_manager.hpp +++ /dev/null @@ -1,156 +0,0 @@ -// 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_MANAGER_DWA2002614_HPP -# define OBJECT_MANAGER_DWA2002614_HPP - -# include <boost/python/handle.hpp> -# include <boost/python/cast.hpp> -# include <boost/python/converter/pyobject_traits.hpp> -# include <boost/python/detail/type_traits.hpp> -# include <boost/mpl/if.hpp> -# include <boost/python/detail/indirect_traits.hpp> -# include <boost/mpl/bool.hpp> - -// Facilities for dealing with types which always manage Python -// objects. Some examples are object, list, str, et. al. Different -// to_python/from_python conversion rules apply here because in -// contrast to other types which are typically embedded inside a -// Python object, these are wrapped around a Python object. For most -// object managers T, a C++ non-const T reference argument does not -// imply the existence of a T lvalue embedded in the corresponding -// Python argument, since mutating member functions on T actually only -// modify the held Python object. -// -// handle<T> is an object manager, though strictly speaking it should -// not be. In other words, even though mutating member functions of -// hanlde<T> actually modify the handle<T> and not the T object, -// handle<T>& arguments of wrapped functions will bind to "rvalues" -// wrapping the actual Python argument, just as with other object -// manager classes. Making an exception for handle<T> is simply not -// worth the trouble. -// -// borrowed<T> cv* is an object manager so that we can use the general -// to_python mechanisms to convert raw Python object pointers to -// python, without the usual semantic problems of using raw pointers. - - -// Object Manager Concept requirements: -// -// T is an Object Manager -// p is a PyObject* -// x is a T -// -// * object_manager_traits<T>::is_specialized == true -// -// * T(detail::borrowed_reference(p)) -// Manages p without checking its type -// -// * get_managed_object(x, boost::python::tag) -// Convertible to PyObject* -// -// Additional requirements if T can be converted from_python: -// -// * T(object_manager_traits<T>::adopt(p)) -// steals a reference to p, or throws a TypeError exception if -// p doesn't have an appropriate type. May assume p is non-null -// -// * X::check(p) -// convertible to bool. True iff T(X::construct(p)) will not -// throw. - -// Forward declarations -// -namespace boost { namespace python -{ - namespace api - { - class object; - } -}} - -namespace boost { namespace python { namespace converter { - - -// Specializations for handle<T> -template <class T> -struct handle_object_manager_traits - : pyobject_traits<typename T::element_type> -{ - private: - typedef pyobject_traits<typename T::element_type> base; - - public: - BOOST_STATIC_CONSTANT(bool, is_specialized = true); - - // Initialize with a null_ok pointer for efficiency, bypassing the - // null check since the source is always non-null. - static null_ok<typename T::element_type>* adopt(PyObject* p) - { - return python::allow_null(base::checked_downcast(p)); - } -}; - -template <class T> -struct default_object_manager_traits -{ - BOOST_STATIC_CONSTANT( - bool, is_specialized = python::detail::is_borrowed_ptr<T>::value - ); -}; - -template <class T> -struct object_manager_traits - : mpl::if_c< - is_handle<T>::value - , handle_object_manager_traits<T> - , default_object_manager_traits<T> - >::type -{ -}; - -// -// Traits for detecting whether a type is an object manager or a -// (cv-qualified) reference to an object manager. -// - -template <class T> -struct is_object_manager - : mpl::bool_<object_manager_traits<T>::is_specialized> -{ -}; - -template <class T> -struct is_reference_to_object_manager - : mpl::false_ -{ -}; - -template <class T> -struct is_reference_to_object_manager<T&> - : is_object_manager<T> -{ -}; - -template <class T> -struct is_reference_to_object_manager<T const&> - : is_object_manager<T> -{ -}; - -template <class T> -struct is_reference_to_object_manager<T volatile&> - : is_object_manager<T> -{ -}; - -template <class T> -struct is_reference_to_object_manager<T const volatile&> - : is_object_manager<T> -{ -}; - -}}} // namespace boost::python::converter - -#endif // OBJECT_MANAGER_DWA2002614_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/converter/pointer_type_id.hpp b/contrib/restricted/boost/python/include/boost/python/converter/pointer_type_id.hpp deleted file mode 100644 index 49eeda42cbf..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/converter/pointer_type_id.hpp +++ /dev/null @@ -1,68 +0,0 @@ -// 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 POINTER_TYPE_ID_DWA2002222_HPP -# define POINTER_TYPE_ID_DWA2002222_HPP - -# include <boost/python/type_id.hpp> -# include <boost/python/detail/type_traits.hpp> - -namespace boost { namespace python { namespace converter { - -namespace detail -{ - template <bool is_ref = false> - struct pointer_typeid_select - { - template <class T> - static inline type_info execute(T*(*)() = 0) - { - return type_id<T>(); - } - }; - - template <> - struct pointer_typeid_select<true> - { - template <class T> - static inline type_info execute(T* const volatile&(*)() = 0) - { - return type_id<T>(); - } - - template <class T> - static inline type_info execute(T*volatile&(*)() = 0) - { - return type_id<T>(); - } - - template <class T> - static inline type_info execute(T*const&(*)() = 0) - { - return type_id<T>(); - } - - template <class T> - static inline type_info execute(T*&(*)() = 0) - { - return type_id<T>(); - } - }; -} - -// Usage: pointer_type_id<T>() -// -// Returns a type_info associated with the type pointed -// to by T, which may be a pointer or a reference to a pointer. -template <class T> -type_info pointer_type_id(T(*)() = 0) -{ - return detail::pointer_typeid_select< - boost::python::detail::is_lvalue_reference<T>::value - >::execute((T(*)())0); -} - -}}} // namespace boost::python::converter - -#endif // POINTER_TYPE_ID_DWA2002222_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/converter/pyobject_traits.hpp b/contrib/restricted/boost/python/include/boost/python/converter/pyobject_traits.hpp deleted file mode 100644 index 43e384af8dd..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/converter/pyobject_traits.hpp +++ /dev/null @@ -1,46 +0,0 @@ -// 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 PYOBJECT_TRAITS_DWA2002720_HPP -# define PYOBJECT_TRAITS_DWA2002720_HPP - -# include <boost/python/detail/prefix.hpp> -# include <boost/python/converter/pyobject_type.hpp> - -namespace boost { namespace python { namespace converter { - -template <class> struct pyobject_traits; - -template <> -struct pyobject_traits<PyObject> -{ - // All objects are convertible to PyObject - static bool check(PyObject*) { return true; } - static PyObject* checked_downcast(PyObject* x) { return x; } -#ifndef BOOST_PYTHON_NO_PY_SIGNATURES - static PyTypeObject const* get_pytype() { return 0; } -#endif -}; - -// -// Specializations -// - -# define BOOST_PYTHON_BUILTIN_OBJECT_TRAITS(T) \ - template <> struct pyobject_traits<Py##T##Object> \ - : pyobject_type<Py##T##Object, &Py##T##_Type> {} - -// This is not an exhaustive list; should be expanded. -BOOST_PYTHON_BUILTIN_OBJECT_TRAITS(Type); -BOOST_PYTHON_BUILTIN_OBJECT_TRAITS(List); -#if PY_VERSION_HEX < 0x03000000 -BOOST_PYTHON_BUILTIN_OBJECT_TRAITS(Int); -#endif -BOOST_PYTHON_BUILTIN_OBJECT_TRAITS(Long); -BOOST_PYTHON_BUILTIN_OBJECT_TRAITS(Dict); -BOOST_PYTHON_BUILTIN_OBJECT_TRAITS(Tuple); - -}}} // namespace boost::python::converter - -#endif // PYOBJECT_TRAITS_DWA2002720_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/converter/pyobject_type.hpp b/contrib/restricted/boost/python/include/boost/python/converter/pyobject_type.hpp deleted file mode 100644 index bde39e80572..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/converter/pyobject_type.hpp +++ /dev/null @@ -1,40 +0,0 @@ -// 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 PYOBJECT_TYPE_DWA2002720_HPP -# define PYOBJECT_TYPE_DWA2002720_HPP - -# include <boost/python/cast.hpp> - -namespace boost { namespace python { namespace converter { - -BOOST_PYTHON_DECL inline -PyObject* checked_downcast_impl(PyObject *obj, PyTypeObject *type) -{ - return (PyType_IsSubtype(Py_TYPE(obj), type) ? obj : NULL); -} -// Used as a base class for specializations which need to provide -// Python type checking capability. -template <class Object, PyTypeObject* pytype> -struct pyobject_type -{ - static bool check(PyObject* x) - { - return ::PyObject_IsInstance(x, (PyObject*)pytype); - } - - static Object* checked_downcast(PyObject* x) - { - return python::downcast<Object>( - (checked_downcast_impl)(x, pytype) - ); - } -#ifndef BOOST_PYTHON_NO_PY_SIGNATURES - static PyTypeObject const* get_pytype() { return pytype; } -#endif -}; - -}}} // namespace boost::python::converter - -#endif // PYOBJECT_TYPE_DWA2002720_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/converter/pytype_function.hpp b/contrib/restricted/boost/python/include/boost/python/converter/pytype_function.hpp deleted file mode 100644 index 8e0a4e79951..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/converter/pytype_function.hpp +++ /dev/null @@ -1,133 +0,0 @@ -// Copyright David Abrahams 2002, Nikolay Mladenov 2007. -// 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 WRAP_PYTYPE_NM20070606_HPP -# define WRAP_PYTYPE_NM20070606_HPP - -# include <boost/python/detail/prefix.hpp> -# include <boost/python/converter/registered.hpp> -# include <boost/python/detail/unwind_type.hpp> -# include <boost/python/detail/type_traits.hpp> - - -namespace boost { namespace python { - -namespace converter -{ -template <PyTypeObject const* python_type> -struct wrap_pytype -{ - static PyTypeObject const* get_pytype() - { - return python_type; - } -}; - -typedef PyTypeObject const* (*pytype_function)(); - -#ifndef BOOST_PYTHON_NO_PY_SIGNATURES - - - -namespace detail -{ -struct unwind_type_id_helper{ - typedef python::type_info result_type; - template <class U> - static result_type execute(U* ){ - return python::type_id<U>(); - } -}; - -template <class T> -inline python::type_info unwind_type_id_(boost::type<T>* = 0, mpl::false_ * =0) -{ - return boost::python::detail::unwind_type<unwind_type_id_helper, T> (); -} - -inline python::type_info unwind_type_id_(boost::type<void>* = 0, mpl::true_* =0) -{ - return type_id<void>(); -} - -template <class T> -inline python::type_info unwind_type_id(boost::type<T>* p= 0) -{ - return unwind_type_id_(p, (mpl::bool_<boost::python::detail::is_void<T>::value >*)0 ); -} -} - - -template <class T> -struct expected_pytype_for_arg -{ - static PyTypeObject const *get_pytype() - { - const converter::registration *r=converter::registry::query( - detail::unwind_type_id_((boost::type<T>*)0, (mpl::bool_<boost::python::detail::is_void<T>::value >*)0 ) - ); - return r ? r->expected_from_python_type(): 0; - } -}; - - -template <class T> -struct registered_pytype -{ - static PyTypeObject const *get_pytype() - { - const converter::registration *r=converter::registry::query( - detail::unwind_type_id_((boost::type<T>*) 0, (mpl::bool_<boost::python::detail::is_void<T>::value >*)0 ) - ); - return r ? r->m_class_object: 0; - } -}; - - -template <class T> -struct registered_pytype_direct -{ - static PyTypeObject const* get_pytype() - { - return registered<T>::converters.m_class_object; - } -}; - -template <class T> -struct expected_from_python_type : expected_pytype_for_arg<T>{}; - -template <class T> -struct expected_from_python_type_direct -{ - static PyTypeObject const* get_pytype() - { - return registered<T>::converters.expected_from_python_type(); - } -}; - -template <class T> -struct to_python_target_type -{ - static PyTypeObject const *get_pytype() - { - const converter::registration *r=converter::registry::query( - detail::unwind_type_id_((boost::type<T>*)0, (mpl::bool_<boost::python::detail::is_void<T>::value >*)0 ) - ); - return r ? r->to_python_target_type(): 0; - } -}; - -template <class T> -struct to_python_target_type_direct -{ - static PyTypeObject const *get_pytype() - { - return registered<T>::converters.to_python_target_type(); - } -}; -#endif - -}}} // namespace boost::python - -#endif // WRAP_PYTYPE_NM20070606_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/converter/pytype_object_mgr_traits.hpp b/contrib/restricted/boost/python/include/boost/python/converter/pytype_object_mgr_traits.hpp deleted file mode 100644 index 8f5b2b76771..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/converter/pytype_object_mgr_traits.hpp +++ /dev/null @@ -1,42 +0,0 @@ -// 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 PYTYPE_OBJECT_MANAGER_TRAITS_DWA2002716_HPP -# define PYTYPE_OBJECT_MANAGER_TRAITS_DWA2002716_HPP - -# include <boost/python/detail/prefix.hpp> -# include <boost/python/detail/raw_pyobject.hpp> -# include <boost/python/cast.hpp> -# include <boost/python/converter/pyobject_type.hpp> -# include <boost/python/errors.hpp> - -namespace boost { namespace python { namespace converter { - -// Provide a forward declaration as a convenience for clients, who all -// need it. -template <class T> struct object_manager_traits; - -// Derive specializations of object_manager_traits from this class -// when T is an object manager for a particular Python type hierarchy. -// -template <PyTypeObject* pytype, class T> -struct pytype_object_manager_traits - : pyobject_type<T, pytype> // provides check() -{ - BOOST_STATIC_CONSTANT(bool, is_specialized = true); - static inline python::detail::new_reference adopt(PyObject*); -}; - -// -// implementations -// -template <PyTypeObject* pytype, class T> -inline python::detail::new_reference pytype_object_manager_traits<pytype,T>::adopt(PyObject* x) -{ - return python::detail::new_reference(python::pytype_check(pytype, x)); -} - -}}} // namespace boost::python::converter - -#endif // PYTYPE_OBJECT_MANAGER_TRAITS_DWA2002716_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/converter/registered.hpp b/contrib/restricted/boost/python/include/boost/python/converter/registered.hpp deleted file mode 100644 index 98013052ec3..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/converter/registered.hpp +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright David Abrahams 2002. -// Copyright Stefan Seefeld 2016. -// 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 boost_python_converter_registered_hpp_ -#define boost_python_converter_registered_hpp_ - -#include <boost/python/type_id.hpp> -#include <boost/python/converter/registry.hpp> -#include <boost/python/converter/registrations.hpp> -#include <boost/python/detail/type_traits.hpp> -#include <boost/detail/workaround.hpp> -#include <boost/type.hpp> -#include <memory> -#if defined(BOOST_PYTHON_TRACE_REGISTRY) \ - || defined(BOOST_PYTHON_CONVERTER_REGISTRY_APPLE_MACH_WORKAROUND) -# include <iostream> -#endif - -namespace boost { - -// You'll see shared_ptr mentioned in this header because we need to -// note which types are shared_ptrs in their registrations, to -// implement special shared_ptr handling for rvalue conversions. -template <class T> class shared_ptr; - -namespace python { namespace converter { - -struct registration; - -namespace detail -{ - template <class T> - struct registered_base - { - static registration const& converters; - }; -} - -template <class T> -struct registered - : detail::registered_base< - typename boost::python::detail::add_lvalue_reference< - typename boost::python::detail::add_cv<T>::type - >::type - > -{ -}; - -# if !BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1310)) -// collapses a few more types to the same static instance. MSVC7.1 -// fails to strip cv-qualification from array types in typeid. For -// some reason we can't use this collapse there or array converters -// will not be found. -template <class T> -struct registered<T&> - : registered<T> {}; -# endif - -// -// implementations -// -namespace detail -{ - inline void - register_shared_ptr0(...) - { - } - - template <class T> - inline void - register_shared_ptr0(shared_ptr<T>*) - { - registry::lookup_shared_ptr(type_id<shared_ptr<T> >()); - } - -#if !defined(BOOST_NO_CXX11_SMART_PTR) - template <class T> - inline void - register_shared_ptr0(std::shared_ptr<T>*) - { - registry::lookup_shared_ptr(type_id<std::shared_ptr<T> >()); - } -#endif - - template <class T> - inline void - register_shared_ptr1(T const volatile*) - { - detail::register_shared_ptr0((T*)0); - } - - template <class T> - inline registration const& - registry_lookup2(T&(*)()) - { - detail::register_shared_ptr1((T*)0); - return registry::lookup(type_id<T&>()); - } - - template <class T> - inline registration const& - registry_lookup1(type<T>) - { - return registry_lookup2((T(*)())0); - } - - inline registration const& - registry_lookup1(type<const volatile void>) - { - detail::register_shared_ptr1((void*)0); - return registry::lookup(type_id<void>()); - } - - template <class T> - registration const& registered_base<T>::converters = detail::registry_lookup1(type<T>()); - -} - -}}} // namespace boost::python::converter - -#endif diff --git a/contrib/restricted/boost/python/include/boost/python/converter/registered_pointee.hpp b/contrib/restricted/boost/python/include/boost/python/converter/registered_pointee.hpp deleted file mode 100644 index 28b2988c7f7..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/converter/registered_pointee.hpp +++ /dev/null @@ -1,29 +0,0 @@ -// 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 REGISTERED_POINTEE_DWA2002710_HPP -# define REGISTERED_POINTEE_DWA2002710_HPP -# include <boost/python/converter/registered.hpp> -# include <boost/python/converter/pointer_type_id.hpp> -# include <boost/python/converter/registry.hpp> -# include <boost/python/detail/type_traits.hpp> - -namespace boost { namespace python { namespace converter { - -struct registration; - -template <class T> -struct registered_pointee - : registered< - typename boost::python::detail::remove_pointer< - typename boost::python::detail::remove_cv< - typename boost::python::detail::remove_reference<T>::type - >::type - >::type - > -{ -}; -}}} // namespace boost::python::converter - -#endif // REGISTERED_POINTEE_DWA2002710_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/converter/registrations.hpp b/contrib/restricted/boost/python/include/boost/python/converter/registrations.hpp deleted file mode 100644 index 7ef74e8f405..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/converter/registrations.hpp +++ /dev/null @@ -1,99 +0,0 @@ -// 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 REGISTRATIONS_DWA2002223_HPP -# define REGISTRATIONS_DWA2002223_HPP - -# include <boost/python/detail/prefix.hpp> - -# include <boost/python/type_id.hpp> - -# include <boost/python/converter/convertible_function.hpp> -# include <boost/python/converter/constructor_function.hpp> -# include <boost/python/converter/to_python_function_type.hpp> - -# include <boost/detail/workaround.hpp> - -namespace boost { namespace python { namespace converter { - -struct lvalue_from_python_chain -{ - convertible_function convert; - lvalue_from_python_chain* next; -}; - -struct rvalue_from_python_chain -{ - convertible_function convertible; - constructor_function construct; - PyTypeObject const* (*expected_pytype)(); - rvalue_from_python_chain* next; -}; - -struct BOOST_PYTHON_DECL registration -{ - public: // member functions - explicit registration(type_info target, bool is_shared_ptr = false); - ~registration(); - - // Convert the appropriately-typed data to Python - PyObject* to_python(void const volatile*) const; - - // Return the class object, or raise an appropriate Python - // exception if no class has been registered. - PyTypeObject* get_class_object() const; - - // Return common denominator of the python class objects, - // convertable to target. Inspects the m_class_object and the value_chains. - PyTypeObject const* expected_from_python_type() const; - PyTypeObject const* to_python_target_type() const; - - public: // data members. So sue me. - const python::type_info target_type; - - // The chain of eligible from_python converters when an lvalue is required - lvalue_from_python_chain* lvalue_chain; - - // The chain of eligible from_python converters when an rvalue is acceptable - rvalue_from_python_chain* rvalue_chain; - - // The class object associated with this type - PyTypeObject* m_class_object; - - // The unique to_python converter for the associated C++ type. - to_python_function_t m_to_python; - PyTypeObject const* (*m_to_python_target_type)(); - - - // True iff this type is a shared_ptr. Needed for special rvalue - // from_python handling. - const bool is_shared_ptr; - -# if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) - private: - void operator=(registration); // This is not defined, and just keeps MWCW happy. -# endif -}; - -// -// implementations -// -inline registration::registration(type_info target_type, bool is_shared_ptr) - : target_type(target_type) - , lvalue_chain(0) - , rvalue_chain(0) - , m_class_object(0) - , m_to_python(0) - , m_to_python_target_type(0) - , is_shared_ptr(is_shared_ptr) -{} - -inline bool operator<(registration const& lhs, registration const& rhs) -{ - return lhs.target_type < rhs.target_type; -} - -}}} // namespace boost::python::converter - -#endif // REGISTRATIONS_DWA2002223_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/converter/registry.hpp b/contrib/restricted/boost/python/include/boost/python/converter/registry.hpp deleted file mode 100644 index 368adcc61dd..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/converter/registry.hpp +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright David Abrahams 2001. -// 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 REGISTRY_DWA20011127_HPP -# define REGISTRY_DWA20011127_HPP -# include <boost/python/type_id.hpp> -# include <boost/python/converter/to_python_function_type.hpp> -# include <boost/python/converter/rvalue_from_python_data.hpp> -# include <boost/python/converter/constructor_function.hpp> -# include <boost/python/converter/convertible_function.hpp> - -namespace boost { namespace python { namespace converter { - -struct registration; - -// This namespace acts as a sort of singleton -namespace registry -{ - // Get the registration corresponding to the type, creating it if necessary - BOOST_PYTHON_DECL registration const& lookup(type_info); - - // Get the registration corresponding to the type, creating it if - // necessary. Use this first when the type is a shared_ptr. - BOOST_PYTHON_DECL registration const& lookup_shared_ptr(type_info); - - // Return a pointer to the corresponding registration, if one exists - BOOST_PYTHON_DECL registration const* query(type_info); - - BOOST_PYTHON_DECL void insert(to_python_function_t, type_info, PyTypeObject const* (*to_python_target_type)() = 0); - - // Insert an lvalue from_python converter - BOOST_PYTHON_DECL void insert(convertible_function, type_info, PyTypeObject const* (*expected_pytype)() = 0); - - // Insert an rvalue from_python converter - BOOST_PYTHON_DECL void insert( - convertible_function - , constructor_function - , type_info - , PyTypeObject const* (*expected_pytype)() = 0 - ); - - // Insert an rvalue from_python converter at the tail of the - // chain. Used for implicit conversions - BOOST_PYTHON_DECL void push_back( - convertible_function - , constructor_function - , type_info - , PyTypeObject const* (*expected_pytype)() = 0 - ); -} - -}}} // namespace boost::python::converter - -#endif // REGISTRY_DWA20011127_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/converter/return_from_python.hpp b/contrib/restricted/boost/python/include/boost/python/converter/return_from_python.hpp deleted file mode 100644 index a995a2905ad..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/converter/return_from_python.hpp +++ /dev/null @@ -1,162 +0,0 @@ -// 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 RETURN_FROM_PYTHON_DWA200265_HPP -# define RETURN_FROM_PYTHON_DWA200265_HPP - -# include <boost/python/converter/from_python.hpp> -# include <boost/python/converter/rvalue_from_python_data.hpp> -# include <boost/python/converter/registered.hpp> -# include <boost/python/converter/registered_pointee.hpp> -# include <boost/python/converter/object_manager.hpp> -# include <boost/python/detail/void_ptr.hpp> -# include <boost/python/detail/void_return.hpp> -# include <boost/python/errors.hpp> -# include <boost/python/handle.hpp> -# include <boost/python/detail/type_traits.hpp> -# include <boost/mpl/and.hpp> -# include <boost/mpl/bool.hpp> - -namespace boost { namespace python { namespace converter { - -template <class T> struct is_object_manager; - -namespace detail -{ - template <class T> - struct return_pointer_from_python - { - typedef T result_type; - T operator()(PyObject*) const; - }; - - template <class T> - struct return_reference_from_python - { - typedef T result_type; - T operator()(PyObject*) const; - }; - - template <class T> - struct return_rvalue_from_python - { - typedef T result_type; - - return_rvalue_from_python(); - result_type operator()(PyObject*); - private: - rvalue_from_python_data<T> m_data; - }; - - template <class T> - struct return_object_manager_from_python - { - typedef T result_type; - result_type operator()(PyObject*) const; - }; - - template <class T> - struct select_return_from_python - { - BOOST_STATIC_CONSTANT( - bool, obj_mgr = is_object_manager<T>::value); - - BOOST_STATIC_CONSTANT( - bool, ptr = is_pointer<T>::value); - - BOOST_STATIC_CONSTANT( - bool, ref = is_reference<T>::value); - - typedef typename mpl::if_c< - obj_mgr - , return_object_manager_from_python<T> - , typename mpl::if_c< - ptr - , return_pointer_from_python<T> - , typename mpl::if_c< - ref - , return_reference_from_python<T> - , return_rvalue_from_python<T> - >::type - >::type - >::type type; - }; -} - -template <class T> -struct return_from_python - : detail::select_return_from_python<T>::type -{ -}; - -// Specialization as a convenience for call and call_method -template <> -struct return_from_python<void> -{ - typedef python::detail::returnable<void>::type result_type; - - result_type operator()(PyObject* x) const - { - (void_result_from_python)(x); -# ifdef BOOST_NO_VOID_RETURNS - return result_type(); -# endif - } -}; - -// -// Implementations -// -namespace detail -{ - template <class T> - inline return_rvalue_from_python<T>::return_rvalue_from_python() - : m_data( - const_cast<registration*>(®istered<T>::converters) - ) - { - } - - template <class T> - inline typename return_rvalue_from_python<T>::result_type - return_rvalue_from_python<T>::operator()(PyObject* obj) - { - // Take possession of the source object here. If the result is in - // fact going to be a copy of an lvalue embedded in the object, - // and we take possession inside rvalue_result_from_python, it - // will be destroyed too early. - handle<> holder(obj); - - return *(T*) - (rvalue_result_from_python)(obj, m_data.stage1); - } - - template <class T> - inline T return_reference_from_python<T>::operator()(PyObject* obj) const - { - return python::detail::void_ptr_to_reference( - (reference_result_from_python)(obj, registered<T>::converters) - , (T(*)())0); - } - - template <class T> - inline T return_pointer_from_python<T>::operator()(PyObject* obj) const - { - return T( - (pointer_result_from_python)(obj, registered_pointee<T>::converters) - ); - } - - template <class T> - inline T return_object_manager_from_python<T>::operator()(PyObject* obj) const - { - return T( - object_manager_traits<T>::adopt(expect_non_null(obj)) - ); - } -} - -}}} // namespace boost::python::converter - -#endif // RETURN_FROM_PYTHON_DWA200265_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/converter/rvalue_from_python_data.hpp b/contrib/restricted/boost/python/include/boost/python/converter/rvalue_from_python_data.hpp deleted file mode 100644 index d728681b3e6..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/converter/rvalue_from_python_data.hpp +++ /dev/null @@ -1,147 +0,0 @@ -// 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 FROM_PYTHON_AUX_DATA_DWA2002128_HPP -# define FROM_PYTHON_AUX_DATA_DWA2002128_HPP - -# include <boost/python/converter/constructor_function.hpp> -# include <boost/python/detail/referent_storage.hpp> -# include <boost/python/detail/destroy.hpp> -# include <boost/python/detail/type_traits.hpp> -# include <boost/align/align.hpp> -# include <boost/static_assert.hpp> -# include <cstddef> - -// Data management for potential rvalue conversions from Python to C++ -// types. When a client requests a conversion to T* or T&, we -// generally require that an object of type T exists in the source -// Python object, and the code here does not apply**. This implements -// conversions which may create new temporaries of type T. The classic -// example is a conversion which converts a Python tuple to a -// std::vector. Since no std::vector lvalue exists in the Python -// object -- it must be created "on-the-fly" by the converter, and -// which must manage the lifetime of the created object. -// -// Note that the client is not precluded from using a registered -// lvalue conversion to T in this case. In other words, we will -// happily accept a Python object which /does/ contain a std::vector -// lvalue, provided an appropriate converter is registered. So, while -// this is an rvalue conversion from the client's point-of-view, the -// converter registry may serve up lvalue or rvalue conversions for -// the target type. -// -// ** C++ argument from_python conversions to T const& are an -// exception to the rule for references: since in C++, const -// references can bind to temporary rvalues, we allow rvalue -// converters to be chosen when the target type is T const& for some -// T. -namespace boost { namespace python { namespace converter { - -// Conversions begin by filling in and returning a copy of this -// structure. The process looks up a converter in the rvalue converter -// registry for the target type. It calls the convertible() function -// of each registered converter, passing the source PyObject* as an -// argument, until a non-null result is returned. This result goes in -// the convertible field, and the converter's construct() function is -// stored in the construct field. -// -// If no appropriate converter is found, conversion fails and the -// convertible field is null. When used in argument conversion for -// wrapped C++ functions, it causes overload resolution to reject the -// current function but not to fail completely. If an exception is -// thrown, overload resolution stops and the exception propagates back -// through the caller. -// -// If an lvalue converter is matched, its convertible() function is -// expected to return a pointer to the stored T object; its -// construct() function will be NULL. The convertible() function of -// rvalue converters may return any non-singular pointer; the actual -// target object will only be available once the converter's -// construct() function is called. -struct rvalue_from_python_stage1_data -{ - void* convertible; - constructor_function construct; -}; - -// Augments rvalue_from_python_stage1_data by adding storage for -// constructing an object of remove_reference<T>::type. The -// construct() function of rvalue converters (stored in m_construct -// above) will cast the rvalue_from_python_stage1_data to an -// appropriate instantiation of this template in order to access that -// storage. -template <class T> -struct rvalue_from_python_storage -{ - rvalue_from_python_stage1_data stage1; - - // Storage for the result, in case an rvalue must be constructed - typename python::detail::referent_storage< - typename boost::python::detail::add_lvalue_reference<T>::type - >::type storage; -}; - -// Augments rvalue_from_python_storage<T> with a destructor. If -// stage1.convertible == storage.bytes, it indicates that an object of -// remove_reference<T>::type has been constructed in storage and -// should will be destroyed in ~rvalue_from_python_data(). It is -// crucial that successful rvalue conversions establish this equality -// and that unsuccessful ones do not. -template <class T> -struct rvalue_from_python_data : rvalue_from_python_storage<T> -{ -# if (!defined(__MWERKS__) || __MWERKS__ >= 0x3000) \ - && (!defined(__EDG_VERSION__) || __EDG_VERSION__ >= 245) \ - && (!defined(__DECCXX_VER) || __DECCXX_VER > 60590014) \ - && !defined(BOOST_PYTHON_SYNOPSIS) /* Synopsis' OpenCXX has trouble parsing this */ - // This must always be a POD struct with m_data its first member. - BOOST_STATIC_ASSERT(BOOST_PYTHON_OFFSETOF(rvalue_from_python_storage<T>,stage1) == 0); -# endif - - // The usual constructor - rvalue_from_python_data(rvalue_from_python_stage1_data const&); - - // This constructor just sets m_convertible -- used by - // implicitly_convertible<> to perform the final step of the - // conversion, where the construct() function is already known. - rvalue_from_python_data(void* convertible); - - // Destroys any object constructed in the storage. - ~rvalue_from_python_data(); - private: - typedef typename boost::python::detail::add_lvalue_reference< - typename boost::python::detail::add_cv<T>::type>::type ref_type; -}; - -// -// Implementataions -// -template <class T> -inline rvalue_from_python_data<T>::rvalue_from_python_data(rvalue_from_python_stage1_data const& _stage1) -{ - this->stage1 = _stage1; -} - -template <class T> -inline rvalue_from_python_data<T>::rvalue_from_python_data(void* convertible) -{ - this->stage1.convertible = convertible; -} - -template <class T> -inline rvalue_from_python_data<T>::~rvalue_from_python_data() -{ - if (this->stage1.convertible == this->storage.bytes) - { - size_t allocated = sizeof(this->storage); - void *ptr = this->storage.bytes; - void *aligned_storage = - ::boost::alignment::align(boost::python::detail::alignment_of<T>::value, 0, ptr, allocated); - python::detail::destroy_referent<ref_type>(aligned_storage); - } -} - -}}} // namespace boost::python::converter - -#endif // FROM_PYTHON_AUX_DATA_DWA2002128_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/converter/shared_ptr_deleter.hpp b/contrib/restricted/boost/python/include/boost/python/converter/shared_ptr_deleter.hpp deleted file mode 100644 index 926508d00e1..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/converter/shared_ptr_deleter.hpp +++ /dev/null @@ -1,22 +0,0 @@ -// 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 SHARED_PTR_DELETER_DWA2002121_HPP -# define SHARED_PTR_DELETER_DWA2002121_HPP - -namespace boost { namespace python { namespace converter { - -struct BOOST_PYTHON_DECL shared_ptr_deleter -{ - shared_ptr_deleter(handle<> owner); - ~shared_ptr_deleter(); - - void operator()(void const*); - - handle<> owner; -}; - -}}} // namespace boost::python::converter - -#endif // SHARED_PTR_DELETER_DWA2002121_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/converter/shared_ptr_to_python.hpp b/contrib/restricted/boost/python/include/boost/python/converter/shared_ptr_to_python.hpp deleted file mode 100644 index 02649d406ee..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/converter/shared_ptr_to_python.hpp +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright David Abrahams 2003. -// Copyright Stefan Seefeld 2016. -// 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 boost_python_converter_shared_ptr_to_python_hpp_ -#define boost_python_converter_shared_ptr_to_python_hpp_ - -#include <boost/python/refcount.hpp> -#include <boost/python/converter/shared_ptr_deleter.hpp> -#include <boost/shared_ptr.hpp> -#include <boost/get_pointer.hpp> - -namespace boost { namespace python { namespace converter { - -template <class T> -PyObject* shared_ptr_to_python(shared_ptr<T> const& x) -{ - if (!x) - return python::detail::none(); - else if (shared_ptr_deleter* d = boost::get_deleter<shared_ptr_deleter>(x)) - return incref( get_pointer( d->owner ) ); - else - return converter::registered<shared_ptr<T> const&>::converters.to_python(&x); -} - -#if !defined(BOOST_NO_CXX11_SMART_PTR) -template <class T> -PyObject* shared_ptr_to_python(std::shared_ptr<T> const& x) -{ - if (!x) - return python::detail::none(); - else if (shared_ptr_deleter* d = std::get_deleter<shared_ptr_deleter>(x)) - return incref(get_pointer(d->owner)); - else - return converter::registered<std::shared_ptr<T> const&>::converters.to_python(&x); -} -#endif - -}}} // namespace boost::python::converter - -#endif diff --git a/contrib/restricted/boost/python/include/boost/python/converter/to_python_function_type.hpp b/contrib/restricted/boost/python/include/boost/python/converter/to_python_function_type.hpp deleted file mode 100644 index cccd014d68f..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/converter/to_python_function_type.hpp +++ /dev/null @@ -1,19 +0,0 @@ -// 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 TO_PYTHON_FUNCTION_TYPE_DWA200236_HPP -# define TO_PYTHON_FUNCTION_TYPE_DWA200236_HPP -# include <boost/python/detail/prefix.hpp> -# include <boost/static_assert.hpp> - -namespace boost { namespace python { namespace converter { - -// The type of stored function pointers which actually do conversion -// by-value. The void* points to the object to be converted, and -// type-safety is preserved through runtime registration. -typedef PyObject* (*to_python_function_t)(void const*); - -}}} // namespace boost::python::converter - -#endif // TO_PYTHON_FUNCTION_TYPE_DWA200236_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/def_visitor.hpp b/contrib/restricted/boost/python/include/boost/python/def_visitor.hpp deleted file mode 100644 index 18dd9286846..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/def_visitor.hpp +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright David Abrahams 2003. -// 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 DEF_VISITOR_DWA2003810_HPP -# define DEF_VISITOR_DWA2003810_HPP - -# include <boost/python/detail/prefix.hpp> -# include <boost/detail/workaround.hpp> - -namespace boost { namespace python { - -template <class DerivedVisitor> class def_visitor; -template <class T, class X1, class X2, class X3> class class_; - -class def_visitor_access -{ -# if defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) \ - || BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x551)) - // Tasteless as this may seem, making all members public allows member templates - // to work in the absence of member template friends. - public: -# else - template <class Derived> friend class def_visitor; -# endif - - // unnamed visit, c.f. init<...>, container suites - template <class V, class classT> - static void visit(V const& v, classT& c) - { - v.derived_visitor().visit(c); - } - - // named visit, c.f. object, pure_virtual - template <class V, class classT, class OptionalArgs> - static void visit( - V const& v - , classT& c - , char const* name - , OptionalArgs const& options - ) - { - v.derived_visitor().visit(c, name, options); - } - -}; - - -template <class DerivedVisitor> -class def_visitor -{ - friend class def_visitor_access; - -# if defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) \ - || BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x551)) - // Tasteless as this may seem, making all members public allows member templates - // to work in the absence of member template friends. - public: -# else - template <class T, class X1, class X2, class X3> friend class class_; -# endif - - // unnamed visit, c.f. init<...>, container suites - template <class classT> - void visit(classT& c) const - { - def_visitor_access::visit(*this, c); - } - - // named visit, c.f. object, pure_virtual - template <class classT, class OptionalArgs> - void visit(classT& c, char const* name, OptionalArgs const& options) const - { - def_visitor_access::visit(*this, c, name, options); - } - - protected: - DerivedVisitor const& derived_visitor() const - { - return static_cast<DerivedVisitor const&>(*this); - } -}; - -}} // namespace boost::python - -#endif // DEF_VISITOR_DWA2003810_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/default_call_policies.hpp b/contrib/restricted/boost/python/include/boost/python/default_call_policies.hpp deleted file mode 100644 index c8822573480..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/default_call_policies.hpp +++ /dev/null @@ -1,89 +0,0 @@ -// 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 DEFAULT_CALL_POLICIES_DWA2002131_HPP -# define DEFAULT_CALL_POLICIES_DWA2002131_HPP - -# include <boost/python/detail/prefix.hpp> -# include <boost/mpl/if.hpp> -# include <boost/python/to_python_value.hpp> -# include <boost/python/detail/type_traits.hpp> -# include <boost/python/detail/value_arg.hpp> -# include <boost/mpl/or.hpp> -# include <boost/mpl/front.hpp> - -namespace boost { namespace python { - -template <class T> struct to_python_value; - -namespace detail -{ -// for "readable" error messages - template <class T> struct specify_a_return_value_policy_to_wrap_functions_returning -# if defined(__GNUC__) || defined(__EDG__) - {} -# endif - ; -} - -struct default_result_converter; - -struct default_call_policies -{ - // Ownership of this argument tuple will ultimately be adopted by - // the caller. - template <class ArgumentPackage> - static bool precall(ArgumentPackage const&) - { - return true; - } - - // Pass the result through - template <class ArgumentPackage> - static PyObject* postcall(ArgumentPackage const&, PyObject* result) - { - return result; - } - - typedef default_result_converter result_converter; - typedef PyObject* argument_package; - - template <class Sig> - struct extract_return_type : mpl::front<Sig> - { - }; - -}; - -struct default_result_converter -{ - template <class R> - struct apply - { - typedef typename mpl::if_< - mpl::or_<detail::is_pointer<R>, detail::is_reference<R> > - , detail::specify_a_return_value_policy_to_wrap_functions_returning<R> - , boost::python::to_python_value< - typename detail::value_arg<R>::type - > - >::type type; - }; -}; - -// Exceptions for c strings an PyObject*s -template <> -struct default_result_converter::apply<char const*> -{ - typedef boost::python::to_python_value<char const*const&> type; -}; - -template <> -struct default_result_converter::apply<PyObject*> -{ - typedef boost::python::to_python_value<PyObject*const&> type; -}; - -}} // namespace boost::python - -#endif // DEFAULT_CALL_POLICIES_DWA2002131_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/borrowed_ptr.hpp b/contrib/restricted/boost/python/include/boost/python/detail/borrowed_ptr.hpp deleted file mode 100644 index 7d78739ed97..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/borrowed_ptr.hpp +++ /dev/null @@ -1,80 +0,0 @@ -#ifndef BORROWED_PTR_DWA20020601_HPP -# define BORROWED_PTR_DWA20020601_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) - -# include <boost/config.hpp> -# include <boost/type.hpp> -# include <boost/mpl/if.hpp> -# include <boost/python/detail/type_traits.hpp> -# include <boost/python/tag.hpp> - -namespace boost { namespace python { namespace detail { - -template<class T> class borrowed -{ - typedef T type; -}; - -template<typename T> -struct is_borrowed_ptr -{ - BOOST_STATIC_CONSTANT(bool, value = false); -}; - -# if !defined(__MWERKS__) || __MWERKS__ > 0x3000 -template<typename T> -struct is_borrowed_ptr<borrowed<T>*> -{ - BOOST_STATIC_CONSTANT(bool, value = true); -}; - -template<typename T> -struct is_borrowed_ptr<borrowed<T> const*> -{ - BOOST_STATIC_CONSTANT(bool, value = true); -}; - -template<typename T> -struct is_borrowed_ptr<borrowed<T> volatile*> -{ - BOOST_STATIC_CONSTANT(bool, value = true); -}; - -template<typename T> -struct is_borrowed_ptr<borrowed<T> const volatile*> -{ - BOOST_STATIC_CONSTANT(bool, value = true); -}; -# else -template<typename T> -struct is_borrowed -{ - BOOST_STATIC_CONSTANT(bool, value = false); -}; -template<typename T> -struct is_borrowed<borrowed<T> > -{ - BOOST_STATIC_CONSTANT(bool, value = true); -}; -template<typename T> -struct is_borrowed_ptr<T*> - : is_borrowed<typename remove_cv<T>::type> -{ -}; -# endif - - -} - -template <class T> -inline T* get_managed_object(detail::borrowed<T> const volatile* p, tag_t) -{ - return (T*)p; -} - -}} // namespace boost::python::detail - -#endif // #ifndef BORROWED_PTR_DWA20020601_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/caller.hpp b/contrib/restricted/boost/python/include/boost/python/detail/caller.hpp deleted file mode 100644 index 2834d6da995..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/caller.hpp +++ /dev/null @@ -1,270 +0,0 @@ -#if !defined(BOOST_PP_IS_ITERATING) - -// 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 CALLER_DWA20021121_HPP -# define CALLER_DWA20021121_HPP - -# include <boost/python/type_id.hpp> -# include <boost/python/handle.hpp> - -# include <boost/detail/indirect_traits.hpp> - -# include <boost/python/detail/invoke.hpp> -# include <boost/python/detail/signature.hpp> -# include <boost/python/detail/preprocessor.hpp> -# include <boost/python/detail/type_traits.hpp> - -# include <boost/python/arg_from_python.hpp> -# include <boost/python/converter/context_result_converter.hpp> -# include <boost/python/converter/builtin_converters.hpp> - -# include <boost/preprocessor/iterate.hpp> -# include <boost/preprocessor/cat.hpp> -# include <boost/preprocessor/dec.hpp> -# include <boost/preprocessor/if.hpp> -# include <boost/preprocessor/iteration/local.hpp> -# include <boost/preprocessor/repetition/enum_trailing_params.hpp> -# include <boost/preprocessor/repetition/repeat.hpp> - -# include <boost/compressed_pair.hpp> - -# include <boost/mpl/apply.hpp> -# include <boost/mpl/eval_if.hpp> -# include <boost/mpl/identity.hpp> -# include <boost/mpl/size.hpp> -# include <boost/mpl/at.hpp> -# include <boost/mpl/int.hpp> -# include <boost/mpl/next.hpp> - -namespace boost { namespace python { namespace detail { - -template <int N> -inline PyObject* get(mpl::int_<N>, PyObject* const& args_) -{ - return PyTuple_GET_ITEM(args_,N); -} - -inline Py_ssize_t arity(PyObject* const& args_) -{ - return PyTuple_GET_SIZE(args_); -} - -// This "result converter" is really just used as -// a dispatch tag to invoke(...), selecting the appropriate -// implementation -typedef int void_result_to_python; - -// Given a model of CallPolicies and a C++ result type, this -// metafunction selects the appropriate converter to use for -// converting the result to python. -template <class Policies, class Result> -struct select_result_converter - : mpl::eval_if< - is_same<Result,void> - , mpl::identity<void_result_to_python> - , mpl::apply1<typename Policies::result_converter,Result> - > -{ -}; - -template <class ArgPackage, class ResultConverter> -inline ResultConverter create_result_converter( - ArgPackage const& args_ - , ResultConverter* - , converter::context_result_converter* -) -{ - return ResultConverter(args_); -} - -template <class ArgPackage, class ResultConverter> -inline ResultConverter create_result_converter( - ArgPackage const& - , ResultConverter* - , ... -) -{ - return ResultConverter(); -} - -#ifndef BOOST_PYTHON_NO_PY_SIGNATURES -template <class ResultConverter> -struct converter_target_type -{ - static PyTypeObject const *get_pytype() - { - return create_result_converter((PyObject*)0, (ResultConverter *)0, (ResultConverter *)0).get_pytype(); - } -}; - -template < > -struct converter_target_type <void_result_to_python > -{ - static PyTypeObject const *get_pytype() - { - return 0; - } -}; - -// Generation of ret moved from caller_arity<N>::impl::signature to here due to "feature" in MSVC 15.7.2 with /O2 -// which left the ret uninitialized and caused segfaults in Python interpreter. -template<class Policies, class Sig> const signature_element* get_ret() -{ - typedef BOOST_DEDUCED_TYPENAME Policies::template extract_return_type<Sig>::type rtype; - typedef typename select_result_converter<Policies, rtype>::type result_converter; - - static const signature_element ret = { - (is_void<rtype>::value ? "void" : type_id<rtype>().name()) - , &detail::converter_target_type<result_converter>::get_pytype - , boost::detail::indirect_traits::is_reference_to_non_const<rtype>::value - }; - - return &ret; -} - -#endif - - -template <unsigned> struct caller_arity; - -template <class F, class CallPolicies, class Sig> -struct caller; - -# define BOOST_PYTHON_NEXT(init,name,n) \ - typedef BOOST_PP_IF(n,typename mpl::next< BOOST_PP_CAT(name,BOOST_PP_DEC(n)) >::type, init) name##n; - -# define BOOST_PYTHON_ARG_CONVERTER(n) \ - BOOST_PYTHON_NEXT(typename mpl::next<first>::type, arg_iter,n) \ - typedef arg_from_python<BOOST_DEDUCED_TYPENAME arg_iter##n::type> c_t##n; \ - c_t##n c##n(get(mpl::int_<n>(), inner_args)); \ - if (!c##n.convertible()) \ - return 0; - -# define BOOST_PP_ITERATION_PARAMS_1 \ - (3, (0, BOOST_PYTHON_MAX_ARITY + 1, <boost/python/detail/caller.hpp>)) -# include BOOST_PP_ITERATE() - -# undef BOOST_PYTHON_ARG_CONVERTER -# undef BOOST_PYTHON_NEXT - -// A metafunction returning the base class used for caller<class F, -// class ConverterGenerators, class CallPolicies, class Sig>. -template <class F, class CallPolicies, class Sig> -struct caller_base_select -{ - enum { arity = mpl::size<Sig>::value - 1 }; - typedef typename caller_arity<arity>::template impl<F,CallPolicies,Sig> type; -}; - -// A function object type which wraps C++ objects as Python callable -// objects. -// -// Template Arguments: -// -// F - -// the C++ `function object' that will be called. Might -// actually be any data for which an appropriate invoke_tag() can -// be generated. invoke(...) takes care of the actual invocation syntax. -// -// CallPolicies - -// The precall, postcall, and what kind of resultconverter to -// generate for mpl::front<Sig>::type -// -// Sig - -// The `intended signature' of the function. An MPL sequence -// beginning with a result type and continuing with a list of -// argument types. -template <class F, class CallPolicies, class Sig> -struct caller - : caller_base_select<F,CallPolicies,Sig>::type -{ - typedef typename caller_base_select< - F,CallPolicies,Sig - >::type base; - - typedef PyObject* result_type; - - caller(F f, CallPolicies p) : base(f,p) {} - -}; - -}}} // namespace boost::python::detail - -# endif // CALLER_DWA20021121_HPP - -#else - -# define N BOOST_PP_ITERATION() - -template <> -struct caller_arity<N> -{ - template <class F, class Policies, class Sig> - struct impl - { - impl(F f, Policies p) : m_data(f,p) {} - - PyObject* operator()(PyObject* args_, PyObject*) // eliminate - // this - // trailing - // keyword dict - { - typedef typename mpl::begin<Sig>::type first; - typedef typename first::type result_t; - typedef typename select_result_converter<Policies, result_t>::type result_converter; - typedef typename Policies::argument_package argument_package; - - argument_package inner_args(args_); - -# if N -# define BOOST_PP_LOCAL_MACRO(i) BOOST_PYTHON_ARG_CONVERTER(i) -# define BOOST_PP_LOCAL_LIMITS (0, N-1) -# include BOOST_PP_LOCAL_ITERATE() -# endif - // all converters have been checked. Now we can do the - // precall part of the policy - if (!m_data.second().precall(inner_args)) - return 0; - - PyObject* result = detail::invoke( - detail::invoke_tag<result_t,F>() - , create_result_converter(args_, (result_converter*)0, (result_converter*)0) - , m_data.first() - BOOST_PP_ENUM_TRAILING_PARAMS(N, c) - ); - - return m_data.second().postcall(inner_args, result); - } - - static unsigned min_arity() { return N; } - - static py_func_sig_info signature() - { - const signature_element * sig = detail::signature<Sig>::elements(); -#ifndef BOOST_PYTHON_NO_PY_SIGNATURES - // MSVC 15.7.2, when compiling to /O2 left the static const signature_element ret, - // originally defined here, uninitialized. This in turn led to SegFault in Python interpreter. - // Issue is resolved by moving the generation of ret to separate function in detail namespace (see above). - const signature_element * ret = detail::get_ret<Policies, Sig>(); - - py_func_sig_info res = {sig, ret }; -#else - py_func_sig_info res = {sig, sig }; -#endif - - return res; - } - private: - compressed_pair<F,Policies> m_data; - }; -}; - - - -#endif // BOOST_PP_IS_ITERATING - - diff --git a/contrib/restricted/boost/python/include/boost/python/detail/config.hpp b/contrib/restricted/boost/python/include/boost/python/detail/config.hpp deleted file mode 100644 index 8dce9b742ee..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/config.hpp +++ /dev/null @@ -1,134 +0,0 @@ -// (C) Copyright David Abrahams 2000. -// 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) -// -// The author gratefully acknowleges the support of Dragon Systems, Inc., in -// producing this work. - -// Revision History: -// 04 Mar 01 Some fixes so it will compile with Intel C++ (Dave Abrahams) - -#ifndef CONFIG_DWA052200_H_ -# define CONFIG_DWA052200_H_ - -# include <boost/config.hpp> -# include <boost/detail/workaround.hpp> - -# ifdef BOOST_NO_OPERATORS_IN_NAMESPACE - // A gcc bug forces some symbols into the global namespace -# define BOOST_PYTHON_BEGIN_CONVERSION_NAMESPACE -# define BOOST_PYTHON_END_CONVERSION_NAMESPACE -# define BOOST_PYTHON_CONVERSION -# define BOOST_PYTHON_IMPORT_CONVERSION(x) using ::x -# else -# define BOOST_PYTHON_BEGIN_CONVERSION_NAMESPACE namespace boost { namespace python { -# define BOOST_PYTHON_END_CONVERSION_NAMESPACE }} // namespace boost::python -# define BOOST_PYTHON_CONVERSION boost::python -# define BOOST_PYTHON_IMPORT_CONVERSION(x) void never_defined() // so we can follow the macro with a ';' -# endif - -# if defined(BOOST_MSVC) - -# pragma warning (disable : 4786) // disable truncated debug symbols -# pragma warning (disable : 4251) // disable exported dll function -# pragma warning (disable : 4800) //'int' : forcing value to bool 'true' or 'false' -# pragma warning (disable : 4275) // non dll-interface class - -# elif defined(__ICL) && __ICL < 600 // Intel C++ 5 - -# pragma warning(disable: 985) // identifier was truncated in debug information - -# endif - -// The STLport puts all of the standard 'C' library names in std (as far as the -// user is concerned), but without it you need a fix if you're using MSVC or -// Intel C++ -# if defined(BOOST_NO_STDC_NAMESPACE) -# define BOOST_CSTD_ -# else -# define BOOST_CSTD_ std -# endif - -/***************************************************************************** - * - * Set up dll import/export options: - * - ****************************************************************************/ - -// backwards compatibility: -#ifdef BOOST_PYTHON_STATIC_LIB -# define BOOST_PYTHON_STATIC_LINK -# elif !defined(BOOST_PYTHON_DYNAMIC_LIB) -# define BOOST_PYTHON_DYNAMIC_LIB -#endif - -#if defined(BOOST_PYTHON_DYNAMIC_LIB) -# if defined(BOOST_SYMBOL_EXPORT) -# if defined(BOOST_PYTHON_SOURCE) -# define BOOST_PYTHON_DECL BOOST_SYMBOL_EXPORT -# define BOOST_PYTHON_DECL_FORWARD BOOST_SYMBOL_FORWARD_EXPORT -# define BOOST_PYTHON_DECL_EXCEPTION BOOST_EXCEPTION_EXPORT -# define BOOST_PYTHON_BUILD_DLL -# else -# define BOOST_PYTHON_DECL BOOST_SYMBOL_IMPORT -# define BOOST_PYTHON_DECL_FORWARD BOOST_SYMBOL_FORWARD_IMPORT -# define BOOST_PYTHON_DECL_EXCEPTION BOOST_EXCEPTION_IMPORT -# endif -# endif -#endif - -#ifndef BOOST_PYTHON_DECL -# define BOOST_PYTHON_DECL -#endif - -#ifndef BOOST_PYTHON_DECL_FORWARD -# define BOOST_PYTHON_DECL_FORWARD -#endif - -#ifndef BOOST_PYTHON_DECL_EXCEPTION -# define BOOST_PYTHON_DECL_EXCEPTION -#endif - -#if BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042)) -// Replace broken Tru64/cxx offsetof macro -# define BOOST_PYTHON_OFFSETOF(s_name, s_member) \ - ((size_t)__INTADDR__(&(((s_name *)0)->s_member))) -#else -# define BOOST_PYTHON_OFFSETOF offsetof -#endif - -// enable automatic library variant selection ------------------------------// - -#if !defined(BOOST_PYTHON_SOURCE) && !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_PYTHON_NO_LIB) -// -// Set the name of our library, this will get undef'ed by auto_link.hpp -// once it's done with it: -// -#define _BOOST_PYTHON_CONCAT(N, M, m) N ## M ## m -#define BOOST_PYTHON_CONCAT(N, M, m) _BOOST_PYTHON_CONCAT(N, M, m) -#define BOOST_LIB_NAME BOOST_PYTHON_CONCAT(boost_python, PY_MAJOR_VERSION, PY_MINOR_VERSION) -// -// If we're importing code from a dll, then tell auto_link.hpp about it: -// -#ifdef BOOST_PYTHON_DYNAMIC_LIB -# define BOOST_DYN_LINK -#endif -// -// And include the header that does the work: -// -#include <boost/config/auto_link.hpp> -#endif // auto-linking disabled - -#undef BOOST_PYTHON_CONCAT -#undef _BOOST_PYTHON_CONCAT - -#ifndef BOOST_PYTHON_NO_PY_SIGNATURES -#define BOOST_PYTHON_SUPPORTS_PY_SIGNATURES // enables smooth transition -#endif - -#if !defined(BOOST_ATTRIBUTE_UNUSED) && defined(__GNUC__) && (__GNUC__ >= 4) -# define BOOST_ATTRIBUTE_UNUSED __attribute__((unused)) -#endif - -#endif // CONFIG_DWA052200_H_ diff --git a/contrib/restricted/boost/python/include/boost/python/detail/construct.hpp b/contrib/restricted/boost/python/include/boost/python/detail/construct.hpp deleted file mode 100644 index e69fbc75386..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/construct.hpp +++ /dev/null @@ -1,36 +0,0 @@ -// 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 CONSTRUCT_REFERENCE_DWA2002716_HPP -# define CONSTRUCT_REFERENCE_DWA2002716_HPP - -namespace boost { namespace python { namespace detail { - -template <class T, class Arg> -void construct_pointee(void* storage, Arg& x, T const volatile*) -{ - new (storage) T(x); -} - -template <class T, class Arg> -void construct_referent_impl(void* storage, Arg& x, T&(*)()) -{ - construct_pointee(storage, x, (T*)0); -} - -template <class T, class Arg> -void construct_referent(void* storage, Arg const& x, T(*tag)() = 0) -{ - construct_referent_impl(storage, x, tag); -} - -template <class T, class Arg> -void construct_referent(void* storage, Arg& x, T(*tag)() = 0) -{ - construct_referent_impl(storage, x, tag); -} - -}}} // namespace boost::python::detail - -#endif // CONSTRUCT_REFERENCE_DWA2002716_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/convertible.hpp b/contrib/restricted/boost/python/include/boost/python/detail/convertible.hpp deleted file mode 100644 index 1ff350ec24a..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/convertible.hpp +++ /dev/null @@ -1,38 +0,0 @@ -// 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 CONVERTIBLE_DWA2002614_HPP -# define CONVERTIBLE_DWA2002614_HPP - -# if defined(__EDG_VERSION__) && __EDG_VERSION__ <= 241 -# include <boost/mpl/if.hpp> -# include <boost/python/detail/type_traits.hpp> -# endif - -// Supplies a runtime is_convertible check which can be used with tag -// dispatching to work around the Metrowerks Pro7 limitation with boost/std::is_convertible -namespace boost { namespace python { namespace detail { - -typedef char* yes_convertible; -typedef int* no_convertible; - -template <class Target> -struct convertible -{ -# if !defined(__EDG_VERSION__) || __EDG_VERSION__ > 241 || __EDG_VERSION__ == 238 - static inline no_convertible check(...) { return 0; } - static inline yes_convertible check(Target) { return 0; } -# else - template <class X> - static inline typename mpl::if_c< - is_convertible<X,Target>::value - , yes_convertible - , no_convertible - >::type check(X const&) { return 0; } -# endif -}; - -}}} // namespace boost::python::detail - -#endif // CONVERTIBLE_DWA2002614_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/copy_ctor_mutates_rhs.hpp b/contrib/restricted/boost/python/include/boost/python/detail/copy_ctor_mutates_rhs.hpp deleted file mode 100644 index 4ca8d039114..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/copy_ctor_mutates_rhs.hpp +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright David Abrahams 2003. -// 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 COPY_CTOR_MUTATES_RHS_DWA2003219_HPP -# define COPY_CTOR_MUTATES_RHS_DWA2003219_HPP - -#include <boost/python/detail/is_auto_ptr.hpp> -#include <boost/mpl/bool.hpp> - -namespace boost { namespace python { namespace detail { - -template <class T> -struct copy_ctor_mutates_rhs - : is_auto_ptr<T> -{ -}; - -}}} // namespace boost::python::detail - -#endif // COPY_CTOR_MUTATES_RHS_DWA2003219_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/cv_category.hpp b/contrib/restricted/boost/python/include/boost/python/detail/cv_category.hpp deleted file mode 100644 index eb5a8eb9dab..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/cv_category.hpp +++ /dev/null @@ -1,36 +0,0 @@ -// 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 CV_CATEGORY_DWA200222_HPP -# define CV_CATEGORY_DWA200222_HPP -# include <boost/python/detail/type_traits.hpp> - -namespace boost { namespace python { namespace detail { - -template <bool is_const_, bool is_volatile_> -struct cv_tag -{ - BOOST_STATIC_CONSTANT(bool, is_const = is_const_); - BOOST_STATIC_CONSTANT(bool, is_volatile = is_volatile_); -}; - -typedef cv_tag<false,false> cv_unqualified; -typedef cv_tag<true,false> const_; -typedef cv_tag<false,true> volatile_; -typedef cv_tag<true,true> const_volatile_; - -template <class T> -struct cv_category -{ -// BOOST_STATIC_CONSTANT(bool, c = is_const<T>::value); -// BOOST_STATIC_CONSTANT(bool, v = is_volatile<T>::value); - typedef cv_tag< - is_const<T>::value - , is_volatile<T>::value - > type; -}; - -}}} // namespace boost::python::detail - -#endif // CV_CATEGORY_DWA200222_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/decorated_type_id.hpp b/contrib/restricted/boost/python/include/boost/python/detail/decorated_type_id.hpp deleted file mode 100644 index 2596f3104a3..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/decorated_type_id.hpp +++ /dev/null @@ -1,76 +0,0 @@ -// 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 DECORATED_TYPE_ID_DWA2002517_HPP -# define DECORATED_TYPE_ID_DWA2002517_HPP - -# include <boost/python/type_id.hpp> -# include <boost/python/detail/indirect_traits.hpp> -# include <boost/python/detail/type_traits.hpp> - -namespace boost { namespace python { namespace detail { - -struct decorated_type_info : totally_ordered<decorated_type_info> -{ - enum decoration { const_ = 0x1, volatile_ = 0x2, reference = 0x4 }; - - decorated_type_info(type_info, decoration = decoration()); - - inline bool operator<(decorated_type_info const& rhs) const; - inline bool operator==(decorated_type_info const& rhs) const; - - friend BOOST_PYTHON_DECL std::ostream& operator<<(std::ostream&, decorated_type_info const&); - - operator type_info const&() const; - private: // type - typedef type_info base_id_t; - - private: // data members - decoration m_decoration; - base_id_t m_base_type; -}; - -template <class T> -inline decorated_type_info decorated_type_id(boost::type<T>* = 0) -{ - return decorated_type_info( - type_id<T>() - , decorated_type_info::decoration( - (is_const<T>::value || indirect_traits::is_reference_to_const<T>::value - ? decorated_type_info::const_ : 0) - | (is_volatile<T>::value || indirect_traits::is_reference_to_volatile<T>::value - ? decorated_type_info::volatile_ : 0) - | (is_reference<T>::value ? decorated_type_info::reference : 0) - ) - ); -} - -inline decorated_type_info::decorated_type_info(type_info base_t, decoration decoration) - : m_decoration(decoration) - , m_base_type(base_t) -{ -} - -inline bool decorated_type_info::operator<(decorated_type_info const& rhs) const -{ - return m_decoration < rhs.m_decoration - || (m_decoration == rhs.m_decoration - && m_base_type < rhs.m_base_type); -} - -inline bool decorated_type_info::operator==(decorated_type_info const& rhs) const -{ - return m_decoration == rhs.m_decoration && m_base_type == rhs.m_base_type; -} - -inline decorated_type_info::operator type_info const&() const -{ - return m_base_type; -} - -BOOST_PYTHON_DECL std::ostream& operator<<(std::ostream&, decorated_type_info const&); - -}}} // namespace boost::python::detail - -#endif // DECORATED_TYPE_ID_DWA2002517_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/decref_guard.hpp b/contrib/restricted/boost/python/include/boost/python/detail/decref_guard.hpp deleted file mode 100644 index d713e0a6043..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/decref_guard.hpp +++ /dev/null @@ -1,21 +0,0 @@ -// 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 DECREF_GUARD_DWA20021220_HPP -# define DECREF_GUARD_DWA20021220_HPP - -namespace boost { namespace python { namespace detail { - -struct decref_guard -{ - decref_guard(PyObject* o) : obj(o) {} - ~decref_guard() { Py_XDECREF(obj); } - void cancel() { obj = 0; } - private: - PyObject* obj; -}; - -}}} // namespace boost::python::detail - -#endif // DECREF_GUARD_DWA20021220_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/def_helper_fwd.hpp b/contrib/restricted/boost/python/include/boost/python/detail/def_helper_fwd.hpp deleted file mode 100644 index 31c22e97a34..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/def_helper_fwd.hpp +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright David Abrahams 2003. -// 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 DEF_HELPER_FWD_DWA2003810_HPP -# define DEF_HELPER_FWD_DWA2003810_HPP - -# include <boost/python/detail/not_specified.hpp> - -namespace boost { namespace python { namespace detail { - -template <class T1, class T2 = not_specified, class T3 = not_specified, class T4 = not_specified> -struct def_helper; - -}}} // namespace boost::python::detail - -#endif // DEF_HELPER_FWD_DWA2003810_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/dependent.hpp b/contrib/restricted/boost/python/include/boost/python/detail/dependent.hpp deleted file mode 100644 index 70392c4d780..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/dependent.hpp +++ /dev/null @@ -1,27 +0,0 @@ -// 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 DEPENDENT_DWA200286_HPP -# define DEPENDENT_DWA200286_HPP - -namespace boost { namespace python { namespace detail { - -// A way to turn a concrete type T into a type dependent on U. This -// keeps conforming compilers (those implementing proper 2-phase -// name lookup for templates) from complaining about incomplete -// types in situations where it would otherwise be inconvenient or -// impossible to re-order code so that all types are defined in time. - -// One such use is when we must return an incomplete T from a member -// function template (which must be defined in the class body to -// keep MSVC happy). -template <class T, class U> -struct dependent -{ - typedef T type; -}; - -}}} // namespace boost::python::detail - -#endif // DEPENDENT_DWA200286_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/destroy.hpp b/contrib/restricted/boost/python/include/boost/python/detail/destroy.hpp deleted file mode 100644 index d35b2b536e2..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/destroy.hpp +++ /dev/null @@ -1,63 +0,0 @@ -// 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 DESTROY_DWA2002221_HPP -# define DESTROY_DWA2002221_HPP - -# include <boost/python/detail/type_traits.hpp> -# include <boost/detail/workaround.hpp> -namespace boost { namespace python { namespace detail { - -template <bool array> struct value_destroyer; - -template <> -struct value_destroyer<false> -{ - template <class T> - static void execute(T const volatile* p) - { - p->~T(); - } -}; - -template <> -struct value_destroyer<true> -{ - template <class A, class T> - static void execute(A*, T const volatile* const first) - { - for (T const volatile* p = first; p != first + sizeof(A)/sizeof(T); ++p) - { - value_destroyer< - is_array<T>::value - >::execute(p); - } - } - - template <class T> - static void execute(T const volatile* p) - { - execute(p, *p); - } -}; - -template <class T> -inline void destroy_referent_impl(void* p, T& (*)()) -{ - // note: cv-qualification needed for MSVC6 - // must come *before* T for metrowerks - value_destroyer< - (is_array<T>::value) - >::execute((const volatile T*)p); -} - -template <class T> -inline void destroy_referent(void* p, T(*)() = 0) -{ - destroy_referent_impl(p, (T(*)())0); -} - -}}} // namespace boost::python::detail - -#endif // DESTROY_DWA2002221_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/exception_handler.hpp b/contrib/restricted/boost/python/include/boost/python/detail/exception_handler.hpp deleted file mode 100644 index fdc99898363..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/exception_handler.hpp +++ /dev/null @@ -1,48 +0,0 @@ -// 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 EXCEPTION_HANDLER_DWA2002810_HPP -# define EXCEPTION_HANDLER_DWA2002810_HPP - -# include <boost/python/detail/config.hpp> -# include <boost/function/function0.hpp> -# include <boost/function/function2.hpp> - -namespace boost { namespace python { namespace detail { - -struct exception_handler; - -typedef function2<bool, exception_handler const&, function0<void> const&> handler_function; - -struct BOOST_PYTHON_DECL exception_handler -{ - private: // types - - public: - explicit exception_handler(handler_function const& impl); - - inline bool handle(function0<void> const& f) const; - - bool operator()(function0<void> const& f) const; - - static exception_handler* chain; - - private: - static exception_handler* tail; - - handler_function m_impl; - exception_handler* m_next; -}; - - -inline bool exception_handler::handle(function0<void> const& f) const -{ - return this->m_impl(*this, f); -} - -BOOST_PYTHON_DECL void register_exception_handler(handler_function const& f); - -}}} // namespace boost::python::detail - -#endif // EXCEPTION_HANDLER_DWA2002810_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/force_instantiate.hpp b/contrib/restricted/boost/python/include/boost/python/detail/force_instantiate.hpp deleted file mode 100644 index a8901b2da7f..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/force_instantiate.hpp +++ /dev/null @@ -1,18 +0,0 @@ -// 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 FORCE_INSTANTIATE_DWA200265_HPP -# define FORCE_INSTANTIATE_DWA200265_HPP - -namespace boost { namespace python { namespace detail { - -// Allows us to force the argument to be instantiated without -// incurring unused variable warnings - -template <class T> -inline void force_instantiate(T const&) {} - -}}} // namespace boost::python::detail - -#endif // FORCE_INSTANTIATE_DWA200265_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/indirect_traits.hpp b/contrib/restricted/boost/python/include/boost/python/detail/indirect_traits.hpp deleted file mode 100644 index ce8ba310a28..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/indirect_traits.hpp +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright David Abrahams 2004. 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 INDIRECT_TRAITS_DWA2004915_HPP -# define INDIRECT_TRAITS_DWA2004915_HPP - -# include <boost/detail/indirect_traits.hpp> - -namespace boost { namespace python { -namespace indirect_traits = boost::detail::indirect_traits; -}} // namespace boost::python::detail - -#endif // INDIRECT_TRAITS_DWA2004915_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/invoke.hpp b/contrib/restricted/boost/python/include/boost/python/detail/invoke.hpp deleted file mode 100644 index 4c5296ff128..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/invoke.hpp +++ /dev/null @@ -1,98 +0,0 @@ -#if !defined(BOOST_PP_IS_ITERATING) - -// 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 INVOKE_DWA20021122_HPP -# define INVOKE_DWA20021122_HPP - -# include <boost/python/detail/prefix.hpp> -# include <boost/python/detail/preprocessor.hpp> -# include <boost/python/detail/none.hpp> - -# include <boost/preprocessor/iterate.hpp> -# include <boost/preprocessor/facilities/intercept.hpp> -# include <boost/preprocessor/repetition/enum_trailing_params.hpp> -# include <boost/preprocessor/repetition/enum_trailing_binary_params.hpp> -# include <boost/preprocessor/repetition/enum_binary_params.hpp> -# include <boost/python/to_python_value.hpp> - -// This file declares a series of overloaded invoke(...) functions, -// used to invoke wrapped C++ function (object)s from Python. Each one -// accepts: -// -// - a tag which identifies the invocation syntax (e.g. member -// functions must be invoked with a different syntax from regular -// functions) -// -// - a pointer to a result converter type, used solely as a way of -// transmitting the type of the result converter to the function (or -// an int, if the return type is void). -// -// - the "function", which may be a function object, a function or -// member function pointer, or a defaulted_virtual_fn. -// -// - The arg_from_python converters for each of the arguments to be -// passed to the function being invoked. - -namespace boost { namespace python { namespace detail { - -// This "result converter" is really just used as a dispatch tag to -// invoke(...), selecting the appropriate implementation -typedef int void_result_to_python; - -template <bool void_return, bool member> -struct invoke_tag_ {}; - -// A metafunction returning the appropriate tag type for invoking an -// object of type F with return type R. -template <class R, class F> -struct invoke_tag - : invoke_tag_< - is_same<R,void>::value - , is_member_function_pointer<F>::value - > -{ -}; - -# define BOOST_PP_ITERATION_PARAMS_1 \ - (3, (0, BOOST_PYTHON_MAX_ARITY, <boost/python/detail/invoke.hpp>)) -# include BOOST_PP_ITERATE() - -}}} // namespace boost::python::detail - -# endif // INVOKE_DWA20021122_HPP -#else - -# define N BOOST_PP_ITERATION() - -template <class RC, class F BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, class AC)> -inline PyObject* invoke(invoke_tag_<false,false>, RC const& rc, F& f BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z(1, N, AC, & ac) ) -{ - return rc(f( BOOST_PP_ENUM_BINARY_PARAMS_Z(1, N, ac, () BOOST_PP_INTERCEPT) )); -} - -template <class RC, class F BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, class AC)> -inline PyObject* invoke(invoke_tag_<true,false>, RC const&, F& f BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z(1, N, AC, & ac) ) -{ - f( BOOST_PP_ENUM_BINARY_PARAMS_Z(1, N, ac, () BOOST_PP_INTERCEPT) ); - return none(); -} - -template <class RC, class F, class TC BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, class AC)> -inline PyObject* invoke(invoke_tag_<false,true>, RC const& rc, F& f, TC& tc BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z(1, N, AC, & ac) ) -{ - return rc( (tc().*f)(BOOST_PP_ENUM_BINARY_PARAMS_Z(1, N, ac, () BOOST_PP_INTERCEPT)) ); -} - -template <class RC, class F, class TC BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, class AC)> -inline PyObject* invoke(invoke_tag_<true,true>, RC const&, F& f, TC& tc BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z(1, N, AC, & ac) ) -{ - (tc().*f)(BOOST_PP_ENUM_BINARY_PARAMS_Z(1, N, ac, () BOOST_PP_INTERCEPT)); - return none(); -} - -# undef N - -#endif // BOOST_PP_IS_ITERATING diff --git a/contrib/restricted/boost/python/include/boost/python/detail/is_auto_ptr.hpp b/contrib/restricted/boost/python/include/boost/python/detail/is_auto_ptr.hpp deleted file mode 100644 index 3b8198b8dda..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/is_auto_ptr.hpp +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright David Abrahams 2003. -// 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 IS_AUTO_PTR_DWA2003224_HPP -# define IS_AUTO_PTR_DWA2003224_HPP - -# ifndef BOOST_NO_AUTO_PTR -# include <boost/python/detail/is_xxx.hpp> -# include <memory> -# endif - -namespace boost { namespace python { namespace detail { - -# if !defined(BOOST_NO_AUTO_PTR) - -BOOST_PYTHON_IS_XXX_DEF(auto_ptr, std::auto_ptr, 1) - -# else - -template <class T> -struct is_auto_ptr : mpl::false_ -{ -}; - -# endif - -}}} // namespace boost::python::detail - -#endif // IS_AUTO_PTR_DWA2003224_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/is_shared_ptr.hpp b/contrib/restricted/boost/python/include/boost/python/detail/is_shared_ptr.hpp deleted file mode 100644 index 383383bc12e..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/is_shared_ptr.hpp +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright David Abrahams 2003. -// Copyright Stefan Seefeld 2016. -// 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 boost_python_detail_is_shared_ptr_hpp_ -#define boost_python_detail_is_shared_ptr_hpp_ - -#include <boost/python/detail/is_xxx.hpp> -#include <boost/shared_ptr.hpp> - -namespace boost { namespace python { namespace detail { - -BOOST_PYTHON_IS_XXX_DEF(shared_ptr, shared_ptr, 1) -#if !defined(BOOST_NO_CXX11_SMART_PTR) -template <typename T> -struct is_shared_ptr<std::shared_ptr<T> > : std::true_type {}; -#endif - -}}} // namespace boost::python::detail - -#endif diff --git a/contrib/restricted/boost/python/include/boost/python/detail/is_xxx.hpp b/contrib/restricted/boost/python/include/boost/python/detail/is_xxx.hpp deleted file mode 100644 index 9ddfafd3c07..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/is_xxx.hpp +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright David Abrahams 2005. -// 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 IS_XXX_DWA2003224_HPP -# define IS_XXX_DWA2003224_HPP - -# include <boost/detail/is_xxx.hpp> - -# define BOOST_PYTHON_IS_XXX_DEF(name, qualified_name, nargs) \ - BOOST_DETAIL_IS_XXX_DEF(name, qualified_name, nargs) - -#endif // IS_XXX_DWA2003224_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/map_entry.hpp b/contrib/restricted/boost/python/include/boost/python/detail/map_entry.hpp deleted file mode 100644 index 8bf1759f9fd..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/map_entry.hpp +++ /dev/null @@ -1,43 +0,0 @@ -// 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 MAP_ENTRY_DWA2002118_HPP -# define MAP_ENTRY_DWA2002118_HPP - -namespace boost { namespace python { namespace detail { - -// A trivial type that works well as the value_type of associative -// vector maps -template <class Key, class Value> -struct map_entry -{ - map_entry() {} - map_entry(Key k) : key(k), value() {} - map_entry(Key k, Value v) : key(k), value(v) {} - - bool operator<(map_entry const& rhs) const - { - return this->key < rhs.key; - } - - Key key; - Value value; -}; - -template <class Key, class Value> -bool operator<(map_entry<Key,Value> const& e, Key const& k) -{ - return e.key < k; -} - -template <class Key, class Value> -bool operator<(Key const& k, map_entry<Key,Value> const& e) -{ - return k < e.key; -} - - -}}} // namespace boost::python::detail - -#endif // MAP_ENTRY_DWA2002118_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/mpl_lambda.hpp b/contrib/restricted/boost/python/include/boost/python/detail/mpl_lambda.hpp deleted file mode 100644 index a20608e710e..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/mpl_lambda.hpp +++ /dev/null @@ -1,12 +0,0 @@ -// 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 MPL_LAMBDA_DWA2002122_HPP -# define MPL_LAMBDA_DWA2002122_HPP - -// this header should go away soon -# include <boost/mpl/aux_/lambda_support.hpp> -# define BOOST_PYTHON_MPL_LAMBDA_SUPPORT BOOST_MPL_AUX_LAMBDA_SUPPORT - -#endif // MPL_LAMBDA_DWA2002122_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/msvc_typeinfo.hpp b/contrib/restricted/boost/python/include/boost/python/detail/msvc_typeinfo.hpp deleted file mode 100644 index bfc84164f04..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/msvc_typeinfo.hpp +++ /dev/null @@ -1,84 +0,0 @@ -// 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 MSVC_TYPEINFO_DWA200222_HPP -# define MSVC_TYPEINFO_DWA200222_HPP - -#include <typeinfo> -#include <boost/type.hpp> - -// -// Fix for icc's broken typeid() implementation which doesn't strip -// decoration. This fix doesn't handle cv-qualified array types. It -// could probably be done, but I haven't figured it out yet. -// - -// Note: This file is badly named. It initially was MSVC specific, but was -// extended to cover intel too. Now the old version of MSVC is no longer -// supported, but the intel version is still supported. - -# if defined(BOOST_INTEL_CXX_VERSION) && BOOST_INTEL_CXX_VERSION <= 700 - -namespace boost { namespace python { namespace detail { - -typedef std::type_info const& typeinfo; - -template <class T> -static typeinfo typeid_nonref(T const volatile*) { return typeid(T); } - -template <class T> -inline typeinfo typeid_ref_1(T&(*)()) -{ - return detail::typeid_nonref((T*)0); -} - -// A non-reference -template <class T> -inline typeinfo typeid_ref(type<T>*, T&(*)(type<T>)) -{ - return detail::typeid_nonref((T*)0); -} - -// A reference -template <class T> -inline typeinfo typeid_ref(type<T>*, ...) -{ - return detail::typeid_ref_1((T(*)())0); -} - -#if defined(BOOST_MSVC) || (defined(__BORLANDC__) && !defined(BOOST_DISABLE_WIN32)) -# define BOOST_PYTT_DECL __cdecl -#else -# define BOOST_PYTT_DECL /**/ -#endif - -template< typename T > T&(* is_ref_tester1(type<T>) )(type<T>) { return 0; } -inline char BOOST_PYTT_DECL is_ref_tester1(...) { return 0; } - -template <class T> -inline typeinfo msvc_typeid(boost::type<T>*) -{ - return detail::typeid_ref( - (boost::type<T>*)0, detail::is_ref_tester1(type<T>()) - ); -} - -template <> -inline typeinfo msvc_typeid<void>(boost::type<void>*) -{ - return typeid(void); -} - -# ifndef NDEBUG -inline typeinfo assert_array_typeid_compiles() -{ - return msvc_typeid((boost::type<char const[3]>*)0) - , msvc_typeid((boost::type<char[3]>*)0); -} -# endif - -}}} // namespace boost::python::detail - -# endif // BOOST_INTEL_CXX_VERSION -#endif // MSVC_TYPEINFO_DWA200222_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/none.hpp b/contrib/restricted/boost/python/include/boost/python/detail/none.hpp deleted file mode 100644 index bc3337a234d..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/none.hpp +++ /dev/null @@ -1,20 +0,0 @@ -// (C) Copyright David Abrahams 2000. -// 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) -// -// The author gratefully acknowleges the support of Dragon Systems, Inc., in -// producing this work. - -#ifndef NONE_DWA_052000_H_ -# define NONE_DWA_052000_H_ - -# include <boost/python/detail/prefix.hpp> - -namespace boost { namespace python { namespace detail { - -inline PyObject* none() { Py_INCREF(Py_None); return Py_None; } - -}}} // namespace boost::python::detail - -#endif // NONE_DWA_052000_H_ diff --git a/contrib/restricted/boost/python/include/boost/python/detail/not_specified.hpp b/contrib/restricted/boost/python/include/boost/python/detail/not_specified.hpp deleted file mode 100644 index 2f7c7ad9979..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/not_specified.hpp +++ /dev/null @@ -1,14 +0,0 @@ -// 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 NOT_SPECIFIED_DWA2002321_HPP -# define NOT_SPECIFIED_DWA2002321_HPP - -namespace boost { namespace python { namespace detail { - - struct not_specified {}; - -}}} // namespace boost::python::detail - -#endif // NOT_SPECIFIED_DWA2002321_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/prefix.hpp b/contrib/restricted/boost/python/include/boost/python/detail/prefix.hpp deleted file mode 100644 index 8b34ed77018..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/prefix.hpp +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright David Abrahams 2003. -// 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 PREFIX_DWA2003531_HPP -# define PREFIX_DWA2003531_HPP - -// The rule is that <Python.h> must be included before any system -// headers (so it can get control over some awful macros). -// Unfortunately, Boost.Python needs to #include <limits.h> first, at -// least... but this gets us as close as possible. - -# include <boost/python/detail/wrap_python.hpp> -# include <boost/python/detail/config.hpp> - -#endif // PREFIX_DWA2003531_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/preprocessor.hpp b/contrib/restricted/boost/python/include/boost/python/detail/preprocessor.hpp deleted file mode 100644 index 2c1b2e84ea9..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/preprocessor.hpp +++ /dev/null @@ -1,66 +0,0 @@ -// 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 PREPROCESSOR_DWA200247_HPP -# define PREPROCESSOR_DWA200247_HPP - -# include <boost/preprocessor/cat.hpp> -# include <boost/preprocessor/comma_if.hpp> -# include <boost/preprocessor/repeat.hpp> -# include <boost/preprocessor/tuple/elem.hpp> - -// stuff that should be in the preprocessor library - -# define BOOST_PYTHON_APPLY(x) BOOST_PP_CAT(BOOST_PYTHON_APPLY_, x) - -# define BOOST_PYTHON_APPLY_BOOST_PYTHON_ITEM(v) v -# define BOOST_PYTHON_APPLY_BOOST_PYTHON_NIL - -// cv-qualifiers - -# if !defined(__MWERKS__) || __MWERKS__ > 0x2407 -# define BOOST_PYTHON_CV_COUNT 4 -# else -# define BOOST_PYTHON_CV_COUNT 1 -# endif - -# ifndef BOOST_PYTHON_MAX_ARITY -# define BOOST_PYTHON_MAX_ARITY 15 -# endif - -# ifndef BOOST_PYTHON_MAX_BASES -# define BOOST_PYTHON_MAX_BASES 10 -# endif - -# define BOOST_PYTHON_CV_QUALIFIER(i) \ - BOOST_PYTHON_APPLY( \ - BOOST_PP_TUPLE_ELEM(4, i, BOOST_PYTHON_CV_QUALIFIER_I) \ - ) - -# define BOOST_PYTHON_CV_QUALIFIER_I \ - ( \ - BOOST_PYTHON_NIL, \ - BOOST_PYTHON_ITEM(const), \ - BOOST_PYTHON_ITEM(volatile), \ - BOOST_PYTHON_ITEM(const volatile) \ - ) - -// enumerators -# define BOOST_PYTHON_UNARY_ENUM(c, text) BOOST_PP_REPEAT(c, BOOST_PYTHON_UNARY_ENUM_I, text) -# define BOOST_PYTHON_UNARY_ENUM_I(z, n, text) BOOST_PP_COMMA_IF(n) text ## n - -# define BOOST_PYTHON_BINARY_ENUM(c, a, b) BOOST_PP_REPEAT(c, BOOST_PYTHON_BINARY_ENUM_I, (a, b)) -# define BOOST_PYTHON_BINARY_ENUM_I(z, n, _) BOOST_PP_COMMA_IF(n) BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2, 0, _), n) BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2, 1, _), n) - -# define BOOST_PYTHON_ENUM_WITH_DEFAULT(c, text, def) BOOST_PP_REPEAT(c, BOOST_PYTHON_ENUM_WITH_DEFAULT_I, (text, def)) -# define BOOST_PYTHON_ENUM_WITH_DEFAULT_I(z, n, _) BOOST_PP_COMMA_IF(n) BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2, 0, _), n) = BOOST_PP_TUPLE_ELEM(2, 1, _) - -// fixed text (no commas) -# define BOOST_PYTHON_FIXED(z, n, text) text - -// flags -# define BOOST_PYTHON_FUNCTION_POINTER 0x0001 -# define BOOST_PYTHON_POINTER_TO_MEMBER 0x0002 - -#endif // PREPROCESSOR_DWA200247_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/python22_fixed.h b/contrib/restricted/boost/python/include/boost/python/detail/python22_fixed.h deleted file mode 100644 index 32bf941feff..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/python22_fixed.h +++ /dev/null @@ -1,152 +0,0 @@ -// This file is a modified version of Python 2.2/2.2.1 Python.h. As -// such it is: -// -// Copyright (c) 2001, 2002 Python Software Foundation; All Rights -// Reserved -// -// boostinspect:nolicense (don't complain about the lack of a Boost license) -// -// Changes from the original: -// 1. #includes <unistd.h> for Python 2.2.1 -// 2. Provides missing extern "C" wrapper for "iterobject.h" and "descrobject.h". -// - -// Changes marked with "Boost.Python modification" -#ifndef Py_PYTHON_H -#define Py_PYTHON_H -/* Since this is a "meta-include" file, no #ifdef __cplusplus / extern "C" { */ - - -/* Enable compiler features; switching on C lib defines doesn't work - here, because the symbols haven't necessarily been defined yet. */ -#ifndef _GNU_SOURCE -# define _GNU_SOURCE 1 -#endif - -/* Forcing SUSv2 compatibility still produces problems on some - platforms, True64 and SGI IRIX begin two of them, so for now the - define is switched off. */ -#if 0 -#ifndef _XOPEN_SOURCE -# define _XOPEN_SOURCE 500 -#endif -#endif - -/* Include nearly all Python header files */ - -#include "patchlevel.h" -#include "pyconfig.h" - -#ifdef HAVE_LIMITS_H -#include <limits.h> -#endif - -/* pyconfig.h may or may not define DL_IMPORT */ -#ifndef DL_IMPORT /* declarations for DLL import/export */ -#define DL_IMPORT(RTYPE) RTYPE -#endif -#ifndef DL_EXPORT /* declarations for DLL import/export */ -#define DL_EXPORT(RTYPE) RTYPE -#endif - -#if defined(__sgi) && defined(WITH_THREAD) && !defined(_SGI_MP_SOURCE) -#define _SGI_MP_SOURCE -#endif - -#include <stdio.h> -#ifndef NULL -# error "Python.h requires that stdio.h define NULL." -#endif - -#include <string.h> -#include <errno.h> -#ifdef HAVE_STDLIB_H -#include <stdlib.h> -#endif -#if PY_MICRO_VERSION == 1 // Boost.Python modification: emulate Python 2.2 -#ifdef HAVE_UNISTD_H -#include <unistd.h> -#endif -#endif // Boost.Python modification: emulate Python 2.2 - -/* CAUTION: Build setups should ensure that NDEBUG is defined on the - * compiler command line when building Python in release mode; else - * assert() calls won't be removed. - */ -#include <assert.h> - -#include "pyport.h" - -#include "pymem.h" - -#include "object.h" -#include "objimpl.h" - -#include "pydebug.h" - -#include "unicodeobject.h" -#include "intobject.h" -#include "longobject.h" -#include "floatobject.h" -#ifndef WITHOUT_COMPLEX -#include "complexobject.h" -#endif -#include "rangeobject.h" -#include "stringobject.h" -#include "bufferobject.h" -#include "tupleobject.h" -#include "listobject.h" -#include "dictobject.h" -#include "methodobject.h" -#include "moduleobject.h" -#include "funcobject.h" -#include "classobject.h" -#include "fileobject.h" -#include "cobject.h" -#include "traceback.h" -#include "sliceobject.h" -#include "cellobject.h" -extern "C" { // Boost.Python modification: provide missing extern "C" -#include "iterobject.h" -#include "descrobject.h" -} // Boost.Python modification: provide missing extern "C" -#include "weakrefobject.h" - -#include "codecs.h" -#include "pyerrors.h" - -#include "pystate.h" - -#include "modsupport.h" -#include "pythonrun.h" -#include "ceval.h" -#include "sysmodule.h" -#include "intrcheck.h" -#include "import.h" - -#include "abstract.h" - -#define PyArg_GetInt(v, a) PyArg_Parse((v), "i", (a)) -#define PyArg_NoArgs(v) PyArg_Parse(v, "") - -/* Convert a possibly signed character to a nonnegative int */ -/* XXX This assumes characters are 8 bits wide */ -#ifdef __CHAR_UNSIGNED__ -#define Py_CHARMASK(c) (c) -#else -#define Py_CHARMASK(c) ((c) & 0xff) -#endif - -#include "pyfpe.h" - -/* These definitions must match corresponding definitions in graminit.h. - There's code in compile.c that checks that they are the same. */ -#define Py_single_input 256 -#define Py_file_input 257 -#define Py_eval_input 258 - -#ifdef HAVE_PTH -/* GNU pth user-space thread support */ -#include <pth.h> -#endif -#endif /* !Py_PYTHON_H */ diff --git a/contrib/restricted/boost/python/include/boost/python/detail/raw_pyobject.hpp b/contrib/restricted/boost/python/include/boost/python/detail/raw_pyobject.hpp deleted file mode 100644 index 194409eda49..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/raw_pyobject.hpp +++ /dev/null @@ -1,32 +0,0 @@ -// 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 RAW_PYOBJECT_DWA2002628_HPP -# define RAW_PYOBJECT_DWA2002628_HPP - -namespace boost { namespace python { namespace detail { - -// -// Define some types which we can use to get around the vagaries of -// PyObject*. We will use these to initialize object instances, and -// keep them in namespace detail to make sure they stay out of the -// hands of users. That is much simpler than trying to grant -// friendship to all the appropriate parties. -// - -// New references are normally checked for null -struct new_reference_t; -typedef new_reference_t* new_reference; - -// Borrowed references are assumed to be non-null -struct borrowed_reference_t; -typedef borrowed_reference_t* borrowed_reference; - -// New references which aren't checked for null -struct new_non_null_reference_t; -typedef new_non_null_reference_t* new_non_null_reference; - -}}} // namespace boost::python::detail - -#endif // RAW_PYOBJECT_DWA2002628_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/referent_storage.hpp b/contrib/restricted/boost/python/include/boost/python/detail/referent_storage.hpp deleted file mode 100644 index f646d2ae1d8..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/referent_storage.hpp +++ /dev/null @@ -1,45 +0,0 @@ -// 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 REFERENT_STORAGE_DWA200278_HPP -# define REFERENT_STORAGE_DWA200278_HPP -# include <boost/mpl/if.hpp> -# include <boost/type_traits/aligned_storage.hpp> -# include <cstddef> - -namespace boost { namespace python { namespace detail { - -template <std::size_t size, std::size_t alignment = std::size_t(-1)> -struct aligned_storage -{ - union type - { - typename ::boost::aligned_storage<size, alignment>::type data; - char bytes[size]; - }; -}; - - // Compute the size of T's referent. We wouldn't need this at all, - // but sizeof() is broken in CodeWarriors <= 8.0 - template <class T> struct referent_size; - - - template <class T> - struct referent_size<T&> - { - BOOST_STATIC_CONSTANT( - std::size_t, value = sizeof(T)); - }; - -// A metafunction returning a POD type which can store U, where T == -// U&. If T is not a reference type, returns a POD which can store T. -template <class T> -struct referent_storage -{ - typedef typename aligned_storage<referent_size<T>::value, alignment_of<T>::value>::type type; -}; - -}}} // namespace boost::python::detail - -#endif // REFERENT_STORAGE_DWA200278_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/sfinae.hpp b/contrib/restricted/boost/python/include/boost/python/detail/sfinae.hpp deleted file mode 100644 index 6281875111b..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/sfinae.hpp +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright David Abrahams 2004. 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 SFINAE_DWA2004723_HPP -# define SFINAE_DWA2004723_HPP - -# include <boost/python/detail/prefix.hpp> - -# if defined(BOOST_NO_SFINAE) && !defined(BOOST_MSVC) -# define BOOST_PYTHON_NO_SFINAE -# endif - -#endif // SFINAE_DWA2004723_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/signature.hpp b/contrib/restricted/boost/python/include/boost/python/detail/signature.hpp deleted file mode 100644 index 11268b92cf2..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/signature.hpp +++ /dev/null @@ -1,106 +0,0 @@ -#if !defined(BOOST_PP_IS_ITERATING) - -// 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 SIGNATURE_DWA20021121_HPP -# define SIGNATURE_DWA20021121_HPP - -# include <boost/python/type_id.hpp> - -# include <boost/python/detail/preprocessor.hpp> -# include <boost/python/detail/indirect_traits.hpp> -# include <boost/python/converter/pytype_function.hpp> - -# include <boost/preprocessor/iterate.hpp> -# include <boost/preprocessor/iteration/local.hpp> - -# include <boost/mpl/at.hpp> -# include <boost/mpl/size.hpp> - -namespace boost { namespace python { namespace detail { - -struct signature_element -{ - char const* basename; - converter::pytype_function pytype_f; - bool lvalue; -}; - -struct py_func_sig_info -{ - signature_element const *signature; - signature_element const *ret; -}; - -template <unsigned> struct signature_arity; - -# define BOOST_PP_ITERATION_PARAMS_1 \ - (3, (0, BOOST_PYTHON_MAX_ARITY + 1, <boost/python/detail/signature.hpp>)) -# include BOOST_PP_ITERATE() - -// A metafunction returning the base class used for -// -// signature<class F, class CallPolicies, class Sig>. -// -template <class Sig> -struct signature_base_select -{ - enum { arity = mpl::size<Sig>::value - 1 }; - typedef typename signature_arity<arity>::template impl<Sig> type; -}; - -template <class Sig> -struct signature - : signature_base_select<Sig>::type -{ -}; - -}}} // namespace boost::python::detail - -# endif // SIGNATURE_DWA20021121_HPP - -#else - -# define N BOOST_PP_ITERATION() - -template <> -struct signature_arity<N> -{ - template <class Sig> - struct impl - { - static signature_element const* elements() - { - static signature_element const result[N+2] = { - -#ifndef BOOST_PYTHON_NO_PY_SIGNATURES -# define BOOST_PP_LOCAL_MACRO(i) \ - { \ - type_id<BOOST_DEDUCED_TYPENAME mpl::at_c<Sig,i>::type>().name() \ - , &converter::expected_pytype_for_arg<BOOST_DEDUCED_TYPENAME mpl::at_c<Sig,i>::type>::get_pytype \ - , indirect_traits::is_reference_to_non_const<BOOST_DEDUCED_TYPENAME mpl::at_c<Sig,i>::type>::value \ - }, -#else -# define BOOST_PP_LOCAL_MACRO(i) \ - { \ - type_id<BOOST_DEDUCED_TYPENAME mpl::at_c<Sig,i>::type>().name() \ - , 0 \ - , indirect_traits::is_reference_to_non_const<BOOST_DEDUCED_TYPENAME mpl::at_c<Sig,i>::type>::value \ - }, -#endif - -# define BOOST_PP_LOCAL_LIMITS (0, N) -# include BOOST_PP_LOCAL_ITERATE() - {0,0,0} - }; - return result; - } - }; -}; - -#endif // BOOST_PP_IS_ITERATING - - diff --git a/contrib/restricted/boost/python/include/boost/python/detail/string_literal.hpp b/contrib/restricted/boost/python/include/boost/python/detail/string_literal.hpp deleted file mode 100644 index 0961ec7c4e2..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/string_literal.hpp +++ /dev/null @@ -1,49 +0,0 @@ -// 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 STRING_LITERAL_DWA2002629_HPP -# define STRING_LITERAL_DWA2002629_HPP - -# include <cstddef> -# include <boost/type.hpp> -# include <boost/python/detail/type_traits.hpp> -# include <boost/mpl/bool.hpp> -# include <boost/detail/workaround.hpp> - -namespace boost { namespace python { namespace detail { - -template <class T> -struct is_string_literal : mpl::false_ -{ -}; - -# if !defined(__MWERKS__) || __MWERKS__ > 0x2407 -template <std::size_t n> -struct is_string_literal<char const[n]> : mpl::true_ -{ -}; - -# if BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590040)) \ - || (defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 730) -// This compiler mistakenly gets the type of string literals as char* -// instead of char[NN]. -template <> -struct is_string_literal<char* const> : mpl::true_ -{ -}; -# endif - -# else - -// CWPro7 has trouble with the array type deduction above -template <class T, std::size_t n> -struct is_string_literal<T[n]> - : is_same<T, char const> -{ -}; -# endif - -}}} // namespace boost::python::detail - -#endif // STRING_LITERAL_DWA2002629_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/type_list.hpp b/contrib/restricted/boost/python/include/boost/python/detail/type_list.hpp deleted file mode 100644 index 0ad3f63d84d..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/type_list.hpp +++ /dev/null @@ -1,35 +0,0 @@ -// 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 TYPE_LIST_DWA2002913_HPP -# define TYPE_LIST_DWA2002913_HPP - -# include <boost/config.hpp> -# include <boost/python/detail/preprocessor.hpp> -# include <boost/preprocessor/arithmetic/inc.hpp> - -# if BOOST_PYTHON_MAX_ARITY + 2 > BOOST_PYTHON_MAX_BASES -# define BOOST_PYTHON_LIST_SIZE BOOST_PP_INC(BOOST_PP_INC(BOOST_PYTHON_MAX_ARITY)) -# else -# define BOOST_PYTHON_LIST_SIZE BOOST_PYTHON_MAX_BASES -# endif - -// Compute the MPL vector header to use for lists up to BOOST_PYTHON_LIST_SIZE in length -# if BOOST_PYTHON_LIST_SIZE > 48 -# error Arities above 48 not supported by Boost.Python due to MPL internal limit -# elif BOOST_PYTHON_LIST_SIZE > 38 -# include <boost/mpl/vector/vector50.hpp> -# elif BOOST_PYTHON_LIST_SIZE > 28 -# include <boost/mpl/vector/vector40.hpp> -# elif BOOST_PYTHON_LIST_SIZE > 18 -# include <boost/mpl/vector/vector30.hpp> -# elif BOOST_PYTHON_LIST_SIZE > 8 -# include <boost/mpl/vector/vector20.hpp> -# else -# include <boost/mpl/vector/vector10.hpp> -# endif - -# include <boost/python/detail/type_list_impl.hpp> - -#endif // TYPE_LIST_DWA2002913_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/type_list_impl.hpp b/contrib/restricted/boost/python/include/boost/python/detail/type_list_impl.hpp deleted file mode 100644 index fdcfa85030e..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/type_list_impl.hpp +++ /dev/null @@ -1,57 +0,0 @@ -#ifndef BOOST_PP_IS_ITERATING -// 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 TYPE_LIST_IMPL_DWA2002913_HPP -# define TYPE_LIST_IMPL_DWA2002913_HPP - -# include <boost/python/detail/type_list.hpp> - -# include <boost/preprocessor/enum_params.hpp> -# include <boost/preprocessor/enum_params_with_a_default.hpp> -# include <boost/preprocessor/repetition/enum.hpp> -# include <boost/preprocessor/comma_if.hpp> -# include <boost/preprocessor/arithmetic/sub.hpp> -# include <boost/preprocessor/iterate.hpp> -# include <boost/preprocessor/repetition/enum_trailing.hpp> - -namespace boost { namespace python { namespace detail { - -template <BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(BOOST_PYTHON_LIST_SIZE, class T, mpl::void_)> -struct type_list - : BOOST_PP_CAT(mpl::vector,BOOST_PYTHON_LIST_SIZE)<BOOST_PP_ENUM_PARAMS_Z(1, BOOST_PYTHON_LIST_SIZE, T)> -{ -}; - -# define BOOST_PP_ITERATION_PARAMS_1 \ - (3, (0, BOOST_PP_DEC(BOOST_PYTHON_LIST_SIZE), <boost/python/detail/type_list_impl.hpp>)) -# include BOOST_PP_ITERATE() - - -}}} // namespace boost::python::detail - -# endif // TYPE_LIST_IMPL_DWA2002913_HPP - -#else // BOOST_PP_IS_ITERATING - -# define N BOOST_PP_ITERATION() -# define BOOST_PYTHON_VOID_ARGS BOOST_PP_SUB_D(1,BOOST_PYTHON_LIST_SIZE,N) - -template < - BOOST_PP_ENUM_PARAMS_Z(1, N, class T) - > -struct type_list< - BOOST_PP_ENUM_PARAMS_Z(1, N, T) - BOOST_PP_COMMA_IF(N) - BOOST_PP_ENUM( - BOOST_PYTHON_VOID_ARGS, BOOST_PYTHON_FIXED, mpl::void_) - > - : BOOST_PP_CAT(mpl::vector,N)<BOOST_PP_ENUM_PARAMS_Z(1, N, T)> -{ -}; - -# undef BOOST_PYTHON_VOID_ARGS -# undef N - -#endif // BOOST_PP_IS_ITERATING diff --git a/contrib/restricted/boost/python/include/boost/python/detail/type_traits.hpp b/contrib/restricted/boost/python/include/boost/python/detail/type_traits.hpp deleted file mode 100644 index fda54c80f2e..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/type_traits.hpp +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright Shreyans Doshi 2017. -// 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 BOOST_PYTHON_DETAIL_TYPE_TRAITS_HPP -# define BOOST_PYTHON_DETAIL_TYPE_TRAITS_HPP - - -#include <boost/config.hpp> -#ifdef BOOST_NO_CXX11_HDR_TYPE_TRAITS -# include <boost/type_traits/transform_traits.hpp> -# include <boost/type_traits/same_traits.hpp> -# include <boost/type_traits/cv_traits.hpp> -# include <boost/type_traits/is_polymorphic.hpp> -# include <boost/type_traits/composite_traits.hpp> -# include <boost/type_traits/conversion_traits.hpp> -# include <boost/type_traits/add_pointer.hpp> -# include <boost/type_traits/remove_pointer.hpp> -# include <boost/type_traits/is_void.hpp> -# include <boost/type_traits/object_traits.hpp> -# include <boost/type_traits/add_lvalue_reference.hpp> -# include <boost/type_traits/function_traits.hpp> -# include <boost/type_traits/is_scalar.hpp> -# include <boost/type_traits/alignment_traits.hpp> -# include <boost/mpl/bool.hpp> -#else -# include <type_traits> -#endif - -# include <boost/type_traits/is_base_and_derived.hpp> -# include <boost/type_traits/alignment_traits.hpp> -# include <boost/type_traits/has_trivial_copy.hpp> - - -namespace boost { namespace python { namespace detail { - -#ifdef BOOST_NO_CXX11_HDR_TYPE_TRAITS - using boost::alignment_of; - using boost::add_const; - using boost::add_cv; - using boost::add_lvalue_reference; - using boost::add_pointer; - - using boost::is_array; - using boost::is_class; - using boost::is_const; - using boost::is_convertible; - using boost::is_enum; - using boost::is_function; - using boost::is_integral; - using boost::is_lvalue_reference; - using boost::is_member_function_pointer; - using boost::is_member_pointer; - using boost::is_pointer; - using boost::is_polymorphic; - using boost::is_reference; - using boost::is_same; - using boost::is_scalar; - using boost::is_union; - using boost::is_void; - using boost::is_volatile; - - using boost::remove_reference; - using boost::remove_pointer; - using boost::remove_cv; - using boost::remove_const; - - using boost::mpl::true_; - using boost::mpl::false_; -#else - using std::alignment_of; - using std::add_const; - using std::add_cv; - using std::add_lvalue_reference; - using std::add_pointer; - - using std::is_array; - using std::is_class; - using std::is_const; - using std::is_convertible; - using std::is_enum; - using std::is_function; - using std::is_integral; - using std::is_lvalue_reference; - using std::is_member_function_pointer; - using std::is_member_pointer; - using std::is_pointer; - using std::is_polymorphic; - using std::is_reference; - using std::is_same; - using std::is_scalar; - using std::is_union; - using std::is_void; - using std::is_volatile; - - using std::remove_reference; - using std::remove_pointer; - using std::remove_cv; - using std::remove_const; - - typedef std::integral_constant<bool, true> true_; - typedef std::integral_constant<bool, false> false_; -#endif - using boost::is_base_and_derived; - using boost::type_with_alignment; - using boost::has_trivial_copy; -}}} // namespace boost::python::detail - - -#endif //BOOST_DETAIL_TYPE_TRAITS_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/unwind_type.hpp b/contrib/restricted/boost/python/include/boost/python/detail/unwind_type.hpp deleted file mode 100644 index b81bf7c8981..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/unwind_type.hpp +++ /dev/null @@ -1,172 +0,0 @@ -// 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 UNWIND_TYPE_DWA200222_HPP -# define UNWIND_TYPE_DWA200222_HPP - -# include <boost/python/detail/cv_category.hpp> -# include <boost/python/detail/indirect_traits.hpp> -# include <boost/python/detail/type_traits.hpp> - -namespace boost { namespace python { namespace detail { - -#if (!defined(_MSC_VER) || _MSC_VER >= 1915) -// If forward declared, msvc6.5 does not recognize them as inline. -// However, as of msvc14.15 (_MSC_VER 1915/Visual Studio 15.8.0) name lookup is now consistent with other compilers. -// forward declaration, required (at least) by Tru64 cxx V6.5-042 and msvc14.15 -template <class Generator, class U> -inline typename Generator::result_type -unwind_type(U const& p, Generator* = 0); - -// forward declaration, required (at least) by Tru64 cxx V6.5-042 and msvc14.15 -template <class Generator, class U> -inline typename Generator::result_type -unwind_type(boost::type<U>*p = 0, Generator* = 0); -#endif - -template <class Generator, class U> -inline typename Generator::result_type -unwind_type_cv(U* p, cv_unqualified, Generator* = 0) -{ - return Generator::execute(p); -} - -template <class Generator, class U> -inline typename Generator::result_type -unwind_type_cv(U const* p, const_, Generator* = 0) -{ - return unwind_type(const_cast<U*>(p), (Generator*)0); -} - -template <class Generator, class U> -inline typename Generator::result_type -unwind_type_cv(U volatile* p, volatile_, Generator* = 0) -{ - return unwind_type(const_cast<U*>(p), (Generator*)0); -} - -template <class Generator, class U> -inline typename Generator::result_type -unwind_type_cv(U const volatile* p, const_volatile_, Generator* = 0) -{ - return unwind_type(const_cast<U*>(p), (Generator*)0); -} - -template <class Generator, class U> -inline typename Generator::result_type -unwind_ptr_type(U* p, Generator* = 0) -{ - typedef typename cv_category<U>::type tag; - return unwind_type_cv<Generator>(p, tag()); -} - -template <bool is_ptr> -struct unwind_helper -{ - template <class Generator, class U> - static typename Generator::result_type - execute(U p, Generator* = 0) - { - return unwind_ptr_type(p, (Generator*)0); - } -}; - -template <> -struct unwind_helper<false> -{ - template <class Generator, class U> - static typename Generator::result_type - execute(U& p, Generator* = 0) - { - return unwind_ptr_type(&p, (Generator*)0); - } -}; - -template <class Generator, class U> -inline typename Generator::result_type -#if (!defined(_MSC_VER) || _MSC_VER >= 1915) -unwind_type(U const& p, Generator*) -#else -unwind_type(U const& p, Generator* = 0) -#endif -{ - return unwind_helper<is_pointer<U>::value>::execute(p, (Generator*)0); -} - -enum { direct_ = 0, pointer_ = 1, reference_ = 2, reference_to_pointer_ = 3 }; -template <int indirection> struct unwind_helper2; - -template <> -struct unwind_helper2<direct_> -{ - template <class Generator, class U> - static typename Generator::result_type - execute(U(*)(), Generator* = 0) - { - return unwind_ptr_type((U*)0, (Generator*)0); - } -}; - -template <> -struct unwind_helper2<pointer_> -{ - template <class Generator, class U> - static typename Generator::result_type - execute(U*(*)(), Generator* = 0) - { - return unwind_ptr_type((U*)0, (Generator*)0); - } -}; - -template <> -struct unwind_helper2<reference_> -{ - template <class Generator, class U> - static typename Generator::result_type - execute(U&(*)(), Generator* = 0) - { - return unwind_ptr_type((U*)0, (Generator*)0); - } -}; - -template <> -struct unwind_helper2<reference_to_pointer_> -{ - template <class Generator, class U> - static typename Generator::result_type - execute(U&(*)(), Generator* = 0) - { - return unwind_ptr_type(U(0), (Generator*)0); - } -}; - -// Call this one with both template parameters explicitly specified -// and no function arguments: -// -// return unwind_type<my_generator,T>(); -// -// Doesn't work if T is an array type; we could handle that case, but -// why bother? -template <class Generator, class U> -inline typename Generator::result_type -#if (!defined(_MSC_VER) || _MSC_VER >= 1915) -unwind_type(boost::type<U>*, Generator*) -#else -unwind_type(boost::type<U>*p =0, Generator* =0) -#endif -{ - BOOST_STATIC_CONSTANT(int, indirection - = (is_pointer<U>::value ? pointer_ : 0) - + (indirect_traits::is_reference_to_pointer<U>::value - ? reference_to_pointer_ - : is_lvalue_reference<U>::value - ? reference_ - : 0)); - - return unwind_helper2<indirection>::execute((U(*)())0,(Generator*)0); -} - -}}} // namespace boost::python::detail - -#endif // UNWIND_TYPE_DWA200222_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/value_arg.hpp b/contrib/restricted/boost/python/include/boost/python/detail/value_arg.hpp deleted file mode 100644 index 2c938dacca2..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/value_arg.hpp +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright David Abrahams 2004. 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 VALUE_ARG_DWA2004312_HPP -# define VALUE_ARG_DWA2004312_HPP - -# include <boost/python/detail/copy_ctor_mutates_rhs.hpp> -# include <boost/mpl/if.hpp> -# include <boost/python/detail/indirect_traits.hpp> - -namespace boost { namespace python { namespace detail { - -template <class T> -struct value_arg - : mpl::if_< - copy_ctor_mutates_rhs<T> - , T - , typename add_lvalue_reference< - typename add_const<T>::type - >::type - > -{}; - -}}} // namespace boost::python::detail - -#endif // VALUE_ARG_DWA2004312_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/value_is_shared_ptr.hpp b/contrib/restricted/boost/python/include/boost/python/detail/value_is_shared_ptr.hpp deleted file mode 100644 index 53e687f016e..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/value_is_shared_ptr.hpp +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright David Abrahams 2003. -// Copyright Stefan Seefeld 2016. -// 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 boost_python_detail_value_is_shared_ptr_hpp_ -#define boost_python_detail_value_is_shared_ptr_hpp_ - -#include <boost/python/detail/value_is_xxx.hpp> -#include <boost/python/detail/is_shared_ptr.hpp> - -namespace boost { namespace python { namespace detail { - -template <class X_> -struct value_is_shared_ptr -{ - static bool const value = is_shared_ptr<typename remove_cv< - typename remove_reference<X_> - ::type> - ::type> - ::value; - typedef mpl::bool_<value> type; -}; - -}}} // namespace boost::python::detail - -#endif // VALUE_IS_SHARED_PTR_DWA2003224_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/value_is_xxx.hpp b/contrib/restricted/boost/python/include/boost/python/detail/value_is_xxx.hpp deleted file mode 100644 index e270f89ca38..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/value_is_xxx.hpp +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright David Abrahams 2003. -// 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 VALUE_IS_XXX_DWA2003224_HPP -# define VALUE_IS_XXX_DWA2003224_HPP - -# include <boost/config.hpp> -# include <boost/mpl/bool.hpp> -# include <boost/preprocessor/enum_params.hpp> - -# include <boost/python/detail/type_traits.hpp> -# include <boost/python/detail/is_xxx.hpp> - -namespace boost { namespace python { namespace detail { - -# define BOOST_PYTHON_VALUE_IS_XXX_DEF(name, qualified_name, nargs) \ -template <class X_> \ -struct value_is_##name \ -{ \ - BOOST_PYTHON_IS_XXX_DEF(name,qualified_name,nargs) \ - BOOST_STATIC_CONSTANT(bool, value = is_##name< \ - typename remove_cv< \ - typename remove_reference<X_>::type \ - >::type \ - >::value); \ - typedef mpl::bool_<value> type; \ - \ -}; - -}}} // namespace boost::python::detail - -#endif // VALUE_IS_XXX_DWA2003224_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/void_ptr.hpp b/contrib/restricted/boost/python/include/boost/python/detail/void_ptr.hpp deleted file mode 100644 index 5543b23a4ad..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/void_ptr.hpp +++ /dev/null @@ -1,35 +0,0 @@ -// 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 VOID_PTR_DWA200239_HPP -# define VOID_PTR_DWA200239_HPP - -# include <boost/python/detail/type_traits.hpp> - -namespace boost { namespace python { namespace detail { - -template <class U> -inline U& void_ptr_to_reference(void const volatile* p, U&(*)()) -{ - return *(U*)p; -} - -template <class T> -inline void write_void_ptr(void const volatile* storage, void* ptr, T*) -{ - *(T**)storage = (T*)ptr; -} - -// writes U(ptr) into the storage -template <class U> -inline void write_void_ptr_reference(void const volatile* storage, void* ptr, U&(*)()) -{ - // stripping CV qualification suppresses warnings on older EDGs - typedef typename remove_cv<U>::type u_stripped; - write_void_ptr(storage, ptr, u_stripped(0)); -} - -}}} // namespace boost::python::detail - -#endif // VOID_PTR_DWA200239_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/void_return.hpp b/contrib/restricted/boost/python/include/boost/python/detail/void_return.hpp deleted file mode 100644 index 30db8251770..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/void_return.hpp +++ /dev/null @@ -1,42 +0,0 @@ -// 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 VOID_RETURN_DWA200274_HPP -# define VOID_RETURN_DWA200274_HPP - -# include <boost/config.hpp> - -namespace boost { namespace python { namespace detail { - -struct void_return -{ - void_return() {} - private: - void operator=(void_return const&); -}; - -template <class T> -struct returnable -{ - typedef T type; -}; - -# ifdef BOOST_NO_VOID_RETURNS -template <> -struct returnable<void> -{ - typedef void_return type; -}; - -# ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS -template <> struct returnable<const void> : returnable<void> {}; -template <> struct returnable<volatile void> : returnable<void> {}; -template <> struct returnable<const volatile void> : returnable<void> {}; -# endif - -# endif // BOOST_NO_VOID_RETURNS - -}}} // namespace boost::python::detail - -#endif // VOID_RETURN_DWA200274_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/detail/wrap_python.hpp b/contrib/restricted/boost/python/include/boost/python/detail/wrap_python.hpp deleted file mode 100644 index 037e4bf2ec5..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/wrap_python.hpp +++ /dev/null @@ -1,252 +0,0 @@ -// (C) Copyright David Abrahams 2000. -// 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) -// -// The author gratefully acknowleges the support of Dragon Systems, Inc., in -// producing this work. - -// This file serves as a wrapper around <Python.h> which allows it to be -// compiled with GCC 2.95.2 under Win32 and which disables the default MSVC -// behavior so that a program may be compiled in debug mode without requiring a -// special debugging build of the Python library. - - -// To use the Python debugging library, #define BOOST_DEBUG_PYTHON on the -// compiler command-line. - -// Revision History: -// 05 Mar 01 Suppress warnings under Cygwin with Python 2.0 (Dave Abrahams) -// 04 Mar 01 Rolled in some changes from the Dragon fork (Dave Abrahams) -// 01 Mar 01 define PyObject_INIT() for Python 1.x (Dave Abrahams) - -#ifdef _DEBUG -# ifndef BOOST_DEBUG_PYTHON -# ifdef _MSC_VER - // VC8.0 will complain if system headers are #included both with - // and without _DEBUG defined, so we have to #include all the - // system headers used by pyconfig.h right here. -# include <stddef.h> -# include <stdarg.h> -# include <stdio.h> -# include <stdlib.h> -# include <assert.h> -# include <errno.h> -# include <ctype.h> -# include <wchar.h> -# include <basetsd.h> -# include <io.h> -# include <limits.h> -# include <float.h> -# include <string.h> -# include <math.h> -# include <time.h> -# endif -# undef _DEBUG // Don't let Python force the debug library just because we're debugging. -# define DEBUG_UNDEFINED_FROM_WRAP_PYTHON_H -# endif -#endif - -// pyconfig.h defines a macro with hypot name, what breaks libstdc++ math headers -// that Python.h tries to include afterwards. -#if defined(__MINGW32__) -# include <cmath> -# include <math.h> -#endif - -# include <pyconfig.h> -# if defined(_SGI_COMPILER_VERSION) && _SGI_COMPILER_VERSION >= 740 -# undef _POSIX_C_SOURCE -# undef _XOPEN_SOURCE -# undef HAVE_STDINT_H // undo Python 2.5.1 define -# endif - -// -// Python's LongObject.h helpfully #defines ULONGLONG_MAX for us, -// which confuses Boost's config -// -#include <limits.h> -#ifndef ULONG_MAX -# define BOOST_PYTHON_ULONG_MAX_UNDEFINED -#endif -#ifndef LONGLONG_MAX -# define BOOST_PYTHON_LONGLONG_MAX_UNDEFINED -#endif -#ifndef ULONGLONG_MAX -# define BOOST_PYTHON_ULONGLONG_MAX_UNDEFINED -#endif - -// -// Get ahold of Python's version number -// -#include <patchlevel.h> - -#if PY_MAJOR_VERSION<2 || PY_MAJOR_VERSION==2 && PY_MINOR_VERSION<2 -#error Python 2.2 or higher is required for this version of Boost.Python. -#endif - -// -// Some things we need in order to get Python.h to work with compilers other -// than MSVC on Win32 -// -#if defined(_WIN32) || defined(__CYGWIN__) - -# if defined(__GNUC__) && defined(__CYGWIN__) - -# if defined(__LP64__) -# define SIZEOF_LONG 8 -# else -# define SIZEOF_LONG 4 -# endif - - -# if PY_MAJOR_VERSION < 2 || PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION <= 2 - -typedef int pid_t; - -# if defined(__LP64__) -# define WORD_BIT 64 -# else -# define WORD_BIT 32 -# endif -# define hypot _hypot -# include <stdio.h> - -# if PY_MAJOR_VERSION < 2 -# define HAVE_CLOCK -# define HAVE_STRFTIME -# define HAVE_STRERROR -# endif - -# define NT_THREADS - -# ifndef NETSCAPE_PI -# define USE_SOCKET -# endif - -# ifdef USE_DL_IMPORT -# define DL_IMPORT(RTYPE) __declspec(dllimport) RTYPE -# endif - -# ifdef USE_DL_EXPORT -# define DL_IMPORT(RTYPE) __declspec(dllexport) RTYPE -# define DL_EXPORT(RTYPE) __declspec(dllexport) RTYPE -# endif - -# define HAVE_LONG_LONG 1 -# define LONG_LONG long long -# endif - -# elif defined(__MWERKS__) - -# ifndef _MSC_VER -# define PY_MSC_VER_DEFINED_FROM_WRAP_PYTHON_H 1 -# define _MSC_VER 900 -# endif - -# undef hypot // undo the evil #define left by Python. - -# elif defined(__BORLANDC__) && !defined(__clang__) -# undef HAVE_HYPOT -# define HAVE_HYPOT 1 -# endif - -#endif // _WIN32 - -#if defined(__GNUC__) -# if defined(__has_warning) -# define BOOST_PYTHON_GCC_HAS_WREGISTER __has_warning("-Wregister") -# else -# define BOOST_PYTHON_GCC_HAS_WREGISTER __GNUC__ >= 7 -# endif -#else -# define BOOST_PYTHON_GCC_HAS_WREGISTER 0 -#endif - -// Python.h header uses `register` keyword until Python 3.4 -#if BOOST_PYTHON_GCC_HAS_WREGISTER -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wregister" -#elif defined(_MSC_VER) -# pragma warning(push) -# pragma warning(disable : 5033) // 'register' is no longer a supported storage class -#endif - -#if PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION == 2 && PY_MICRO_VERSION < 2 -# include <boost/python/detail/python22_fixed.h> -#else -# include <Python.h> -#endif - -#if BOOST_PYTHON_GCC_HAS_WREGISTER -# pragma GCC diagnostic pop -#elif defined(_MSC_VER) -# pragma warning(pop) -#endif -#undef BOOST_PYTHON_GCC_HAS_WREGISTER - -#ifdef BOOST_PYTHON_ULONG_MAX_UNDEFINED -# undef ULONG_MAX -# undef BOOST_PYTHON_ULONG_MAX_UNDEFINED -#endif - -#ifdef BOOST_PYTHON_LONGLONG_MAX_UNDEFINED -# undef LONGLONG_MAX -# undef BOOST_PYTHON_LONGLONG_MAX_UNDEFINED -#endif - -#ifdef BOOST_PYTHON_ULONGLONG_MAX_UNDEFINED -# undef ULONGLONG_MAX -# undef BOOST_PYTHON_ULONGLONG_MAX_UNDEFINED -#endif - -#ifdef PY_MSC_VER_DEFINED_FROM_WRAP_PYTHON_H -# undef _MSC_VER -#endif - -#ifdef DEBUG_UNDEFINED_FROM_WRAP_PYTHON_H -# undef DEBUG_UNDEFINED_FROM_WRAP_PYTHON_H -# define _DEBUG -# ifdef _CRT_NOFORCE_MANIFEST_DEFINED_FROM_WRAP_PYTHON_H -# undef _CRT_NOFORCE_MANIFEST_DEFINED_FROM_WRAP_PYTHON_H -# undef _CRT_NOFORCE_MANIFEST -# endif -#endif - -#if !defined(PY_MAJOR_VERSION) || PY_MAJOR_VERSION < 2 -# define PyObject_INIT(op, typeobj) \ - ( (op)->ob_type = (typeobj), _Py_NewReference((PyObject *)(op)), (op) ) -#endif - -// Define Python 3 macros for Python 2.x -#if PY_VERSION_HEX < 0x02060000 - -# define Py_TYPE(o) (((PyObject*)(o))->ob_type) -# define Py_REFCNT(o) (((PyObject*)(o))->ob_refcnt) -# define Py_SIZE(o) (((PyVarObject*)(o))->ob_size) - -# define PyVarObject_HEAD_INIT(type, size) \ - PyObject_HEAD_INIT(type) size, -#endif - -#if PY_VERSION_HEX < 0x030900A4 -# define Py_SET_TYPE(obj, type) ((Py_TYPE(obj) = (type)), (void)0) -# define Py_SET_SIZE(obj, size) ((Py_SIZE(obj) = (size)), (void)0) -#endif - - -#ifdef __MWERKS__ -# pragma warn_possunwant off -#elif _MSC_VER -# pragma warning(disable:4786) -#endif - -#if defined(HAVE_LONG_LONG) -# if defined(PY_LONG_LONG) -# define BOOST_PYTHON_LONG_LONG PY_LONG_LONG -# elif defined(LONG_LONG) -# define BOOST_PYTHON_LONG_LONG LONG_LONG -# else -# error "HAVE_LONG_LONG defined but not PY_LONG_LONG or LONG_LONG" -# endif -#endif diff --git a/contrib/restricted/boost/python/include/boost/python/detail/wrapper_base.hpp b/contrib/restricted/boost/python/include/boost/python/detail/wrapper_base.hpp deleted file mode 100644 index 60ac99436e1..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/detail/wrapper_base.hpp +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright David Abrahams 2004. 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 WRAPPER_BASE_DWA2004722_HPP -# define WRAPPER_BASE_DWA2004722_HPP - -# include <boost/python/detail/prefix.hpp> -# include <boost/python/detail/type_traits.hpp> - -namespace boost { namespace python { - -class override; - -namespace detail -{ - class wrapper_base; - - namespace wrapper_base_ // ADL disabler - { - inline PyObject* get_owner(wrapper_base const volatile& w); - - inline PyObject* - owner_impl(void const volatile* /*x*/, detail::false_) - { - return 0; - } - - template <class T> - inline PyObject* - owner_impl(T const volatile* x, detail::true_); - - template <class T> - inline PyObject* - owner(T const volatile* x) - { - return wrapper_base_::owner_impl(x,is_polymorphic<T>()); - } - } - - class BOOST_PYTHON_DECL wrapper_base - { - friend void initialize_wrapper(PyObject* self, wrapper_base* w); - friend PyObject* wrapper_base_::get_owner(wrapper_base const volatile& w); - protected: - wrapper_base() : m_self(0) {} - - override get_override( - char const* name, PyTypeObject* class_object) const; - - private: - void detach(); - - private: - PyObject* m_self; - }; - - namespace wrapper_base_ // ADL disabler - { - template <class T> - inline PyObject* - owner_impl(T const volatile* x, detail::true_) - { - if (wrapper_base const volatile* w = dynamic_cast<wrapper_base const volatile*>(x)) - { - return wrapper_base_::get_owner(*w); - } - return 0; - } - - inline PyObject* get_owner(wrapper_base const volatile& w) - { - return w.m_self; - } - } - - inline void initialize_wrapper(PyObject* self, wrapper_base* w) - { - w->m_self = self; - } - - inline void initialize_wrapper(PyObject* /*self*/, ...) {} - - - -} // namespace detail - -}} // namespace boost::python - -#endif // WRAPPER_BASE_DWA2004722_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/dict.hpp b/contrib/restricted/boost/python/include/boost/python/dict.hpp deleted file mode 100644 index 6fcaf14382a..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/dict.hpp +++ /dev/null @@ -1,152 +0,0 @@ -// 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 DICT_20020706_HPP -#define DICT_20020706_HPP - -# include <boost/python/detail/prefix.hpp> - -#include <boost/python/object.hpp> -#include <boost/python/list.hpp> -#include <boost/python/tuple.hpp> -#include <boost/python/converter/pytype_object_mgr_traits.hpp> - -namespace boost { namespace python { - -class dict; - -namespace detail -{ - struct BOOST_PYTHON_DECL dict_base : object - { - // D.clear() -> None. Remove all items from D. - void clear(); - - // D.copy() -> a shallow copy of D - dict copy(); - - // D.get(k[,d]) -> D[k] if D.has_key(k), else d. d defaults to None. - object get(object_cref k) const; - - object get(object_cref k, object_cref d) const; - - // D.has_key(k) -> 1 if D has a key k, else 0 - bool has_key(object_cref k) const; - - // D.items() -> list of D's (key, value) pairs, as 2-tuples - list items() const; - - // D.iteritems() -> an iterator over the (key, value) items of D - object iteritems() const; - - // D.iterkeys() -> an iterator over the keys of D - object iterkeys() const; - - // D.itervalues() -> an iterator over the values of D - object itervalues() const; - - // D.keys() -> list of D's keys - list keys() const; - - // D.popitem() -> (k, v), remove and return some (key, value) pair as a - // 2-tuple; but raise KeyError if D is empty - tuple popitem(); - - // D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if not D.has_key(k) - object setdefault(object_cref k); - - object setdefault(object_cref k, object_cref d); - - // D.update(E) -> None. Update D from E: for k in E.keys(): D[k] = E[k] - void update(object_cref E); - - // D.values() -> list of D's values - list values() const; - - protected: - // dict() -> new empty dictionary. - // dict(mapping) -> new dictionary initialized from a mapping object's - // (key, value) pairs. - // dict(seq) -> new dictionary initialized as if via: - dict_base(); // new dict - explicit dict_base(object_cref data); - - BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(dict_base, object) - private: - static detail::new_reference call(object const&); - }; -} - -class dict : public detail::dict_base -{ - typedef detail::dict_base base; - public: - // dict() -> new empty dictionary. - // dict(mapping) -> new dictionary initialized from a mapping object's - // (key, value) pairs. - // dict(seq) -> new dictionary initialized as if via: - dict() {} // new dict - - template <class T> - explicit dict(T const& data) - : base(object(data)) - { - } - - template<class T> - object get(T const& k) const - { - return base::get(object(k)); - } - - template<class T1, class T2> - object get(T1 const& k, T2 const& d) const - { - return base::get(object(k),object(d)); - } - - template<class T> - bool has_key(T const& k) const - { - return base::has_key(object(k)); - } - - template<class T> - object setdefault(T const& k) - { - return base::setdefault(object(k)); - } - - template<class T1, class T2> - object setdefault(T1 const& k, T2 const& d) - { - return base::setdefault(object(k),object(d)); - } - - template<class T> - void update(T const& E) - { - base::update(object(E)); - } - - public: // implementation detail -- for internal use only - BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(dict, base) -}; - -// -// Converter Specializations -// -namespace converter -{ - template <> - struct object_manager_traits<dict> - : pytype_object_manager_traits<&PyDict_Type,dict> - { - }; -} - -}} // namespace boost::python - -#endif - diff --git a/contrib/restricted/boost/python/include/boost/python/docstring_options.hpp b/contrib/restricted/boost/python/include/boost/python/docstring_options.hpp deleted file mode 100644 index 1914bd51a54..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/docstring_options.hpp +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright Ralf W. Grosse-Kunstleve 2006. -// 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 DOCSTRING_OPTIONS_RWGK20060111_HPP -# define DOCSTRING_OPTIONS_RWGK20060111_HPP - -#include <boost/python/object/function.hpp> - -namespace boost { namespace python { - -// Note: the static data members are defined in object/function.cpp - -class BOOST_PYTHON_DECL docstring_options : boost::noncopyable -{ - public: - docstring_options(bool show_all=true) - { - previous_show_user_defined_ = show_user_defined_; - previous_show_py_signatures_ = show_py_signatures_; - previous_show_cpp_signatures_ = show_cpp_signatures_; - show_user_defined_ = show_all; - show_cpp_signatures_ = show_all; - show_py_signatures_ = show_all; - } - - docstring_options(bool show_user_defined, bool show_signatures) - { - previous_show_user_defined_ = show_user_defined_; - previous_show_cpp_signatures_ = show_cpp_signatures_; - previous_show_py_signatures_ = show_py_signatures_; - show_user_defined_ = show_user_defined; - show_cpp_signatures_ = show_signatures; - show_py_signatures_ = show_signatures; - } - - docstring_options(bool show_user_defined, bool show_py_signatures, bool show_cpp_signatures) - { - previous_show_user_defined_ = show_user_defined_; - previous_show_cpp_signatures_ = show_cpp_signatures_; - previous_show_py_signatures_ = show_py_signatures_; - show_user_defined_ = show_user_defined; - show_cpp_signatures_ = show_cpp_signatures; - show_py_signatures_ = show_py_signatures; - } - - ~docstring_options() - { - show_user_defined_ = previous_show_user_defined_; - show_cpp_signatures_ = previous_show_cpp_signatures_; - show_py_signatures_ = previous_show_py_signatures_; - } - - void - disable_user_defined() { show_user_defined_ = false; } - - void - enable_user_defined() { show_user_defined_ = true; } - - void - disable_py_signatures() - { - show_py_signatures_ = false; - } - - void - enable_py_signatures() - { - show_py_signatures_ = true; - } - - void - disable_cpp_signatures() - { - show_cpp_signatures_ = false; - } - - void - enable_cpp_signatures() - { - show_cpp_signatures_ = true; - } - - void - disable_signatures() - { - show_cpp_signatures_ = false; - show_py_signatures_ = false; - } - - void - enable_signatures() - { - show_cpp_signatures_ = true; - show_py_signatures_ = true; - } - - void - disable_all() - { - show_user_defined_ = false; - show_cpp_signatures_ = false; - show_py_signatures_ = false; - } - - void - enable_all() - { - show_user_defined_ = true; - show_cpp_signatures_ = true; - show_py_signatures_ = true; - } - - friend struct objects::function; - - private: - static volatile bool show_user_defined_; - static volatile bool show_cpp_signatures_; - static volatile bool show_py_signatures_; - bool previous_show_user_defined_; - bool previous_show_cpp_signatures_; - bool previous_show_py_signatures_; -}; - -}} // namespace boost::python - -#endif // DOCSTRING_OPTIONS_RWGK20060111_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/errors.hpp b/contrib/restricted/boost/python/include/boost/python/errors.hpp deleted file mode 100644 index 1eec6c2fe66..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/errors.hpp +++ /dev/null @@ -1,55 +0,0 @@ -// (C) Copyright David Abrahams 2000. -// 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) -// -// The author gratefully acknowleges the support of Dragon Systems, Inc., in -// producing this work. - -#ifndef ERRORS_DWA052500_H_ -# define ERRORS_DWA052500_H_ - -# include <boost/python/detail/prefix.hpp> -# include <boost/function/function0.hpp> - -namespace boost { namespace python { - -struct BOOST_PYTHON_DECL error_already_set -{ - virtual ~error_already_set(); -}; - -// Handles exceptions caught just before returning to Python code. -// Returns true iff an exception was caught. -BOOST_PYTHON_DECL bool handle_exception_impl(function0<void>); - -template <class T> -bool handle_exception(T f) -{ - return handle_exception_impl(function0<void>(boost::ref(f))); -} - -namespace detail { inline void rethrow() { throw; } } - -inline void handle_exception() -{ - handle_exception(detail::rethrow); -} - -BOOST_PYTHON_DECL void throw_error_already_set(); - -template <class T> -inline T* expect_non_null(T* x) -{ - if (x == 0) - throw_error_already_set(); - return x; -} - -// Return source if it is an instance of pytype; throw an appropriate -// exception otherwise. -BOOST_PYTHON_DECL PyObject* pytype_check(PyTypeObject* pytype, PyObject* source); - -}} // namespace boost::python - -#endif // ERRORS_DWA052500_H_ diff --git a/contrib/restricted/boost/python/include/boost/python/exec.hpp b/contrib/restricted/boost/python/include/boost/python/exec.hpp deleted file mode 100644 index 32a74991a7c..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/exec.hpp +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright Stefan Seefeld 2005. -// 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 EXEC_SS20050616_HPP -# define EXEC_SS20050616_HPP - -# include <boost/python/object.hpp> -# include <boost/python/str.hpp> - -namespace boost -{ -namespace python -{ - -// Evaluate python expression from str. -// global and local are the global and local scopes respectively, -// used during evaluation. -object -BOOST_PYTHON_DECL -eval(str string, object global = object(), object local = object()); - -object -BOOST_PYTHON_DECL -eval(char const *string, object global = object(), object local = object()); - -// Execute an individual python statement from str. -// global and local are the global and local scopes respectively, -// used during execution. -object -BOOST_PYTHON_DECL -exec_statement(str string, object global = object(), object local = object()); - -object -BOOST_PYTHON_DECL -exec_statement(char const *string, object global = object(), object local = object()); - -// Execute python source code from str. -// global and local are the global and local scopes respectively, -// used during execution. -object -BOOST_PYTHON_DECL -exec(str string, object global = object(), object local = object()); - -object -BOOST_PYTHON_DECL -exec(char const *string, object global = object(), object local = object()); - -// Execute python source code from file filename. -// global and local are the global and local scopes respectively, -// used during execution. -object -BOOST_PYTHON_DECL -exec_file(str filename, object global = object(), object local = object()); - -object -BOOST_PYTHON_DECL -exec_file(char const *filename, object global = object(), object local = object()); - -} -} - -#endif diff --git a/contrib/restricted/boost/python/include/boost/python/extract.hpp b/contrib/restricted/boost/python/include/boost/python/extract.hpp deleted file mode 100644 index bfdeb83ce7d..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/extract.hpp +++ /dev/null @@ -1,259 +0,0 @@ -// 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 EXTRACT_DWA200265_HPP -# define EXTRACT_DWA200265_HPP - -# include <boost/python/detail/prefix.hpp> - -# include <boost/python/converter/object_manager.hpp> -# include <boost/python/converter/from_python.hpp> -# include <boost/python/converter/rvalue_from_python_data.hpp> -# include <boost/python/converter/registered.hpp> -# include <boost/python/converter/registered_pointee.hpp> - -# include <boost/python/object_core.hpp> -# include <boost/python/refcount.hpp> - -# 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/call_traits.hpp> - -#if BOOST_WORKAROUND(BOOST_INTEL_WIN, <= 900) -# define BOOST_EXTRACT_WORKAROUND () -#else -# define BOOST_EXTRACT_WORKAROUND -#endif - -namespace boost { namespace python { - -namespace api -{ - class object; -} - -namespace converter -{ - template <class Ptr> - struct extract_pointer - { - typedef Ptr result_type; - extract_pointer(PyObject*); - - bool check() const; - Ptr operator()() const; - - private: - PyObject* m_source; - void* m_result; - }; - - template <class Ref> - struct extract_reference - { - typedef Ref result_type; - extract_reference(PyObject*); - - bool check() const; - Ref operator()() const; - - private: - PyObject* m_source; - void* m_result; - }; - - template <class T> - struct extract_rvalue : private noncopyable - { - typedef typename mpl::if_< - python::detail::copy_ctor_mutates_rhs<T> - , T& - , typename call_traits<T>::param_type - >::type result_type; - - extract_rvalue(PyObject*); - - bool check() const; - result_type operator()() const; - private: - PyObject* m_source; - mutable rvalue_from_python_data<T> m_data; - }; - - template <class T> - struct extract_object_manager - { - typedef T result_type; - extract_object_manager(PyObject*); - - bool check() const; - result_type operator()() const; - private: - PyObject* m_source; - }; - - template <class T> - struct select_extract - { - BOOST_STATIC_CONSTANT( - bool, obj_mgr = is_object_manager<T>::value); - - BOOST_STATIC_CONSTANT( - bool, ptr = is_pointer<T>::value); - - BOOST_STATIC_CONSTANT( - bool, ref = is_reference<T>::value); - - typedef typename mpl::if_c< - obj_mgr - , extract_object_manager<T> - , typename mpl::if_c< - ptr - , extract_pointer<T> - , typename mpl::if_c< - ref - , extract_reference<T> - , extract_rvalue<T> - >::type - >::type - >::type type; - }; -} - -template <class T> -struct extract - : converter::select_extract<T>::type -{ - private: - typedef typename converter::select_extract<T>::type base; - public: - typedef typename base::result_type result_type; - - operator result_type() const - { - return (*this)(); - } - - extract(PyObject*); - extract(api::object const&); -}; - -// -// Implementations -// -template <class T> -inline extract<T>::extract(PyObject* o) - : base(o) -{ -} - -template <class T> -inline extract<T>::extract(api::object const& o) - : base(o.ptr()) -{ -} - -namespace converter -{ - template <class T> - inline extract_rvalue<T>::extract_rvalue(PyObject* x) - : m_source(x) - , m_data( - (rvalue_from_python_stage1)(x, registered<T>::converters) - ) - { - } - - template <class T> - inline bool - extract_rvalue<T>::check() const - { - return m_data.stage1.convertible; - } - - template <class T> - inline typename extract_rvalue<T>::result_type - extract_rvalue<T>::operator()() const - { - return *(T*)( - // Only do the stage2 conversion once - m_data.stage1.convertible == m_data.storage.bytes - ? m_data.storage.bytes - : (rvalue_from_python_stage2)(m_source, m_data.stage1, registered<T>::converters) - ); - } - - template <class Ref> - inline extract_reference<Ref>::extract_reference(PyObject* obj) - : m_source(obj) - , m_result( - (get_lvalue_from_python)(obj, registered<Ref>::converters) - ) - { - } - - template <class Ref> - inline bool extract_reference<Ref>::check() const - { - return m_result != 0; - } - - template <class Ref> - inline Ref extract_reference<Ref>::operator()() const - { - if (m_result == 0) - (throw_no_reference_from_python)(m_source, registered<Ref>::converters); - - return python::detail::void_ptr_to_reference(m_result, (Ref(*)())0); - } - - template <class Ptr> - inline extract_pointer<Ptr>::extract_pointer(PyObject* obj) - : m_source(obj) - , m_result( - obj == Py_None ? 0 : (get_lvalue_from_python)(obj, registered_pointee<Ptr>::converters) - ) - { - } - - template <class Ptr> - inline bool extract_pointer<Ptr>::check() const - { - return m_source == Py_None || m_result != 0; - } - - template <class Ptr> - inline Ptr extract_pointer<Ptr>::operator()() const - { - if (m_result == 0 && m_source != Py_None) - (throw_no_pointer_from_python)(m_source, registered_pointee<Ptr>::converters); - - return Ptr(m_result); - } - - template <class T> - inline extract_object_manager<T>::extract_object_manager(PyObject* obj) - : m_source(obj) - { - } - - template <class T> - inline bool extract_object_manager<T>::check() const - { - return object_manager_traits<T>::check(m_source); - } - - template <class T> - inline T extract_object_manager<T>::operator()() const - { - return T( - object_manager_traits<T>::adopt(python::incref(m_source)) - ); - } -} - -}} // namespace boost::python::converter - -#endif // EXTRACT_DWA200265_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/handle.hpp b/contrib/restricted/boost/python/include/boost/python/handle.hpp deleted file mode 100644 index ee9a7cd09d7..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/handle.hpp +++ /dev/null @@ -1,237 +0,0 @@ -// 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 HANDLE_DWA200269_HPP -# define HANDLE_DWA200269_HPP - -# include <boost/python/detail/prefix.hpp> - -# include <boost/python/cast.hpp> -# include <boost/python/errors.hpp> -# include <boost/python/borrowed.hpp> -# include <boost/python/handle_fwd.hpp> -# include <boost/python/refcount.hpp> -# include <boost/python/tag.hpp> -# include <boost/python/detail/raw_pyobject.hpp> - -namespace boost { namespace python { - -template <class T> struct null_ok; - -template <class T> -inline null_ok<T>* allow_null(T* p) -{ - return (null_ok<T>*)p; -} - -namespace detail -{ - template <class T> - inline T* manage_ptr(detail::borrowed<null_ok<T> >* p, int) - { - return python::xincref((T*)p); - } - - template <class T> - inline T* manage_ptr(null_ok<detail::borrowed<T> >* p, int) - { - return python::xincref((T*)p); - } - - template <class T> - inline T* manage_ptr(detail::borrowed<T>* p, long) - { - return python::incref(expect_non_null((T*)p)); - } - - template <class T> - inline T* manage_ptr(null_ok<T>* p, long) - { - return (T*)p; - } - - template <class T> - inline T* manage_ptr(T* p, ...) - { - return expect_non_null(p); - } -} - -template <class T> -class handle -{ - typedef T* (handle::* bool_type )() const; - - public: // types - typedef T element_type; - - public: // member functions - handle(); - ~handle(); - - template <class Y> - explicit handle(Y* p) - : m_p( - python::upcast<T>( - detail::manage_ptr(p, 0) - ) - ) - { - } - - handle& operator=(handle const& r) - { - python::xdecref(m_p); - m_p = python::xincref(r.m_p); - return *this; - } - - template<typename Y> - handle& operator=(handle<Y> const & r) // never throws - { - python::xdecref(m_p); - m_p = python::xincref(python::upcast<T>(r.get())); - return *this; - } - - template <typename Y> - handle(handle<Y> const& r) - : m_p(python::xincref(python::upcast<T>(r.get()))) - { - } - - handle(handle const& r) - : m_p(python::xincref(r.m_p)) - { - } - - T* operator-> () const; - T& operator* () const; - T* get() const; - T* release(); - void reset(); - - operator bool_type() const // never throws - { - return m_p ? &handle<T>::get : 0; - } - bool operator! () const; // never throws - - public: // implementation details -- do not touch - // Defining this in the class body suppresses a VC7 link failure - inline handle(detail::borrowed_reference x) - : m_p( - python::incref( - downcast<T>((PyObject*)x) - )) - { - } - - private: // data members - T* m_p; -}; - -#ifdef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP -} // namespace python -#endif - -template<class T> inline T * get_pointer(python::handle<T> const & p) -{ - return p.get(); -} - -#ifdef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP -namespace python { -#else - -// We don't want get_pointer above to hide the others -using boost::get_pointer; - -#endif - -typedef handle<PyTypeObject> type_handle; - -// -// Compile-time introspection -// -template<typename T> -class is_handle -{ - public: - BOOST_STATIC_CONSTANT(bool, value = false); -}; - -template<typename T> -class is_handle<handle<T> > -{ - public: - BOOST_STATIC_CONSTANT(bool, value = true); -}; - -// -// implementations -// -template <class T> -inline handle<T>::handle() - : m_p(0) -{ -} - -template <class T> -inline handle<T>::~handle() -{ - python::xdecref(m_p); -} - -template <class T> -inline T* handle<T>::operator->() const -{ - return m_p; -} - -template <class T> -inline T& handle<T>::operator*() const -{ - return *m_p; -} - -template <class T> -inline T* handle<T>::get() const -{ - return m_p; -} - -template <class T> -inline bool handle<T>::operator!() const -{ - return m_p == 0; -} - -template <class T> -inline T* handle<T>::release() -{ - T* result = m_p; - m_p = 0; - return result; -} - -template <class T> -inline void handle<T>::reset() -{ - python::xdecref(m_p); - m_p = 0; -} - -// Because get_managed_object must return a non-null PyObject*, we -// return Py_None if the handle is null. -template <class T> -inline PyObject* get_managed_object(handle<T> const& h, tag_t) -{ - return h.get() ? python::upcast<PyObject>(h.get()) : Py_None; -} - -}} // namespace boost::python - - -#endif // HANDLE_DWA200269_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/handle_fwd.hpp b/contrib/restricted/boost/python/include/boost/python/handle_fwd.hpp deleted file mode 100644 index 5987ec4fdbf..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/handle_fwd.hpp +++ /dev/null @@ -1,16 +0,0 @@ -// 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 HANDLE_FWD_DWA2002615_HPP -# define HANDLE_FWD_DWA2002615_HPP - -# include <boost/python/detail/prefix.hpp> - -namespace boost { namespace python { - -template <class T = PyObject> class handle; - -}} // namespace boost::python - -#endif // HANDLE_FWD_DWA2002615_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/import.hpp b/contrib/restricted/boost/python/include/boost/python/import.hpp deleted file mode 100644 index 45c02a9366b..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/import.hpp +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright Stefan Seefeld 2005. -// 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 IMPORT_SS20050624_HPP -# define IMPORT_SS20050624_HPP - -# include <boost/python/object.hpp> -# include <boost/python/str.hpp> - -namespace boost -{ -namespace python -{ - -// Import the named module and return a reference to it. -object BOOST_PYTHON_DECL import(str name); - -} -} - -#endif diff --git a/contrib/restricted/boost/python/include/boost/python/instance_holder.hpp b/contrib/restricted/boost/python/include/boost/python/instance_holder.hpp deleted file mode 100644 index 3113bd93c7f..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/instance_holder.hpp +++ /dev/null @@ -1,63 +0,0 @@ -// 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 INSTANCE_HOLDER_DWA2002517_HPP -# define INSTANCE_HOLDER_DWA2002517_HPP - -# include <boost/python/detail/prefix.hpp> - -# include <boost/noncopyable.hpp> -# include <boost/python/type_id.hpp> -# include <cstddef> - -namespace boost { namespace python { - -// Base class for all holders -struct BOOST_PYTHON_DECL instance_holder : private noncopyable -{ - public: - instance_holder(); - virtual ~instance_holder(); - - // return the next holder in a chain - instance_holder* next() const; - - // When the derived holder actually holds by [smart] pointer and - // null_ptr_only is set, only report that the type is held when - // the pointer is null. This is needed for proper shared_ptr - // support, to prevent holding shared_ptrs from being found when - // converting from python so that we can use the conversion method - // that always holds the Python object. - virtual void* holds(type_info, bool null_ptr_only) = 0; - - void install(PyObject* inst) noexcept; - - // These functions should probably be located elsewhere. - - // Allocate storage for an object of the given size at the given - // offset in the Python instance<> object if bytes are available - // there. Otherwise allocate size bytes of heap memory. - static void* allocate(PyObject*, std::size_t offset, std::size_t size, std::size_t alignment = 1); - - // Deallocate storage from the heap if it was not carved out of - // the given Python object by allocate(), above. - static void deallocate(PyObject*, void* storage) noexcept; - private: - instance_holder* m_next; -}; - -// This macro is needed for implementation of derived holders -# define BOOST_PYTHON_UNFORWARD(N,ignored) (typename unforward<A##N>::type)(a##N) - -// -// implementation -// -inline instance_holder* instance_holder::next() const -{ - return m_next; -} - -}} // namespace boost::python - -#endif // INSTANCE_HOLDER_DWA2002517_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/list.hpp b/contrib/restricted/boost/python/include/boost/python/list.hpp deleted file mode 100644 index 0d5e2c8fd94..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/list.hpp +++ /dev/null @@ -1,148 +0,0 @@ -// 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 LIST_DWA2002627_HPP -# define LIST_DWA2002627_HPP - -# include <boost/python/detail/prefix.hpp> - -# include <boost/python/object.hpp> -# include <boost/python/converter/pytype_object_mgr_traits.hpp> -# include <boost/python/ssize_t.hpp> - -namespace boost { namespace python { - -namespace detail -{ - struct BOOST_PYTHON_DECL list_base : object - { - void append(object_cref); // append object to end - - ssize_t count(object_cref value) const; // return number of occurrences of value - - void extend(object_cref sequence); // extend list by appending sequence elements - - long index(object_cref value) const; // return index of first occurrence of value - - void insert(ssize_t index, object_cref); // insert object before index - void insert(object const& index, object_cref); - - object pop(); // remove and return item at index (default last) - object pop(ssize_t index); - object pop(object const& index); - - void remove(object_cref value); // remove first occurrence of value - - void reverse(); // reverse *IN PLACE* - - void sort(); // sort *IN PLACE*; if given, cmpfunc(x, y) -> -1, 0, 1 -#if PY_VERSION_HEX >= 0x03000000 - void sort(args_proxy const &args, - kwds_proxy const &kwds); -#else - void sort(object_cref cmpfunc); -#endif - - protected: - list_base(); // new list - explicit list_base(object_cref sequence); // new list initialized from sequence's items - - BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(list_base, object) - private: - static detail::new_non_null_reference call(object const&); - }; -} - -class list : public detail::list_base -{ - typedef detail::list_base base; - public: - list() {} // new list - - template <class T> - explicit list(T const& sequence) - : base(object(sequence)) - { - } - - template <class T> - void append(T const& x) - { - base::append(object(x)); - } - - template <class T> - ssize_t count(T const& value) const - { - return base::count(object(value)); - } - - template <class T> - void extend(T const& x) - { - base::extend(object(x)); - } - - template <class T> - long index(T const& x) const - { - return base::index(object(x)); - } - - template <class T> - void insert(ssize_t index, T const& x) // insert object before index - { - base::insert(index, object(x)); - } - - template <class T> - void insert(object const& index, T const& x) // insert object before index - { - base::insert(index, object(x)); - } - - object pop() { return base::pop(); } - object pop(ssize_t index) { return base::pop(index); } - - template <class T> - object pop(T const& index) - { - return base::pop(object(index)); - } - - template <class T> - void remove(T const& value) - { - base::remove(object(value)); - } - -#if PY_VERSION_HEX <= 0x03000000 - void sort() { base::sort(); } - - template <class T> - void sort(T const& value) - { - base::sort(object(value)); - } -#endif - - public: // implementation detail -- for internal use only - BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(list, base) -}; - -// -// Converter Specializations -// -namespace converter -{ - template <> - struct object_manager_traits<list> - : pytype_object_manager_traits<&PyList_Type,list> - { - }; -} - -}} // namespace boost::python - -#endif // LIST_DWA2002627_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/long.hpp b/contrib/restricted/boost/python/include/boost/python/long.hpp deleted file mode 100644 index c15604c91c4..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/long.hpp +++ /dev/null @@ -1,68 +0,0 @@ -// 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 LONG_DWA2002627_HPP -# define LONG_DWA2002627_HPP - -# include <boost/python/detail/prefix.hpp> - -# include <boost/python/object.hpp> -# include <boost/python/converter/pytype_object_mgr_traits.hpp> - -namespace boost { namespace python { - -namespace detail -{ - struct BOOST_PYTHON_DECL long_base : object - { - protected: - long_base(); // new long_ - explicit long_base(object_cref rhs); - explicit long_base(object_cref rhs, object_cref base); - - BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(long_base, object) - - private: - static detail::new_reference call(object const&); - static detail::new_reference call(object const&, object const&); - }; -} - -class long_ : public detail::long_base -{ - typedef detail::long_base base; - public: - long_() {} // new long_ - - template <class T> - explicit long_(T const& rhs) - : detail::long_base(object(rhs)) - { - } - - template <class T, class U> - explicit long_(T const& rhs, U const& base) - : detail::long_base(object(rhs), object(base)) - { - } - - public: // implementation detail -- for internal use only - BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(long_, base) -}; - -// -// Converter Specializations -// -namespace converter -{ - template <> - struct object_manager_traits<long_> - : pytype_object_manager_traits<&PyLong_Type,long_> - { - }; -} - -}} // namespace boost::python - -#endif // LONG_DWA2002627_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/make_function.hpp b/contrib/restricted/boost/python/include/boost/python/make_function.hpp deleted file mode 100644 index 7dd7c316b38..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/make_function.hpp +++ /dev/null @@ -1,153 +0,0 @@ -// Copyright David Abrahams 2001. -// 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 MAKE_FUNCTION_DWA20011221_HPP -# define MAKE_FUNCTION_DWA20011221_HPP - -# include <boost/python/detail/prefix.hpp> - -# include <boost/python/default_call_policies.hpp> -# include <boost/python/args.hpp> -# include <boost/python/detail/caller.hpp> - -# include <boost/python/object/function_object.hpp> - -# include <boost/mpl/size.hpp> -# include <boost/mpl/int.hpp> - -namespace boost { namespace python { - -namespace detail -{ - // make_function_aux -- - // - // These helper functions for make_function (below) do the raw work - // of constructing a Python object from some invokable entity. See - // <boost/python/detail/caller.hpp> for more information about how - // the Sig arguments is used. - template <class F, class CallPolicies, class Sig> - object make_function_aux( - F f // An object that can be invoked by detail::invoke() - , CallPolicies const& p // CallPolicies to use in the invocation - , Sig const& // An MPL sequence of argument types expected by F - ) - { - return objects::function_object( - detail::caller<F,CallPolicies,Sig>(f, p) - ); - } - - // As above, except that it accepts argument keywords. NumKeywords - // is used only for a compile-time assertion to make sure the user - // doesn't pass more keywords than the function can accept. To - // disable all checking, pass mpl::int_<0> for NumKeywords. - template <class F, class CallPolicies, class Sig, class NumKeywords> - object make_function_aux( - F f - , CallPolicies const& p - , Sig const& - , detail::keyword_range const& kw // a [begin,end) pair of iterators over keyword names - , NumKeywords // An MPL integral type wrapper: the size of kw - ) - { - enum { arity = mpl::size<Sig>::value - 1 }; - - typedef typename detail::error::more_keywords_than_function_arguments< - NumKeywords::value, arity - >::too_many_keywords assertion BOOST_ATTRIBUTE_UNUSED; - - return objects::function_object( - detail::caller<F,CallPolicies,Sig>(f, p) - , kw); - } - - // Helpers for make_function when called with 3 arguments. These - // dispatch functions are used to discriminate between the cases - // when the 3rd argument is keywords or when it is a signature. - // - // @group { - template <class F, class CallPolicies, class Keywords> - object make_function_dispatch(F f, CallPolicies const& policies, Keywords const& kw, mpl::true_) - { - return detail::make_function_aux( - f - , policies - , detail::get_signature(f) - , kw.range() - , mpl::int_<Keywords::size>() - ); - } - - template <class F, class CallPolicies, class Signature> - object make_function_dispatch(F f, CallPolicies const& policies, Signature const& sig, mpl::false_) - { - return detail::make_function_aux( - f - , policies - , sig - ); - } - // } - - } - -// These overloaded functions wrap a function or member function -// pointer as a Python object, using optional CallPolicies, -// Keywords, and/or Signature. -// -// @group { -template <class F> -object make_function(F f) -{ - return detail::make_function_aux( - f,default_call_policies(), detail::get_signature(f)); -} - -template <class F, class CallPolicies> -object make_function(F f, CallPolicies const& policies) -{ - return detail::make_function_aux( - f, policies, detail::get_signature(f)); -} - -template <class F, class CallPolicies, class KeywordsOrSignature> -object make_function( - F f - , CallPolicies const& policies - , KeywordsOrSignature const& keywords_or_signature) -{ - typedef typename - detail::is_reference_to_keywords<KeywordsOrSignature&>::type - is_kw; - - return detail::make_function_dispatch( - f - , policies - , keywords_or_signature - , is_kw() - ); -} - -template <class F, class CallPolicies, class Keywords, class Signature> -object make_function( - F f - , CallPolicies const& policies - , Keywords const& kw - , Signature const& sig - ) -{ - return detail::make_function_aux( - f - , policies - , sig - , kw.range() - , mpl::int_<Keywords::size>() - ); -} -// } - -}} - - -#endif // MAKE_FUNCTION_DWA20011221_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/object.hpp b/contrib/restricted/boost/python/include/boost/python/object.hpp deleted file mode 100644 index 9adec90f64b..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/object.hpp +++ /dev/null @@ -1,27 +0,0 @@ -// 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_DWA2002612_HPP -# define OBJECT_DWA2002612_HPP - -# include <boost/python/ssize_t.hpp> -# include <boost/python/object_core.hpp> -# include <boost/python/object_attributes.hpp> -# include <boost/python/object_items.hpp> -# include <boost/python/object_slices.hpp> -# include <boost/python/object_operators.hpp> -# include <boost/python/converter/arg_to_python.hpp> - -namespace boost { namespace python { - - inline ssize_t len(object const& obj) - { - ssize_t result = PyObject_Length(obj.ptr()); - if (PyErr_Occurred()) throw_error_already_set(); - return result; - } - -}} // namespace boost::python - -#endif // OBJECT_DWA2002612_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/object/add_to_namespace.hpp b/contrib/restricted/boost/python/include/boost/python/object/add_to_namespace.hpp deleted file mode 100644 index 9f4167d6d27..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/object/add_to_namespace.hpp +++ /dev/null @@ -1,23 +0,0 @@ -// 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 ADD_TO_NAMESPACE_DWA200286_HPP -# define ADD_TO_NAMESPACE_DWA200286_HPP - -# include <boost/python/object_fwd.hpp> - -namespace boost { namespace python { namespace objects { - -// -// A setattr that's "smart" about function overloading (and docstrings). -// -BOOST_PYTHON_DECL void add_to_namespace( - object const& name_space, char const* name, object const& attribute); - -BOOST_PYTHON_DECL void add_to_namespace( - object const& name_space, char const* name, object const& attribute, char const* doc); - -}}} // namespace boost::python::objects - -#endif // ADD_TO_NAMESPACE_DWA200286_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/object/class.hpp b/contrib/restricted/boost/python/include/boost/python/object/class.hpp deleted file mode 100644 index f57ceda7bd1..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/object/class.hpp +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright David Abrahams 2001. -// 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 CLASS_DWA20011214_HPP -# define CLASS_DWA20011214_HPP - -# include <boost/python/detail/prefix.hpp> -# include <boost/python/object_core.hpp> -# include <boost/python/type_id.hpp> -# include <cstddef> - -namespace boost { namespace python { - -namespace objects { - -struct BOOST_PYTHON_DECL class_base : python::api::object -{ - // constructor - class_base( - char const* name // The name of the class - - , std::size_t num_types // A list of class_ids. The first is the type - , type_info const*const types // this is wrapping. The rest are the types of - // any bases. - - , char const* doc = 0 // Docstring, if any. - ); - - - // Implementation detail. Hiding this in the private section would - // require use of template friend declarations. - void enable_pickling_(bool getstate_manages_dict); - - protected: - void add_property( - char const* name, object const& fget, char const* docstr); - void add_property(char const* name, - object const& fget, object const& fset, char const* docstr); - - void add_static_property(char const* name, object const& fget); - void add_static_property(char const* name, object const& fget, object const& fset); - - // Retrieve the underlying object - void setattr(char const* name, object const&); - - // Set a special attribute in the class which tells Boost.Python - // to allocate extra bytes for embedded C++ objects in Python - // instances. - void set_instance_size(std::size_t bytes); - - // Set an __init__ function which throws an appropriate exception - // for abstract classes. - void def_no_init(); - - // Effects: - // setattr(self, staticmethod(getattr(self, method_name))) - void make_method_static(const char *method_name); -}; - -}}} // namespace boost::python::objects - -#endif // CLASS_DWA20011214_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/object/class_detail.hpp b/contrib/restricted/boost/python/include/boost/python/object/class_detail.hpp deleted file mode 100644 index a17a4f43309..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/object/class_detail.hpp +++ /dev/null @@ -1,19 +0,0 @@ -// 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 CLASS_DETAIL_DWA200295_HPP -# define CLASS_DETAIL_DWA200295_HPP - -# include <boost/python/handle.hpp> -# include <boost/python/type_id.hpp> - -namespace boost { namespace python { namespace objects { - -BOOST_PYTHON_DECL type_handle registered_class_object(type_info id); -BOOST_PYTHON_DECL type_handle class_metatype(); -BOOST_PYTHON_DECL type_handle class_type(); - -}}} // namespace boost::python::object - -#endif // CLASS_DETAIL_DWA200295_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/object/enum_base.hpp b/contrib/restricted/boost/python/include/boost/python/object/enum_base.hpp deleted file mode 100644 index be342742268..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/object/enum_base.hpp +++ /dev/null @@ -1,36 +0,0 @@ -// 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 ENUM_BASE_DWA200298_HPP -# define ENUM_BASE_DWA200298_HPP - -# include <boost/python/object_core.hpp> -# include <boost/python/type_id.hpp> -# include <boost/python/converter/to_python_function_type.hpp> -# include <boost/python/converter/convertible_function.hpp> -# include <boost/python/converter/constructor_function.hpp> - -namespace boost { namespace python { namespace objects { - -struct BOOST_PYTHON_DECL enum_base : python::api::object -{ - protected: - enum_base( - char const* name - , converter::to_python_function_t - , converter::convertible_function - , converter::constructor_function - , type_info - , const char *doc = 0 - ); - - void add_value(char const* name, long value); - void export_values(); - - static PyObject* to_python(PyTypeObject* type, long x); -}; - -}}} // namespace boost::python::object - -#endif // ENUM_BASE_DWA200298_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/object/find_instance.hpp b/contrib/restricted/boost/python/include/boost/python/object/find_instance.hpp deleted file mode 100644 index 3202c1cd155..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/object/find_instance.hpp +++ /dev/null @@ -1,21 +0,0 @@ -// 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 FIND_INSTANCE_DWA2002312_HPP -# define FIND_INSTANCE_DWA2002312_HPP - -# include <boost/python/type_id.hpp> - -namespace boost { namespace python { namespace objects { - -// Given a type_id, find the instance data which corresponds to it, or -// return 0 in case no such type is held. If null_shared_ptr_only is -// true and the type being sought is a shared_ptr, only find an -// instance if it turns out to be NULL. Needed for shared_ptr rvalue -// from_python support. -BOOST_PYTHON_DECL void* find_instance_impl(PyObject*, type_info, bool null_shared_ptr_only = false); - -}}} // namespace boost::python::objects - -#endif // FIND_INSTANCE_DWA2002312_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/object/forward.hpp b/contrib/restricted/boost/python/include/boost/python/object/forward.hpp deleted file mode 100644 index c6515bb55bb..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/object/forward.hpp +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright David Abrahams 2001. -// 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 FORWARD_DWA20011215_HPP -# define FORWARD_DWA20011215_HPP - -# include <boost/mpl/if.hpp> -# include <boost/ref.hpp> -# include <boost/python/detail/value_arg.hpp> -# include <boost/python/detail/type_traits.hpp> -# include <boost/python/detail/copy_ctor_mutates_rhs.hpp> -# include <boost/mpl/or.hpp> - -namespace boost { namespace python { namespace objects { - -// Very much like boost::reference_wrapper<T>, except that in this -// case T can be a reference already without causing a -// reference-to-reference error. -template <class T> -struct reference_to_value -{ - typedef typename boost::python::detail::add_lvalue_reference<typename - boost::python::detail::add_const<T>::type>::type reference; - - reference_to_value(reference x) : m_value(x) {} - reference get() const { return m_value; } - private: - reference m_value; -}; - -// A little metaprogram which selects the type to pass through an -// intermediate forwarding function when the destination argument type -// is T. -template <class T> -struct forward - : mpl::if_< - mpl::or_<python::detail::copy_ctor_mutates_rhs<T>, boost::python::detail::is_scalar<T> > - , T - , reference_to_value<T> - > -{ -}; - -template<typename T> -struct unforward -{ - typedef typename unwrap_reference<T>::type& type; -}; - -template<typename T> -struct unforward<reference_to_value<T> > -{ - typedef T type; -}; - -template <typename T> -struct unforward_cref - : python::detail::value_arg< - typename unwrap_reference<T>::type - > -{ -}; - -template<typename T> -struct unforward_cref<reference_to_value<T> > - : boost::python::detail::add_lvalue_reference<typename boost::python::detail::add_const<T>::type> -{ -}; - - -template <class T> -typename reference_to_value<T>::reference -do_unforward(reference_to_value<T> const& x, int) -{ - return x.get(); -} - -template <class T> -typename reference_wrapper<T>::type& -do_unforward(reference_wrapper<T> const& x, int) -{ - return x.get(); -} - -template <class T> -T const& do_unforward(T const& x, ...) -{ - return x; -} - -}}} // namespace boost::python::objects - -#endif // FORWARD_DWA20011215_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/object/function.hpp b/contrib/restricted/boost/python/include/boost/python/object/function.hpp deleted file mode 100644 index f29d344820f..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/object/function.hpp +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright David Abrahams 2001. -// 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 FUNCTION_DWA20011214_HPP -# define FUNCTION_DWA20011214_HPP - -# include <boost/python/detail/prefix.hpp> -# include <boost/python/args_fwd.hpp> -# include <boost/python/handle.hpp> -# include <boost/function/function2.hpp> -# include <boost/python/object_core.hpp> -# include <boost/python/object/py_function.hpp> - -namespace boost { namespace python { namespace objects { - - -struct BOOST_PYTHON_DECL function : PyObject -{ - function( - py_function const& - , python::detail::keyword const* names_and_defaults - , unsigned num_keywords); - - ~function(); - - PyObject* call(PyObject*, PyObject*) const; - - // Add an attribute to the name_space with the given name. If it is - // a function object (this class), and an existing function is - // already there, add it as an overload. - static void add_to_namespace( - object const& name_space, char const* name, object const& attribute); - - static void add_to_namespace( - object const& name_space, char const* name, object const& attribute, char const* doc); - - object const& doc() const; - void doc(object const& x); - - object const& name() const; - - object const& get_namespace() const { return m_namespace; } - - private: // helper functions - object signature(bool show_return_type=false) const; - object signatures(bool show_return_type=false) const; - void argument_error(PyObject* args, PyObject* keywords) const; - void add_overload(handle<function> const&); - - private: // data members - py_function m_fn; - handle<function> m_overloads; - object m_name; - object m_namespace; - object m_doc; - object m_arg_names; - unsigned m_nkeyword_values; - friend class function_doc_signature_generator; -}; - -// -// implementations -// -inline object const& function::doc() const -{ - return this->m_doc; -} - -inline void function::doc(object const& x) -{ - this->m_doc = x; -} - -inline object const& function::name() const -{ - return this->m_name; -} - -}}} // namespace boost::python::objects - -#endif // FUNCTION_DWA20011214_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/object/function_doc_signature.hpp b/contrib/restricted/boost/python/include/boost/python/object/function_doc_signature.hpp deleted file mode 100644 index 4f00cb385af..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/object/function_doc_signature.hpp +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright Nikolay Mladenov 2007. -// 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 FUNCTION_SIGNATURE_20070531_HPP -# define FUNCTION_SIGNATURE_20070531_HPP - -#include <boost/python/object/function.hpp> -#include <boost/python/converter/registrations.hpp> -#include <boost/python/str.hpp> -#include <boost/python/tuple.hpp> - -#include <boost/python/detail/signature.hpp> - - -#include <vector> - -namespace boost { namespace python { namespace objects { - -class function_doc_signature_generator{ - static const char * py_type_str(const python::detail::signature_element &s); - static bool arity_cmp( function const *f1, function const *f2 ); - static bool are_seq_overloads( function const *f1, function const *f2 , bool check_docs); - static std::vector<function const*> flatten(function const *f); - static std::vector<function const*> split_seq_overloads( const std::vector<function const *> &funcs, bool split_on_doc_change); - static str raw_function_pretty_signature(function const *f, size_t n_overloads, bool cpp_types = false); - static str parameter_string(py_function const &f, size_t n, object arg_names, bool cpp_types); - static str pretty_signature(function const *f, size_t n_overloads, bool cpp_types = false); - -public: - static list function_doc_signatures( function const * f); -}; - -}}}//end of namespace boost::python::objects - -#endif //FUNCTION_SIGNATURE_20070531_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/object/function_handle.hpp b/contrib/restricted/boost/python/include/boost/python/object/function_handle.hpp deleted file mode 100644 index 7edaf2ce3ae..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/object/function_handle.hpp +++ /dev/null @@ -1,44 +0,0 @@ -// 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 FUNCTION_HANDLE_DWA2002725_HPP -# define FUNCTION_HANDLE_DWA2002725_HPP -# include <boost/python/handle.hpp> -# include <boost/python/detail/caller.hpp> -# include <boost/python/default_call_policies.hpp> -# include <boost/python/object/py_function.hpp> -# include <boost/python/signature.hpp> - -namespace boost { namespace python { namespace objects { - -BOOST_PYTHON_DECL handle<> function_handle_impl(py_function const& f); - -// Just like function_object, but returns a handle<> instead. Using -// this for arg_to_python<> allows us to break a circular dependency -// between object and arg_to_python. -template <class F, class Signature> -inline handle<> function_handle(F const& f, Signature) -{ - enum { n_arguments = mpl::size<Signature>::value - 1 }; - - return objects::function_handle_impl( - python::detail::caller< - F,default_call_policies,Signature - >( - f, default_call_policies() - ) - ); -} - -// Just like make_function, but returns a handle<> intead. Same -// reasoning as above. -template <class F> -handle<> make_function_handle(F f) -{ - return objects::function_handle(f, python::detail::get_signature(f)); -} - -}}} // namespace boost::python::objects - -#endif // FUNCTION_HANDLE_DWA2002725_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/object/function_object.hpp b/contrib/restricted/boost/python/include/boost/python/object/function_object.hpp deleted file mode 100644 index eaa079fbe05..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/object/function_object.hpp +++ /dev/null @@ -1,40 +0,0 @@ -// 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 FUNCTION_OBJECT_DWA2002725_HPP -# define FUNCTION_OBJECT_DWA2002725_HPP -# include <boost/python/detail/prefix.hpp> -# include <boost/function/function2.hpp> -# include <boost/python/object_core.hpp> -# include <boost/python/args_fwd.hpp> -# include <boost/python/object/py_function.hpp> - -namespace boost { namespace python { - -namespace objects -{ - BOOST_PYTHON_DECL api::object function_object( - py_function const& f - , python::detail::keyword_range const&); - - BOOST_PYTHON_DECL api::object function_object( - py_function const& f - , python::detail::keyword_range const&); - - BOOST_PYTHON_DECL api::object function_object(py_function const& f); - - // Add an attribute to the name_space with the given name. If it is - // a Boost.Python function object - // (boost/python/object/function.hpp), and an existing function is - // already there, add it as an overload. - BOOST_PYTHON_DECL void add_to_namespace( - object const& name_space, char const* name, object const& attribute); - - BOOST_PYTHON_DECL void add_to_namespace( - object const& name_space, char const* name, object const& attribute, char const* doc); -} - -}} // namespace boost::python::objects - -#endif // FUNCTION_OBJECT_DWA2002725_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/object/inheritance.hpp b/contrib/restricted/boost/python/include/boost/python/object/inheritance.hpp deleted file mode 100644 index 90e56f0c1d6..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/object/inheritance.hpp +++ /dev/null @@ -1,131 +0,0 @@ -// 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 INHERITANCE_DWA200216_HPP -# define INHERITANCE_DWA200216_HPP - -# include <boost/python/type_id.hpp> -# include <boost/shared_ptr.hpp> -# include <boost/mpl/if.hpp> -# include <boost/detail/workaround.hpp> -# include <boost/python/detail/type_traits.hpp> - -namespace boost { namespace python { namespace objects { - -typedef type_info class_id; -using python::type_id; - -// Types used to get address and id of most derived type -typedef std::pair<void*,class_id> dynamic_id_t; -typedef dynamic_id_t (*dynamic_id_function)(void*); - -BOOST_PYTHON_DECL void register_dynamic_id_aux( - class_id static_id, dynamic_id_function get_dynamic_id); - -BOOST_PYTHON_DECL void add_cast( - class_id src_t, class_id dst_t, void* (*cast)(void*), bool is_downcast); - -// -// a generator with an execute() function which, given a source type -// and a pointer to an object of that type, returns its most-derived -// /reachable/ type identifier and object pointer. -// - -// first, the case where T has virtual functions -template <class T> -struct polymorphic_id_generator -{ - static dynamic_id_t execute(void* p_) - { - T* p = static_cast<T*>(p_); - return std::make_pair(dynamic_cast<void*>(p), class_id(typeid(*p))); - } -}; - -// now, the non-polymorphic case. -template <class T> -struct non_polymorphic_id_generator -{ - static dynamic_id_t execute(void* p_) - { - return std::make_pair(p_, python::type_id<T>()); - } -}; - -// Now the generalized selector -template <class T> -struct dynamic_id_generator - : mpl::if_< - boost::python::detail::is_polymorphic<T> - , boost::python::objects::polymorphic_id_generator<T> - , boost::python::objects::non_polymorphic_id_generator<T> - > -{}; - -// Register the dynamic id function for T with the type-conversion -// system. -template <class T> -void register_dynamic_id(T* = 0) -{ - typedef typename dynamic_id_generator<T>::type generator; - register_dynamic_id_aux( - python::type_id<T>(), &generator::execute); -} - -// -// a generator with an execute() function which, given a void* -// pointing to an object of type Source will attempt to convert it to -// an object of type Target. -// - -template <class Source, class Target> -struct dynamic_cast_generator -{ - static void* execute(void* source) - { - return dynamic_cast<Target*>( - static_cast<Source*>(source)); - } - -}; - -template <class Source, class Target> -struct implicit_cast_generator -{ - static void* execute(void* source) - { - Target* result = static_cast<Source*>(source); - return result; - } -}; - -template <class Source, class Target> -struct cast_generator - : mpl::if_< - boost::python::detail::is_base_and_derived<Target,Source> - , implicit_cast_generator<Source,Target> - , dynamic_cast_generator<Source,Target> - > -{ -}; - -template <class Source, class Target> -inline void register_conversion( - bool is_downcast = ::boost::is_base_and_derived<Source,Target>::value - // These parameters shouldn't be used; they're an MSVC bug workaround - , Source* = 0, Target* = 0) -{ - typedef typename cast_generator<Source,Target>::type generator; - - add_cast( - python::type_id<Source>() - , python::type_id<Target>() - , &generator::execute - , is_downcast - ); -} - -}}} // namespace boost::python::object - -#endif // INHERITANCE_DWA200216_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/object/inheritance_query.hpp b/contrib/restricted/boost/python/include/boost/python/object/inheritance_query.hpp deleted file mode 100644 index 916e161f29e..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/object/inheritance_query.hpp +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright David Abrahams 2003. -// 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 INHERITANCE_QUERY_DWA2003520_HPP -# define INHERITANCE_QUERY_DWA2003520_HPP - -# include <boost/python/type_id.hpp> - -namespace boost { namespace python { namespace objects { - -BOOST_PYTHON_DECL void* find_static_type(void* p, type_info src, type_info dst); -BOOST_PYTHON_DECL void* find_dynamic_type(void* p, type_info src, type_info dst); - -}}} // namespace boost::python::object - -#endif // INHERITANCE_QUERY_DWA2003520_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/object/instance.hpp b/contrib/restricted/boost/python/include/boost/python/object/instance.hpp deleted file mode 100644 index ee4a6c58220..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/object/instance.hpp +++ /dev/null @@ -1,52 +0,0 @@ -// 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 INSTANCE_DWA200295_HPP -# define INSTANCE_DWA200295_HPP - -# include <boost/python/detail/prefix.hpp> -# include <boost/python/detail/type_traits.hpp> -# include <cstddef> - -namespace boost { namespace python -{ - struct instance_holder; -}} // namespace boost::python - -namespace boost { namespace python { namespace objects { - -// Each extension instance will be one of these -template <class Data = char> -struct instance -{ - PyObject_VAR_HEAD - PyObject* dict; - PyObject* weakrefs; - instance_holder* objects; - - typedef typename boost::python::detail::type_with_alignment< - boost::python::detail::alignment_of<Data>::value - >::type align_t; - - union - { - align_t align; - char bytes[sizeof(Data)]; - } storage; -}; - -template <class Data> -struct additional_instance_size -{ - typedef instance<Data> instance_data; - typedef instance<char> instance_char; - BOOST_STATIC_CONSTANT(std::size_t, - value = sizeof(instance_data) - - BOOST_PYTHON_OFFSETOF(instance_char,storage) + - boost::python::detail::alignment_of<Data>::value); -}; - -}}} // namespace boost::python::object - -#endif // INSTANCE_DWA200295_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/object/iterator_core.hpp b/contrib/restricted/boost/python/include/boost/python/object/iterator_core.hpp deleted file mode 100644 index 064accc5a8a..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/object/iterator_core.hpp +++ /dev/null @@ -1,17 +0,0 @@ -// 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 ITERATOR_CORE_DWA2002512_HPP -# define ITERATOR_CORE_DWA2002512_HPP - -# include <boost/python/object_fwd.hpp> - -namespace boost { namespace python { namespace objects { - -BOOST_PYTHON_DECL object const& identity_function(); -BOOST_PYTHON_DECL void stop_iteration_error(); - -}}} // namespace boost::python::object - -#endif // ITERATOR_CORE_DWA2002512_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/object/life_support.hpp b/contrib/restricted/boost/python/include/boost/python/object/life_support.hpp deleted file mode 100644 index 9a1b16b689e..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/object/life_support.hpp +++ /dev/null @@ -1,15 +0,0 @@ -// 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 LIFE_SUPPORT_DWA200222_HPP -# define LIFE_SUPPORT_DWA200222_HPP -# include <boost/python/detail/prefix.hpp> - -namespace boost { namespace python { namespace objects { - -BOOST_PYTHON_DECL PyObject* make_nurse_and_patient(PyObject* nurse, PyObject* patient); - -}}} // namespace boost::python::object - -#endif // LIFE_SUPPORT_DWA200222_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/object/make_instance.hpp b/contrib/restricted/boost/python/include/boost/python/object/make_instance.hpp deleted file mode 100644 index 713fdc5ecde..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/object/make_instance.hpp +++ /dev/null @@ -1,85 +0,0 @@ -// 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 MAKE_INSTANCE_DWA200296_HPP -# define MAKE_INSTANCE_DWA200296_HPP - -# include <boost/python/detail/prefix.hpp> -# include <boost/python/object/instance.hpp> -# include <boost/python/converter/registered.hpp> -# include <boost/python/detail/decref_guard.hpp> -# include <boost/python/detail/type_traits.hpp> -# include <boost/python/detail/none.hpp> -# include <boost/mpl/assert.hpp> -# include <boost/mpl/or.hpp> - -namespace boost { namespace python { namespace objects { - -template <class T, class Holder, class Derived> -struct make_instance_impl -{ - typedef objects::instance<Holder> instance_t; - - template <class Arg> - static inline PyObject* execute(Arg& x) - { - BOOST_MPL_ASSERT((mpl::or_<boost::python::detail::is_class<T>, - boost::python::detail::is_union<T> >)); - - PyTypeObject* type = Derived::get_class_object(x); - - if (type == 0) - return python::detail::none(); - - PyObject* raw_result = type->tp_alloc( - type, objects::additional_instance_size<Holder>::value); - - if (raw_result != 0) - { - python::detail::decref_guard protect(raw_result); - - instance_t* instance = (instance_t*)raw_result; - - // construct the new C++ object and install the pointer - // in the Python object. - Holder *holder =Derived::construct(instance->storage.bytes, (PyObject*)instance, x); - holder->install(raw_result); - - // Note the position of the internally-stored Holder, - // for the sake of destruction - const size_t offset = reinterpret_cast<size_t>(holder) - - reinterpret_cast<size_t>(instance->storage.bytes) + offsetof(instance_t, storage); - Py_SET_SIZE(instance, offset); - - // Release ownership of the python object - protect.cancel(); - } - return raw_result; - } -}; - - -template <class T, class Holder> -struct make_instance - : make_instance_impl<T, Holder, make_instance<T,Holder> > -{ - template <class U> - static inline PyTypeObject* get_class_object(U&) - { - return converter::registered<T>::converters.get_class_object(); - } - - static inline Holder* construct(void* storage, PyObject* instance, reference_wrapper<T const> x) - { - size_t allocated = objects::additional_instance_size<Holder>::value; - void* aligned_storage = ::boost::alignment::align(boost::python::detail::alignment_of<Holder>::value, - sizeof(Holder), storage, allocated); - return new (aligned_storage) Holder(instance, x); - } -}; - - -}}} // namespace boost::python::object - -#endif // MAKE_INSTANCE_DWA200296_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/object/make_ptr_instance.hpp b/contrib/restricted/boost/python/include/boost/python/object/make_ptr_instance.hpp deleted file mode 100644 index 92412b31feb..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/object/make_ptr_instance.hpp +++ /dev/null @@ -1,76 +0,0 @@ -// 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 MAKE_PTR_INSTANCE_DWA200296_HPP -# define MAKE_PTR_INSTANCE_DWA200296_HPP - -# include <boost/python/object/make_instance.hpp> -# include <boost/python/converter/registry.hpp> -# include <boost/python/detail/type_traits.hpp> -# include <boost/get_pointer.hpp> -# include <boost/detail/workaround.hpp> -# include <typeinfo> - -namespace boost { namespace python { namespace objects { - -template <class T, class Holder> -struct make_ptr_instance - : make_instance_impl<T, Holder, make_ptr_instance<T,Holder> > -{ - template <class Arg> - static inline Holder* construct(void* storage, PyObject*, Arg& x) - { -#if defined(BOOST_NO_CXX11_SMART_PTR) - return new (storage) Holder(x); -#else - return new (storage) Holder(std::move(x)); -#endif - } - - template <class Ptr> - static inline PyTypeObject* get_class_object(Ptr const& x) - { - return get_class_object_impl(get_pointer(x)); - } -#ifndef BOOST_PYTHON_NO_PY_SIGNATURES - static inline PyTypeObject const* get_pytype() - { - return converter::registered<T>::converters.get_class_object(); - } -#endif - private: - template <class U> - static inline PyTypeObject* get_class_object_impl(U const volatile* p) - { - if (p == 0) - return 0; // means "return None". - - PyTypeObject* derived = get_derived_class_object( - BOOST_DEDUCED_TYPENAME boost::python::detail::is_polymorphic<U>::type(), p); - - if (derived) - return derived; - return converter::registered<T>::converters.get_class_object(); - } - - template <class U> - static inline PyTypeObject* get_derived_class_object(boost::python::detail::true_, U const volatile* x) - { - converter::registration const* r = converter::registry::query( - type_info(typeid(*x)) - ); - return r ? r->m_class_object : 0; - } - - template <class U> - static inline PyTypeObject* get_derived_class_object(boost::python::detail::false_, U*) - { - return 0; - } -}; - - -}}} // namespace boost::python::object - -#endif // MAKE_PTR_INSTANCE_DWA200296_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/object/pickle_support.hpp b/contrib/restricted/boost/python/include/boost/python/object/pickle_support.hpp deleted file mode 100644 index aa96d655eed..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/object/pickle_support.hpp +++ /dev/null @@ -1,124 +0,0 @@ -// (C) Copyright R.W. Grosse-Kunstleve 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 BOOST_PYTHON_OBJECT_PICKLE_SUPPORT_RWGK20020603_HPP -# define BOOST_PYTHON_OBJECT_PICKLE_SUPPORT_RWGK20020603_HPP - -# include <boost/python/detail/prefix.hpp> - -namespace boost { namespace python { - -namespace api -{ - class object; -} -using api::object; -class tuple; - -BOOST_PYTHON_DECL object const& make_instance_reduce_function(); - -struct pickle_suite; - -namespace error_messages { - - template <class T> - struct missing_pickle_suite_function_or_incorrect_signature {}; - - inline void must_be_derived_from_pickle_suite(pickle_suite const&) {} -} - -namespace detail { struct pickle_suite_registration; } - -struct pickle_suite -{ - private: - struct inaccessible {}; - friend struct detail::pickle_suite_registration; - public: - static inaccessible* getinitargs() { return 0; } - static inaccessible* getstate() { return 0; } - static inaccessible* setstate() { return 0; } - static bool getstate_manages_dict() { return false; } -}; - -namespace detail { - - struct pickle_suite_registration - { - typedef pickle_suite::inaccessible inaccessible; - - template <class Class_, class Tgetinitargs> - static - void - register_( - Class_& cl, - tuple (*getinitargs_fn)(Tgetinitargs), - inaccessible* (* /*getstate_fn*/)(), - inaccessible* (* /*setstate_fn*/)(), - bool) - { - cl.enable_pickling_(false); - cl.def("__getinitargs__", getinitargs_fn); - } - - template <class Class_, - class Rgetstate, class Tgetstate, - class Tsetstate, class Ttuple> - static - void - register_( - Class_& cl, - inaccessible* (* /*getinitargs_fn*/)(), - Rgetstate (*getstate_fn)(Tgetstate), - void (*setstate_fn)(Tsetstate, Ttuple), - bool getstate_manages_dict) - { - cl.enable_pickling_(getstate_manages_dict); - cl.def("__getstate__", getstate_fn); - cl.def("__setstate__", setstate_fn); - } - - template <class Class_, - class Tgetinitargs, - class Rgetstate, class Tgetstate, - class Tsetstate, class Ttuple> - static - void - register_( - Class_& cl, - tuple (*getinitargs_fn)(Tgetinitargs), - Rgetstate (*getstate_fn)(Tgetstate), - void (*setstate_fn)(Tsetstate, Ttuple), - bool getstate_manages_dict) - { - cl.enable_pickling_(getstate_manages_dict); - cl.def("__getinitargs__", getinitargs_fn); - cl.def("__getstate__", getstate_fn); - cl.def("__setstate__", setstate_fn); - } - - template <class Class_> - static - void - register_( - Class_&, - ...) - { - typedef typename - error_messages::missing_pickle_suite_function_or_incorrect_signature< - Class_>::error_type error_type BOOST_ATTRIBUTE_UNUSED; - } - }; - - template <typename PickleSuiteType> - struct pickle_suite_finalize - : PickleSuiteType, - pickle_suite_registration - {}; - -} // namespace detail - -}} // namespace boost::python - -#endif // BOOST_PYTHON_OBJECT_PICKLE_SUPPORT_RWGK20020603_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/object/pointer_holder.hpp b/contrib/restricted/boost/python/include/boost/python/object/pointer_holder.hpp deleted file mode 100644 index c3b57e833ad..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/object/pointer_holder.hpp +++ /dev/null @@ -1,227 +0,0 @@ -#if !defined(BOOST_PP_IS_ITERATING) - -// Copyright David Abrahams 2001. -// 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 POINTER_HOLDER_DWA20011215_HPP -# define POINTER_HOLDER_DWA20011215_HPP - -# include <boost/get_pointer.hpp> -# include <boost/type.hpp> - -# include <boost/python/instance_holder.hpp> -# include <boost/python/object/inheritance_query.hpp> -# include <boost/python/object/forward.hpp> - -# include <boost/python/pointee.hpp> -# include <boost/python/type_id.hpp> - -# include <boost/python/detail/wrapper_base.hpp> -# include <boost/python/detail/force_instantiate.hpp> -# include <boost/python/detail/preprocessor.hpp> -# include <boost/python/detail/type_traits.hpp> - - -# include <boost/mpl/if.hpp> -# include <boost/mpl/apply.hpp> - -# include <boost/preprocessor/comma_if.hpp> -# include <boost/preprocessor/iterate.hpp> -# include <boost/preprocessor/repeat.hpp> -# include <boost/preprocessor/debug/line.hpp> -# include <boost/preprocessor/enum_params.hpp> -# include <boost/preprocessor/repetition/enum_binary_params.hpp> - -# include <boost/detail/workaround.hpp> - -namespace boost { namespace python { - -template <class T> class wrapper; - -}} - - -namespace boost { namespace python { namespace objects { - -#define BOOST_PYTHON_UNFORWARD_LOCAL(z, n, _) BOOST_PP_COMMA_IF(n) objects::do_unforward(a##n,0) - -template <class Pointer, class Value> -struct pointer_holder : instance_holder -{ - typedef Value value_type; - - pointer_holder(Pointer); - - // Forward construction to the held object - -# define BOOST_PP_ITERATION_PARAMS_1 (4, (0, BOOST_PYTHON_MAX_ARITY, <boost/python/object/pointer_holder.hpp>, 1)) -# include BOOST_PP_ITERATE() - - private: // types - - private: // required holder implementation - void* holds(type_info, bool null_ptr_only); - - template <class T> - inline void* holds_wrapped(type_info dst_t, wrapper<T>*,T* p) - { - return python::type_id<T>() == dst_t ? p : 0; - } - - inline void* holds_wrapped(type_info, ...) - { - return 0; - } - - private: // data members - Pointer m_p; -}; - -template <class Pointer, class Value> -struct pointer_holder_back_reference : instance_holder -{ - private: - typedef typename python::pointee<Pointer>::type held_type; - public: - typedef Value value_type; - - // Not sure about this one -- can it work? The source object - // undoubtedly does not carry the correct back reference pointer. - pointer_holder_back_reference(Pointer); - - // Forward construction to the held object -# define BOOST_PP_ITERATION_PARAMS_1 (4, (0, BOOST_PYTHON_MAX_ARITY, <boost/python/object/pointer_holder.hpp>, 2)) -# include BOOST_PP_ITERATE() - - private: // required holder implementation - void* holds(type_info, bool null_ptr_only); - - private: // data members - Pointer m_p; -}; - -# undef BOOST_PYTHON_UNFORWARD_LOCAL - -template <class Pointer, class Value> -inline pointer_holder<Pointer,Value>::pointer_holder(Pointer p) -#if defined(BOOST_NO_CXX11_SMART_PTR) - : m_p(p) -#else - : m_p(std::move(p)) -#endif -{ -} - -template <class Pointer, class Value> -inline pointer_holder_back_reference<Pointer,Value>::pointer_holder_back_reference(Pointer p) -#if defined(BOOST_NO_CXX11_SMART_PTR) - : m_p(p) -#else - : m_p(std::move(p)) -#endif -{ -} - -template <class Pointer, class Value> -void* pointer_holder<Pointer, Value>::holds(type_info dst_t, bool null_ptr_only) -{ - typedef typename boost::python::detail::remove_const< Value >::type non_const_value; - - if (dst_t == python::type_id<Pointer>() - && !(null_ptr_only && get_pointer(this->m_p)) - ) - return &this->m_p; - - Value* p0 -# if BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x590)) - = static_cast<Value*>( get_pointer(this->m_p) ) -# else - = get_pointer(this->m_p) -# endif - ; - non_const_value* p = const_cast<non_const_value*>( p0 ); - - if (p == 0) - return 0; - - if (void* wrapped = holds_wrapped(dst_t, p, p)) - return wrapped; - - type_info src_t = python::type_id<non_const_value>(); - return src_t == dst_t ? p : find_dynamic_type(p, src_t, dst_t); -} - -template <class Pointer, class Value> -void* pointer_holder_back_reference<Pointer, Value>::holds(type_info dst_t, bool null_ptr_only) -{ - if (dst_t == python::type_id<Pointer>() - && !(null_ptr_only && get_pointer(this->m_p)) - ) - return &this->m_p; - - if (!get_pointer(this->m_p)) - return 0; - - Value* p = get_pointer(m_p); - - if (dst_t == python::type_id<held_type>()) - return p; - - type_info src_t = python::type_id<Value>(); - return src_t == dst_t ? p : find_dynamic_type(p, src_t, dst_t); -} - -}}} // namespace boost::python::objects - -# endif // POINTER_HOLDER_DWA20011215_HPP - -/* --------------- pointer_holder --------------- */ -// For gcc 4.4 compatability, we must include the -// BOOST_PP_ITERATION_DEPTH test inside an #else clause. -#else // BOOST_PP_IS_ITERATING -#if BOOST_PP_ITERATION_DEPTH() == 1 && BOOST_PP_ITERATION_FLAGS() == 1 -# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \ - && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201))) -# line BOOST_PP_LINE(__LINE__, pointer_holder.hpp) -# endif - -# define N BOOST_PP_ITERATION() - -# if (N != 0) - template< BOOST_PP_ENUM_PARAMS_Z(1, N, class A) > -# endif - pointer_holder(PyObject* self BOOST_PP_COMMA_IF(N) BOOST_PP_ENUM_BINARY_PARAMS_Z(1, N, A, a)) - : m_p(new Value( - BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_UNFORWARD_LOCAL, nil) - )) - { - python::detail::initialize_wrapper(self, get_pointer(this->m_p)); - } - -# undef N - -/* --------------- pointer_holder_back_reference --------------- */ -#elif BOOST_PP_ITERATION_DEPTH() == 1 && BOOST_PP_ITERATION_FLAGS() == 2 -# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \ - && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201))) -# line BOOST_PP_LINE(__LINE__, pointer_holder.hpp(pointer_holder_back_reference)) -# endif - -# define N BOOST_PP_ITERATION() - -# if (N != 0) - template < BOOST_PP_ENUM_PARAMS_Z(1, N, class A) > -# endif - pointer_holder_back_reference( - PyObject* p BOOST_PP_COMMA_IF(N) BOOST_PP_ENUM_BINARY_PARAMS_Z(1, N, A, a)) - : m_p(new held_type( - p BOOST_PP_COMMA_IF(N) BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_UNFORWARD_LOCAL, nil) - )) - {} - -# undef N - -#endif // BOOST_PP_ITERATION_DEPTH() -#endif diff --git a/contrib/restricted/boost/python/include/boost/python/object/py_function.hpp b/contrib/restricted/boost/python/include/boost/python/object/py_function.hpp deleted file mode 100644 index df2fb44a4f9..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/object/py_function.hpp +++ /dev/null @@ -1,180 +0,0 @@ -// 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 PY_FUNCTION_DWA200286_HPP -# define PY_FUNCTION_DWA200286_HPP - -# include <boost/python/detail/signature.hpp> -# include <boost/detail/workaround.hpp> -# include <boost/mpl/size.hpp> -# include <memory> - -namespace boost { namespace python { namespace objects { - -// This type is used as a "generalized Python callback", wrapping the -// function signature: -// -// PyObject* (PyObject* args, PyObject* keywords) - -struct BOOST_PYTHON_DECL py_function_impl_base -{ - virtual ~py_function_impl_base(); - virtual PyObject* operator()(PyObject*, PyObject*) = 0; - virtual unsigned min_arity() const = 0; - virtual unsigned max_arity() const; - virtual python::detail::py_func_sig_info signature() const = 0; -}; - -template <class Caller> -struct caller_py_function_impl : py_function_impl_base -{ - caller_py_function_impl(Caller const& caller) - : m_caller(caller) - {} - - PyObject* operator()(PyObject* args, PyObject* kw) - { - return m_caller(args, kw); - } - - virtual unsigned min_arity() const - { - return m_caller.min_arity(); - } - - virtual python::detail::py_func_sig_info signature() const - { - return m_caller.signature(); - } - - private: - Caller m_caller; -}; - -template <class Caller, class Sig> -struct signature_py_function_impl : py_function_impl_base -{ - signature_py_function_impl(Caller const& caller) - : m_caller(caller) - {} - - PyObject* operator()(PyObject* args, PyObject* kw) - { - return m_caller(args, kw); - } - - virtual unsigned min_arity() const - { - return mpl::size<Sig>::value - 1; - } - - virtual python::detail::py_func_sig_info signature() const - { - python::detail::signature_element const* sig = python::detail::signature<Sig>::elements(); - python::detail::py_func_sig_info res = {sig, sig}; - return res; - } - - private: - Caller m_caller; -}; - -template <class Caller, class Sig> -struct full_py_function_impl : py_function_impl_base -{ - full_py_function_impl(Caller const& caller, unsigned min_arity, unsigned max_arity) - : m_caller(caller) - , m_min_arity(min_arity) - , m_max_arity(max_arity > min_arity ? max_arity : min_arity) - {} - - PyObject* operator()(PyObject* args, PyObject* kw) - { - return m_caller(args, kw); - } - - virtual unsigned min_arity() const - { - return m_min_arity; - } - - virtual unsigned max_arity() const - { - return m_max_arity; - } - - virtual python::detail::py_func_sig_info signature() const - { - python::detail::signature_element const* sig = python::detail::signature<Sig>::elements(); - python::detail::py_func_sig_info res = {sig, sig}; - return res; - } - - private: - Caller m_caller; - unsigned m_min_arity; - unsigned m_max_arity; -}; - -struct py_function -{ - template <class Caller> - py_function(Caller const& caller) - : m_impl(new caller_py_function_impl<Caller>(caller)) - {} - - template <class Caller, class Sig> - py_function(Caller const& caller, Sig) - : m_impl(new signature_py_function_impl<Caller, Sig>(caller)) - {} - - template <class Caller, class Sig> - py_function(Caller const& caller, Sig, int min_arity, int max_arity = 0) - : m_impl(new full_py_function_impl<Caller, Sig>(caller, min_arity, max_arity)) - {} - - py_function(py_function const& rhs) -#if defined(BOOST_NO_CXX11_SMART_PTR) - : m_impl(rhs.m_impl) -#else - : m_impl(std::move(rhs.m_impl)) -#endif - {} - - PyObject* operator()(PyObject* args, PyObject* kw) const - { - return (*m_impl)(args, kw); - } - - unsigned min_arity() const - { - return m_impl->min_arity(); - } - - unsigned max_arity() const - { - return m_impl->max_arity(); - } - - python::detail::signature_element const* signature() const - { - return m_impl->signature().signature; - } - - python::detail::signature_element const& get_return_type() const - { - return *m_impl->signature().ret; - } - - private: -#if defined(BOOST_NO_CXX11_SMART_PTR) - mutable std::auto_ptr<py_function_impl_base> m_impl; -#else - mutable std::unique_ptr<py_function_impl_base> m_impl; -#endif -}; - -}}} // namespace boost::python::objects - -#endif // PY_FUNCTION_DWA200286_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/object/stl_iterator_core.hpp b/contrib/restricted/boost/python/include/boost/python/object/stl_iterator_core.hpp deleted file mode 100644 index 68e0c2441bc..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/object/stl_iterator_core.hpp +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright Eric Niebler 2005. -// 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 STL_ITERATOR_CORE_EAN20051028_HPP -# define STL_ITERATOR_CORE_EAN20051028_HPP - -# include <boost/python/object_fwd.hpp> -# include <boost/python/handle_fwd.hpp> - -namespace boost { namespace python { namespace objects { - -struct BOOST_PYTHON_DECL stl_input_iterator_impl -{ - stl_input_iterator_impl(); - stl_input_iterator_impl(boost::python::object const &ob); - void increment(); - bool equal(stl_input_iterator_impl const &that) const; - boost::python::handle<> const ¤t() const; -private: - boost::python::object it_; - boost::python::handle<> ob_; -}; - -}}} // namespace boost::python::object - -#endif // STL_ITERATOR_CORE_EAN20051028_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/object_attributes.hpp b/contrib/restricted/boost/python/include/boost/python/object_attributes.hpp deleted file mode 100644 index 26d599113f1..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/object_attributes.hpp +++ /dev/null @@ -1,116 +0,0 @@ -// 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_ATTRIBUTES_DWA2002615_HPP -# define OBJECT_ATTRIBUTES_DWA2002615_HPP - -# include <boost/python/detail/prefix.hpp> - -# include <boost/python/proxy.hpp> -# include <boost/python/object_core.hpp> -# include <boost/python/object_protocol.hpp> - -namespace boost { namespace python { namespace api { - -struct const_attribute_policies -{ - typedef char const* key_type; - static object get(object const& target, char const* key); - static object get(object const& target, object const& key); -}; - -struct attribute_policies : const_attribute_policies -{ - static object const& set(object const& target, char const* key, object const& value); - static void del(object const&target, char const* key); -}; - -struct const_objattribute_policies -{ - typedef object const key_type; - static object get(object const& target, object const& key); -}; - -struct objattribute_policies : const_objattribute_policies -{ - static object const& set(object const& target, object const& key, object const& value); - static void del(object const&target, object const& key); -}; - -// -// implementation -// -template <class U> -inline object_attribute object_operators<U>::attr(char const* name) -{ - object_cref2 x = *static_cast<U*>(this); - return object_attribute(x, name); -} - -template <class U> -inline const_object_attribute object_operators<U>::attr(char const* name) const -{ - object_cref2 x = *static_cast<U const*>(this); - return const_object_attribute(x, name); -} - -template <class U> -inline object_objattribute object_operators<U>::attr(object const& name) -{ - object_cref2 x = *static_cast<U*>(this); - return object_objattribute(x, name); -} - -template <class U> -inline const_object_objattribute object_operators<U>::attr(object const& name) const -{ - object_cref2 x = *static_cast<U const*>(this); - return const_object_objattribute(x, name); -} - -inline object const_attribute_policies::get(object const& target, char const* key) -{ - return python::getattr(target, key); -} - -inline object const_objattribute_policies::get(object const& target, object const& key) -{ - return python::getattr(target, key); -} - -inline object const& attribute_policies::set( - object const& target - , char const* key - , object const& value) -{ - python::setattr(target, key, value); - return value; -} - -inline object const& objattribute_policies::set( - object const& target - , object const& key - , object const& value) -{ - python::setattr(target, key, value); - return value; -} - -inline void attribute_policies::del( - object const& target - , char const* key) -{ - python::delattr(target, key); -} - -inline void objattribute_policies::del( - object const& target - , object const& key) -{ - python::delattr(target, key); -} - -}}} // namespace boost::python::api - -#endif // OBJECT_ATTRIBUTES_DWA2002615_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/object_core.hpp b/contrib/restricted/boost/python/include/boost/python/object_core.hpp deleted file mode 100644 index 16480d0d891..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/object_core.hpp +++ /dev/null @@ -1,480 +0,0 @@ -// 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_CORE_DWA2002615_HPP -# define OBJECT_CORE_DWA2002615_HPP - -# define BOOST_PYTHON_OBJECT_HAS_IS_NONE // added 2010-03-15 by rwgk - -# include <boost/python/detail/prefix.hpp> - -# include <boost/type.hpp> - -# include <boost/python/call.hpp> -# include <boost/python/handle_fwd.hpp> -# include <boost/python/errors.hpp> -# include <boost/python/refcount.hpp> -# include <boost/python/detail/preprocessor.hpp> -# include <boost/python/tag.hpp> -# include <boost/python/def_visitor.hpp> - -# include <boost/python/detail/raw_pyobject.hpp> -# include <boost/python/detail/dependent.hpp> - -# include <boost/python/object/forward.hpp> -# include <boost/python/object/add_to_namespace.hpp> - -# include <boost/preprocessor/iterate.hpp> -# include <boost/preprocessor/debug/line.hpp> - -# include <boost/python/detail/is_xxx.hpp> -# include <boost/python/detail/string_literal.hpp> -# include <boost/python/detail/def_helper_fwd.hpp> -# include <boost/python/detail/type_traits.hpp> - -namespace boost { namespace python { - -namespace detail -{ - class kwds_proxy; - class args_proxy; -} - -namespace converter -{ - template <class T> struct arg_to_python; -} - -// Put this in an inner namespace so that the generalized operators won't take over -namespace api -{ - -// This file contains the definition of the object class and enough to -// construct/copy it, but not enough to do operations like -// attribute/item access or addition. - - template <class Policies> class proxy; - - struct const_attribute_policies; - struct attribute_policies; - struct const_objattribute_policies; - struct objattribute_policies; - struct const_item_policies; - struct item_policies; - struct const_slice_policies; - struct slice_policies; - class slice_nil; - - typedef proxy<const_attribute_policies> const_object_attribute; - typedef proxy<attribute_policies> object_attribute; - typedef proxy<const_objattribute_policies> const_object_objattribute; - typedef proxy<objattribute_policies> object_objattribute; - typedef proxy<const_item_policies> const_object_item; - typedef proxy<item_policies> object_item; - typedef proxy<const_slice_policies> const_object_slice; - typedef proxy<slice_policies> object_slice; - - // - // is_proxy -- proxy type detection - // - BOOST_PYTHON_IS_XXX_DEF(proxy, boost::python::api::proxy, 1) - - template <class T> struct object_initializer; - - class object; - typedef PyObject* (object::*bool_type)() const; - - template <class U> - class object_operators : public def_visitor<U> - { - protected: - typedef object const& object_cref; - public: - // function call - // - object operator()() const; - -# define BOOST_PP_ITERATION_PARAMS_1 (3, (1, BOOST_PYTHON_MAX_ARITY, <boost/python/object_call.hpp>)) -# include BOOST_PP_ITERATE() - - detail::args_proxy operator* () const; - object operator()(detail::args_proxy const &args) const; - object operator()(detail::args_proxy const &args, - detail::kwds_proxy const &kwds) const; - - // truth value testing - // - operator bool_type() const; - bool operator!() const; // needed for vc6 - - // Attribute access - // - const_object_attribute attr(char const*) const; - object_attribute attr(char const*); - const_object_objattribute attr(object const&) const; - object_objattribute attr(object const&); - - // Wrap 'in' operator (aka. __contains__) - template <class T> - object contains(T const& key) const; - - // item access - // - const_object_item operator[](object_cref) const; - object_item operator[](object_cref); - - template <class T> - const_object_item - operator[](T const& key) const; - - template <class T> - object_item - operator[](T const& key); - - // slicing - // - const_object_slice slice(object_cref, object_cref) const; - object_slice slice(object_cref, object_cref); - - const_object_slice slice(slice_nil, object_cref) const; - object_slice slice(slice_nil, object_cref); - - const_object_slice slice(object_cref, slice_nil) const; - object_slice slice(object_cref, slice_nil); - - const_object_slice slice(slice_nil, slice_nil) const; - object_slice slice(slice_nil, slice_nil); - - template <class T, class V> - const_object_slice - slice(T const& start, V const& end) const; - - template <class T, class V> - object_slice - slice(T const& start, V const& end); - - private: // def visitation for adding callable objects as class methods - - template <class ClassT, class DocStringT> - void visit(ClassT& cl, char const* name, python::detail::def_helper<DocStringT> const& helper) const - { - // It's too late to specify anything other than docstrings if - // the callable object is already wrapped. - BOOST_STATIC_ASSERT( - (detail::is_same<char const*,DocStringT>::value - || detail::is_string_literal<DocStringT const>::value)); - - objects::add_to_namespace(cl, name, this->derived_visitor(), helper.doc()); - } - - friend class python::def_visitor_access; - - private: - // there is a confirmed CWPro8 codegen bug here. We prevent the - // early destruction of a temporary by binding a named object - // instead. -# if __MWERKS__ < 0x3000 || __MWERKS__ > 0x3003 - typedef object const& object_cref2; -# else - typedef object const object_cref2; -# endif - }; - - - // VC6 and VC7 require this base class in order to generate the - // correct copy constructor for object. We can't define it there - // explicitly or it will complain of ambiguity. - struct object_base : object_operators<object> - { - // copy constructor without NULL checking, for efficiency. - inline object_base(object_base const&); - inline object_base(PyObject* ptr); - - inline object_base& operator=(object_base const& rhs); - inline ~object_base(); - - // Underlying object access -- returns a borrowed reference - inline PyObject* ptr() const; - - inline bool is_none() const; - - private: - PyObject* m_ptr; - }; - - template <class T, class U> - struct is_derived - : boost::python::detail::is_convertible< - typename detail::remove_reference<T>::type* - , U const* - > - {}; - - template <class T> - typename objects::unforward_cref<T>::type do_unforward_cref(T const& x) - { - return x; - } - - class object; - - template <class T> - PyObject* object_base_initializer(T const& x) - { - typedef typename is_derived< - BOOST_DEDUCED_TYPENAME objects::unforward_cref<T>::type - , object - >::type is_obj; - - return object_initializer< - BOOST_DEDUCED_TYPENAME unwrap_reference<T>::type - >::get( - x - , is_obj() - ); - } - - class object : public object_base - { - public: - // default constructor creates a None object - object(); - - // explicit conversion from any C++ object to Python - template <class T> - explicit object(T const& x) - : object_base(object_base_initializer(x)) - { - } - - // Throw error_already_set() if the handle is null. - BOOST_PYTHON_DECL explicit object(handle<> const&); - private: - - public: // implementation detail -- for internal use only - explicit object(detail::borrowed_reference); - explicit object(detail::new_reference); - explicit object(detail::new_non_null_reference); - }; - - // 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(::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) {} - - // - // object_initializer -- get the handle to construct the object with, - // based on whether T is a proxy or derived from object - // - template <bool is_proxy = false, bool is_object_manager = false> - struct object_initializer_impl - { - static PyObject* - get(object const& x, detail::true_) - { - return python::incref(x.ptr()); - } - - template <class T> - static PyObject* - get(T const& x, detail::false_) - { - return python::incref(converter::arg_to_python<T>(x).get()); - } - }; - - template <> - struct object_initializer_impl<true, false> - { - template <class Policies> - static PyObject* - get(proxy<Policies> const& x, detail::false_) - { - return python::incref(x.operator object().ptr()); - } - }; - - template <> - struct object_initializer_impl<false, true> - { - template <class T, class U> - static PyObject* - get(T const& x, U) - { - return python::incref(get_managed_object(x, boost::python::tag)); - } - }; - - template <> - struct object_initializer_impl<true, true> - {}; // empty implementation should cause an error - - template <class T> - struct object_initializer : object_initializer_impl< - is_proxy<T>::value - , converter::is_object_manager<T>::value - > - {}; - -} -using api::object; -template <class T> struct extract; - -// -// implementation -// - -namespace detail -{ - -class call_proxy -{ -public: - call_proxy(object target) : m_target(target) {} - operator object() const { return m_target;} - - private: - object m_target; -}; - -class kwds_proxy : public call_proxy -{ -public: - kwds_proxy(object o = object()) : call_proxy(o) {} -}; -class args_proxy : public call_proxy -{ -public: - args_proxy(object o) : call_proxy(o) {} - kwds_proxy operator* () const { return kwds_proxy(*this);} -}; -} - -template <typename U> -detail::args_proxy api::object_operators<U>::operator* () const -{ - object_cref2 x = *static_cast<U const*>(this); - return boost::python::detail::args_proxy(x); -} - -template <typename U> -object api::object_operators<U>::operator()(detail::args_proxy const &args) const -{ - U const& self = *static_cast<U const*>(this); - PyObject *result = PyObject_Call(get_managed_object(self, boost::python::tag), - args.operator object().ptr(), - 0); - return object(boost::python::detail::new_reference(result)); - -} - -template <typename U> -object api::object_operators<U>::operator()(detail::args_proxy const &args, - detail::kwds_proxy const &kwds) const -{ - U const& self = *static_cast<U const*>(this); - PyObject *result = PyObject_Call(get_managed_object(self, boost::python::tag), - args.operator object().ptr(), - kwds.operator object().ptr()); - return object(boost::python::detail::new_reference(result)); - -} - - -template <typename U> -template <class T> -object api::object_operators<U>::contains(T const& key) const -{ - return this->attr("__contains__")(object(key)); -} - - -inline object::object() - : object_base(python::incref(Py_None)) -{} - -// copy constructor without NULL checking, for efficiency -inline api::object_base::object_base(object_base const& rhs) - : m_ptr(python::incref(rhs.m_ptr)) -{} - -inline api::object_base::object_base(PyObject* p) - : m_ptr(p) -{} - -inline api::object_base& api::object_base::operator=(api::object_base const& rhs) -{ - Py_INCREF(rhs.m_ptr); - Py_DECREF(this->m_ptr); - this->m_ptr = rhs.m_ptr; - return *this; -} - -inline api::object_base::~object_base() -{ - assert( Py_REFCNT(m_ptr) > 0 ); - Py_DECREF(m_ptr); -} - -inline object::object(detail::borrowed_reference p) - : object_base(python::incref((PyObject*)p)) -{} - -inline object::object(detail::new_reference p) - : object_base(expect_non_null((PyObject*)p)) -{} - -inline object::object(detail::new_non_null_reference p) - : object_base((PyObject*)p) -{} - -inline PyObject* api::object_base::ptr() const -{ - return m_ptr; -} - -inline bool api::object_base::is_none() const -{ - return (m_ptr == Py_None); -} - -// -// Converter specialization implementations -// -namespace converter -{ - template <class T> struct object_manager_traits; - - template <> - struct object_manager_traits<object> - { - BOOST_STATIC_CONSTANT(bool, is_specialized = true); - static bool check(PyObject*) { return true; } - - static python::detail::new_non_null_reference adopt(PyObject* x) - { - return python::detail::new_non_null_reference(x); - } -#ifndef BOOST_PYTHON_NO_PY_SIGNATURES - static PyTypeObject const *get_pytype() {return 0;} -#endif - }; -} - -inline PyObject* get_managed_object(object const& x, tag_t) -{ - return x.ptr(); -} - -}} // namespace boost::python - -# include <boost/python/slice_nil.hpp> - -#endif // OBJECT_CORE_DWA2002615_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/object_fwd.hpp b/contrib/restricted/boost/python/include/boost/python/object_fwd.hpp deleted file mode 100644 index 11efcc7075f..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/object_fwd.hpp +++ /dev/null @@ -1,18 +0,0 @@ -// 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_FWD_DWA2002724_HPP -# define OBJECT_FWD_DWA2002724_HPP - -# include <boost/python/detail/prefix.hpp> - -namespace boost { namespace python { -namespace api -{ - class object; -} -using api::object; -}} // namespace boost::python - -#endif // OBJECT_FWD_DWA2002724_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/object_items.hpp b/contrib/restricted/boost/python/include/boost/python/object_items.hpp deleted file mode 100644 index b048689a7cb..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/object_items.hpp +++ /dev/null @@ -1,86 +0,0 @@ -// 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_ITEMS_DWA2002615_HPP -# define OBJECT_ITEMS_DWA2002615_HPP - -# include <boost/python/detail/prefix.hpp> - -# include <boost/python/proxy.hpp> -# include <boost/python/object_core.hpp> -# include <boost/python/object_protocol.hpp> - -namespace boost { namespace python { namespace api { - -struct const_item_policies -{ - typedef object key_type; - static object get(object const& target, object const& key); -}; - -struct item_policies : const_item_policies -{ - static object const& set(object const& target, object const& key, object const& value); - static void del(object const& target, object const& key); -}; - -// -// implementation -// -template <class U> -inline object_item -object_operators<U>::operator[](object_cref key) -{ - object_cref2 x = *static_cast<U*>(this); - return object_item(x, key); -} - -template <class U> -inline const_object_item -object_operators<U>::operator[](object_cref key) const -{ - object_cref2 x = *static_cast<U const*>(this); - return const_object_item(x, key); -} - -template <class U> -template <class T> -inline const_object_item -object_operators<U>::operator[](T const& key) const -{ - return (*this)[object(key)]; -} - -template <class U> -template <class T> -inline object_item -object_operators<U>::operator[](T const& key) -{ - return (*this)[object(key)]; -} - -inline object const_item_policies::get(object const& target, object const& key) -{ - return getitem(target, key); -} - -inline object const& item_policies::set( - object const& target - , object const& key - , object const& value) -{ - setitem(target, key, value); - return value; -} - -inline void item_policies::del( - object const& target - , object const& key) -{ - delitem(target, key); -} - -}}} // namespace boost::python::api - -#endif // OBJECT_ITEMS_DWA2002615_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/object_operators.hpp b/contrib/restricted/boost/python/include/boost/python/object_operators.hpp deleted file mode 100644 index d436bb0144a..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/object_operators.hpp +++ /dev/null @@ -1,136 +0,0 @@ -// 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 -# endif - -template <class U> -object object_operators<U>::operator()() const -{ - object_cref2 f = *static_cast<U const*>(this); - return call<object>(f.ptr()); -} - - -template <class U> -inline -object_operators<U>::operator bool_type() const -{ - object_cref2 x = *static_cast<U const*>(this); - int is_true = PyObject_IsTrue(x.ptr()); - if (is_true < 0) throw_error_already_set(); - return is_true ? &object::ptr : 0; -} - -template <class U> -inline bool -object_operators<U>::operator!() const -{ - object_cref2 x = *static_cast<U const*>(this); - int is_true = PyObject_IsTrue(x.ptr()); - if (is_true < 0) throw_error_already_set(); - return !is_true; -} - -# define BOOST_PYTHON_COMPARE_OP(op, opid) \ -template <class L, class R> \ -BOOST_PYTHON_BINARY_RETURN(object) operator op(L const& l, R const& r) \ -{ \ - return PyObject_RichCompare( \ - object(l).ptr(), object(r).ptr(), opid); \ -} -# 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(/) -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 diff --git a/contrib/restricted/boost/python/include/boost/python/object_protocol.hpp b/contrib/restricted/boost/python/include/boost/python/object_protocol.hpp deleted file mode 100644 index 7c1c02830e4..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/object_protocol.hpp +++ /dev/null @@ -1,90 +0,0 @@ -// 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_PROTOCOL_DWA2002615_HPP -# define OBJECT_PROTOCOL_DWA2002615_HPP - -# include <boost/python/detail/prefix.hpp> - -# include <boost/python/object_protocol_core.hpp> -# include <boost/python/object_core.hpp> - -# include <boost/detail/workaround.hpp> - -namespace boost { namespace python { namespace api { - -# if BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x590)) -// attempt to use SFINAE to prevent functions accepting T const& from -// coming up as ambiguous with the one taking a char const* when a -// string literal is passed -# define BOOST_PYTHON_NO_ARRAY_ARG(T) , T (*)() = 0 -# else -# define BOOST_PYTHON_NO_ARRAY_ARG(T) -# endif - -template <class Target, class Key> -object getattr(Target const& target, Key const& key BOOST_PYTHON_NO_ARRAY_ARG(Key)) -{ - return getattr(object(target), object(key)); -} - -template <class Target, class Key, class Default> -object getattr(Target const& target, Key const& key, Default const& default_ BOOST_PYTHON_NO_ARRAY_ARG(Key)) -{ - return getattr(object(target), object(key), object(default_)); -} - - -template <class Key, class Value> -void setattr(object const& target, Key const& key, Value const& value BOOST_PYTHON_NO_ARRAY_ARG(Key)) -{ - setattr(target, object(key), object(value)); -} - -template <class Key> -void delattr(object const& target, Key const& key BOOST_PYTHON_NO_ARRAY_ARG(Key)) -{ - delattr(target, object(key)); -} - -template <class Target, class Key> -object getitem(Target const& target, Key const& key BOOST_PYTHON_NO_ARRAY_ARG(Key)) -{ - return getitem(object(target), object(key)); -} - - -template <class Key, class Value> -void setitem(object const& target, Key const& key, Value const& value BOOST_PYTHON_NO_ARRAY_ARG(Key)) -{ - setitem(target, object(key), object(value)); -} - -template <class Key> -void delitem(object const& target, Key const& key BOOST_PYTHON_NO_ARRAY_ARG(Key)) -{ - delitem(target, object(key)); -} - -template <class Target, class Begin, class End> -object getslice(Target const& target, Begin const& begin, End const& end) -{ - return getslice(object(target), object(begin), object(end)); -} - -template <class Begin, class End, class Value> -void setslice(object const& target, Begin const& begin, End const& end, Value const& value) -{ - setslice(target, object(begin), object(end), object(value)); -} - -template <class Begin, class End> -void delslice(object const& target, Begin const& begin, End const& end) -{ - delslice(target, object(begin), object(end)); -} - -}}} // namespace boost::python::api - -#endif // OBJECT_PROTOCOL_DWA2002615_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/object_protocol_core.hpp b/contrib/restricted/boost/python/include/boost/python/object_protocol_core.hpp deleted file mode 100644 index a5bd9afcb46..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/object_protocol_core.hpp +++ /dev/null @@ -1,53 +0,0 @@ -// 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_PROTOCOL_CORE_DWA2002615_HPP -# define OBJECT_PROTOCOL_CORE_DWA2002615_HPP - -# include <boost/python/detail/prefix.hpp> - -# include <boost/python/handle_fwd.hpp> - -namespace boost { namespace python { - -namespace api -{ - class object; - - BOOST_PYTHON_DECL object getattr(object const& target, object const& key); - BOOST_PYTHON_DECL object getattr(object const& target, object const& key, object const& default_); - BOOST_PYTHON_DECL void setattr(object const& target, object const& key, object const& value); - BOOST_PYTHON_DECL void delattr(object const& target, object const& key); - - // These are defined for efficiency, since attributes are commonly - // accessed through literal strings. - BOOST_PYTHON_DECL object getattr(object const& target, char const* key); - BOOST_PYTHON_DECL object getattr(object const& target, char const* key, object const& default_); - BOOST_PYTHON_DECL void setattr(object const& target, char const* key, object const& value); - BOOST_PYTHON_DECL void delattr(object const& target, char const* key); - - BOOST_PYTHON_DECL object getitem(object const& target, object const& key); - BOOST_PYTHON_DECL void setitem(object const& target, object const& key, object const& value); - BOOST_PYTHON_DECL void delitem(object const& target, object const& key); - - BOOST_PYTHON_DECL object getslice(object const& target, handle<> const& begin, handle<> const& end); - BOOST_PYTHON_DECL void setslice(object const& target, handle<> const& begin, handle<> const& end, object const& value); - BOOST_PYTHON_DECL void delslice(object const& target, handle<> const& begin, handle<> const& end); -} - -using api::getattr; -using api::setattr; -using api::delattr; - -using api::getitem; -using api::setitem; -using api::delitem; - -using api::getslice; -using api::setslice; -using api::delslice; - -}} // namespace boost::python - -#endif // OBJECT_PROTOCOL_CORE_DWA2002615_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/object_slices.hpp b/contrib/restricted/boost/python/include/boost/python/object_slices.hpp deleted file mode 100644 index 6cd3dc2974a..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/object_slices.hpp +++ /dev/null @@ -1,146 +0,0 @@ -// 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_SLICES_DWA2002615_HPP -# define OBJECT_SLICES_DWA2002615_HPP - -# include <boost/python/detail/prefix.hpp> - -# include <boost/python/proxy.hpp> -# include <boost/python/object_core.hpp> -# include <boost/python/object_protocol.hpp> -# include <boost/python/handle.hpp> -# include <utility> - -namespace boost { namespace python { namespace api { - -struct const_slice_policies -{ - typedef std::pair<handle<>, handle<> > key_type; - static object get(object const& target, key_type const& key); -}; - -struct slice_policies : const_slice_policies -{ - static object const& set(object const& target, key_type const& key, object const& value); - static void del(object const& target, key_type const& key); -}; - -template <class T, class U> -inline slice_policies::key_type slice_key(T x, U y) -{ - return slice_policies::key_type(handle<>(x), handle<>(y)); -} - -// -// implementation -// -template <class U> -object_slice -object_operators<U>::slice(object_cref start, object_cref finish) -{ - object_cref2 x = *static_cast<U*>(this); - return object_slice(x, api::slice_key(borrowed(start.ptr()), borrowed(finish.ptr()))); -} - -template <class U> -const_object_slice -object_operators<U>::slice(object_cref start, object_cref finish) const -{ - object_cref2 x = *static_cast<U const*>(this); - return const_object_slice(x, api::slice_key(borrowed(start.ptr()), borrowed(finish.ptr()))); -} - -template <class U> -object_slice -object_operators<U>::slice(slice_nil, object_cref finish) -{ - object_cref2 x = *static_cast<U*>(this); - return object_slice(x, api::slice_key(allow_null((PyObject*)0), borrowed(finish.ptr()))); -} - -template <class U> -const_object_slice -object_operators<U>::slice(slice_nil, object_cref finish) const -{ - object_cref2 x = *static_cast<U const*>(this); - return const_object_slice(x, api::slice_key(allow_null((PyObject*)0), borrowed(finish.ptr()))); -} - -template <class U> -object_slice -object_operators<U>::slice(slice_nil, slice_nil) -{ - object_cref2 x = *static_cast<U*>(this); - return object_slice(x, api::slice_key(allow_null((PyObject*)0), allow_null((PyObject*)0))); -} - -template <class U> -const_object_slice -object_operators<U>::slice(slice_nil, slice_nil) const -{ - object_cref2 x = *static_cast<U const*>(this); - return const_object_slice(x, api::slice_key(allow_null((PyObject*)0), allow_null((PyObject*)0))); -} - -template <class U> -object_slice -object_operators<U>::slice(object_cref start, slice_nil) -{ - object_cref2 x = *static_cast<U*>(this); - return object_slice(x, api::slice_key(borrowed(start.ptr()), allow_null((PyObject*)0))); -} - -template <class U> -const_object_slice -object_operators<U>::slice(object_cref start, slice_nil) const -{ - object_cref2 x = *static_cast<U const*>(this); - return const_object_slice(x, api::slice_key(borrowed(start.ptr()), allow_null((PyObject*)0))); -} - -template <class U> -template <class T, class V> -inline const_object_slice -object_operators<U>::slice(T const& start, V const& end) const -{ - return this->slice( - typename slice_bound<T>::type(start) - , typename slice_bound<V>::type(end)); -} - -template <class U> -template <class T, class V> -inline object_slice -object_operators<U>::slice(T const& start, V const& end) -{ - return this->slice( - typename slice_bound<T>::type(start) - , typename slice_bound<V>::type(end)); -} - -inline object const_slice_policies::get(object const& target, key_type const& key) -{ - return getslice(target, key.first, key.second); -} - -inline object const& slice_policies::set( - object const& target - , key_type const& key - , object const& value) -{ - setslice(target, key.first, key.second, value); - return value; -} - -inline void slice_policies::del( - object const& target - , key_type const& key) -{ - delslice(target, key.first, key.second); -} - -}}} // namespace boost::python::api - -#endif // OBJECT_SLICES_DWA2002615_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/override.hpp b/contrib/restricted/boost/python/include/boost/python/override.hpp deleted file mode 100644 index b631226fd6f..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/override.hpp +++ /dev/null @@ -1,144 +0,0 @@ -#if !defined(BOOST_PP_IS_ITERATING) - -// Copyright David Abrahams 2004. 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 OVERRIDE_DWA2004721_HPP -# define OVERRIDE_DWA2004721_HPP - -# include <boost/python/detail/prefix.hpp> - -# include <boost/python/converter/return_from_python.hpp> - -# include <boost/python/extract.hpp> -# include <boost/python/handle.hpp> - -# include <boost/preprocessor/iterate.hpp> -# include <boost/preprocessor/repeat.hpp> -# include <boost/preprocessor/debug/line.hpp> -# include <boost/preprocessor/repetition/enum_params.hpp> -# include <boost/preprocessor/repetition/enum_binary_params.hpp> - -# include <boost/type.hpp> - -namespace boost { namespace python { - -class override; - -namespace detail -{ - class wrapper_base; - - // The result of calling a method. - class method_result - { - private: - friend class boost::python::override; - explicit method_result(PyObject* x) - : m_obj(x) - {} - - public: - template <class T> - operator T() - { - converter::return_from_python<T> converter; - return converter(m_obj.release()); - } - -# if BOOST_WORKAROUND(_MSC_FULL_VER, BOOST_TESTED_AT(140050215)) - template <class T> - operator T*() - { - converter::return_from_python<T*> converter; - return converter(m_obj.release()); - } -# endif - -# if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) || BOOST_WORKAROUND(BOOST_INTEL_WIN, >= 900) - // No operator T& -# else - - template <class T> - operator T&() const - { - converter::return_from_python<T&> converter; - return converter(const_cast<handle<>&>(m_obj).release()); - } -# endif - - template <class T> - T as(type<T>* = 0) - { - converter::return_from_python<T> converter; - return converter(m_obj.release()); - } - - template <class T> - T unchecked(type<T>* = 0) - { - return extract<T>(m_obj.get())(); - } - private: - mutable handle<> m_obj; - }; -} - -class override : public object -{ - private: - friend class detail::wrapper_base; - override(handle<> x) - : object(x) - {} - - public: - detail::method_result - operator()() const - { - detail::method_result x( - PyObject_CallFunction( - this->ptr() - , const_cast<char*>("()") - )); - return x; - } - -# define BOOST_PYTHON_fast_arg_to_python_get(z, n, _) \ - , converter::arg_to_python<A##n>(a##n).get() - -# define BOOST_PP_ITERATION_PARAMS_1 (3, (1, BOOST_PYTHON_MAX_ARITY, <boost/python/override.hpp>)) -# include BOOST_PP_ITERATE() - -# undef BOOST_PYTHON_fast_arg_to_python_get -}; - -}} // namespace boost::python - -#endif // OVERRIDE_DWA2004721_HPP - -#else -# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \ - && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201))) -# line BOOST_PP_LINE(__LINE__, override.hpp) -# endif - -# define N BOOST_PP_ITERATION() - -template < - BOOST_PP_ENUM_PARAMS_Z(1, N, class A) - > -detail::method_result -operator()( BOOST_PP_ENUM_BINARY_PARAMS_Z(1, N, A, const& a) ) const -{ - detail::method_result x( - PyObject_CallFunction( - this->ptr() - , const_cast<char*>("(" BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_FIXED, "O") ")") - BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_fast_arg_to_python_get, nil) - )); - return x; -} - -# undef N -#endif diff --git a/contrib/restricted/boost/python/include/boost/python/pointee.hpp b/contrib/restricted/boost/python/include/boost/python/pointee.hpp deleted file mode 100644 index 7ec01e08245..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/pointee.hpp +++ /dev/null @@ -1,41 +0,0 @@ -// 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 POINTEE_DWA2002323_HPP -# define POINTEE_DWA2002323_HPP - -# include <boost/python/detail/prefix.hpp> -# include <boost/python/detail/type_traits.hpp> - -namespace boost { namespace python { - -namespace detail -{ - template <bool is_ptr = true> - struct pointee_impl - { - template <class T> struct apply : detail::remove_pointer<T> {}; - }; - - template <> - struct pointee_impl<false> - { - template <class T> struct apply - { - typedef typename T::element_type type; - }; - }; -} - -template <class T> -struct pointee - : detail::pointee_impl< - detail::is_pointer<T>::value - >::template apply<T> -{ -}; - -}} // namespace boost::python - -#endif // POINTEE_DWA2002323_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/proxy.hpp b/contrib/restricted/boost/python/include/boost/python/proxy.hpp deleted file mode 100644 index d3331d5676c..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/proxy.hpp +++ /dev/null @@ -1,97 +0,0 @@ -// 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 PROXY_DWA2002615_HPP -# define PROXY_DWA2002615_HPP -# include <boost/python/detail/prefix.hpp> -# include <boost/python/object_core.hpp> -# include <boost/python/object_operators.hpp> - -namespace boost { namespace python { namespace api { - -template <class Policies> -class proxy : public object_operators<proxy<Policies> > -{ - typedef typename Policies::key_type key_type; - - typedef proxy const& assignment_self; - public: - proxy(object const& target, key_type const& key); - operator object() const; - - // to support a[b] = c[d] - proxy const& operator=(assignment_self) const; - - template <class T> - inline proxy const& operator=(T const& rhs) const - { - Policies::set(m_target, m_key, object(rhs)); - return *this; - } - - public: // implementation detail - void del() const; - - private: - object m_target; - key_type m_key; -}; - - -template <class T> -inline void del(proxy<T> const& x) -{ - x.del(); -} - -// -// implementation -// - -template <class Policies> -inline proxy<Policies>::proxy(object const& target, key_type const& key) - : m_target(target), m_key(key) -{} - -template <class Policies> -inline proxy<Policies>::operator object() const -{ - return Policies::get(m_target, m_key); -} - -// to support a[b] = c[d] -template <class Policies> -inline proxy<Policies> const& proxy<Policies>::operator=(typename proxy::assignment_self rhs) const -{ - return *this = python::object(rhs); -} - -# define BOOST_PYTHON_PROXY_INPLACE(op) \ -template <class Policies, class R> \ -proxy<Policies> const& operator op(proxy<Policies> const& lhs, R const& rhs) \ -{ \ - object old(lhs); \ - return lhs = (old op rhs); \ -} -BOOST_PYTHON_PROXY_INPLACE(+=) -BOOST_PYTHON_PROXY_INPLACE(-=) -BOOST_PYTHON_PROXY_INPLACE(*=) -BOOST_PYTHON_PROXY_INPLACE(/=) -BOOST_PYTHON_PROXY_INPLACE(%=) -BOOST_PYTHON_PROXY_INPLACE(<<=) -BOOST_PYTHON_PROXY_INPLACE(>>=) -BOOST_PYTHON_PROXY_INPLACE(&=) -BOOST_PYTHON_PROXY_INPLACE(^=) -BOOST_PYTHON_PROXY_INPLACE(|=) -# undef BOOST_PYTHON_PROXY_INPLACE - -template <class Policies> -inline void proxy<Policies>::del() const -{ - Policies::del(m_target, m_key); -} - -}}} // namespace boost::python::api - -#endif // PROXY_DWA2002615_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/ptr.hpp b/contrib/restricted/boost/python/include/boost/python/ptr.hpp deleted file mode 100644 index 8e97aa40649..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/ptr.hpp +++ /dev/null @@ -1,65 +0,0 @@ -#ifndef BOOST_PYTHON_PTR_HPP -# define BOOST_PYTHON_PTR_HPP - -# include <boost/python/detail/prefix.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) -// -// Based on boost/ref.hpp, thus: -// Copyright (C) 1999, 2000 Jaakko Jarvi ([email protected]) -// Copyright (C) 2001 Peter Dimov - -# include <boost/config.hpp> -# include <boost/mpl/bool.hpp> - -namespace boost { namespace python { - -template<class Ptr> class pointer_wrapper -{ - public: - typedef Ptr type; - - explicit pointer_wrapper(Ptr x): p_(x) {} - operator Ptr() const { return p_; } - Ptr get() const { return p_; } - private: - Ptr p_; -}; - -template<class T> -inline pointer_wrapper<T> ptr(T t) -{ - return pointer_wrapper<T>(t); -} - -template<typename T> -class is_pointer_wrapper - : public mpl::false_ -{ -}; - -template<typename T> -class is_pointer_wrapper<pointer_wrapper<T> > - : public mpl::true_ -{ -}; - -template<typename T> -class unwrap_pointer -{ - public: - typedef T type; -}; - -template<typename T> -class unwrap_pointer<pointer_wrapper<T> > -{ - public: - typedef T type; -}; - -}} // namespace boost::python - -#endif diff --git a/contrib/restricted/boost/python/include/boost/python/refcount.hpp b/contrib/restricted/boost/python/include/boost/python/refcount.hpp deleted file mode 100644 index aa6aa5dbb6b..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/refcount.hpp +++ /dev/null @@ -1,43 +0,0 @@ -// 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 REFCOUNT_DWA2002615_HPP -# define REFCOUNT_DWA2002615_HPP - -# include <boost/python/detail/prefix.hpp> -# include <boost/python/cast.hpp> - -namespace boost { namespace python { - -template <class T> -inline T* incref(T* p) -{ - Py_INCREF(python::upcast<PyObject>(p)); - return p; -} - -template <class T> -inline T* xincref(T* p) -{ - Py_XINCREF(python::upcast<PyObject>(p)); - return p; -} - -template <class T> -inline void decref(T* p) -{ - assert( Py_REFCNT(python::upcast<PyObject>(p)) > 0 ); - Py_DECREF(python::upcast<PyObject>(p)); -} - -template <class T> -inline void xdecref(T* p) -{ - assert( !p || Py_REFCNT(python::upcast<PyObject>(p)) > 0 ); - Py_XDECREF(python::upcast<PyObject>(p)); -} - -}} // namespace boost::python - -#endif // REFCOUNT_DWA2002615_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/scope.hpp b/contrib/restricted/boost/python/include/boost/python/scope.hpp deleted file mode 100644 index 8be3e054e00..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/scope.hpp +++ /dev/null @@ -1,77 +0,0 @@ -// 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 SCOPE_DWA2002724_HPP -# define SCOPE_DWA2002724_HPP - -# include <boost/python/detail/prefix.hpp> -# include <boost/python/object.hpp> -# include <boost/python/refcount.hpp> - -namespace boost { namespace python { - -namespace detail -{ - // Making this a namespace-scope variable to avoid Cygwin issues. - // Use a PyObject* to avoid problems with static destruction after Py_Finalize - extern BOOST_PYTHON_DECL PyObject* current_scope; -} - -class scope - : public object -{ - public: - inline scope(scope const&); - inline scope(object const&); - inline scope(); - inline ~scope(); - - private: // data members - PyObject* m_previous_scope; - - private: // unimplemented functions - void operator=(scope const&); -}; - -inline scope::scope(object const& new_scope) - : object(new_scope) - , m_previous_scope(detail::current_scope) -{ - detail::current_scope = python::incref(new_scope.ptr()); -} - -inline scope::scope() - : object(detail::borrowed_reference( - detail::current_scope ? detail::current_scope : Py_None - )) - , m_previous_scope(python::xincref(detail::current_scope)) -{ -} - -inline scope::~scope() -{ - python::xdecref(detail::current_scope); - detail::current_scope = m_previous_scope; -} - -namespace converter -{ - template <> - struct object_manager_traits<scope> - : object_manager_traits<object> - { - }; -} - -// Placing this after the specialization above suppresses a CWPro8.3 bug -inline scope::scope(scope const& new_scope) - : object(new_scope) - , m_previous_scope(detail::current_scope) -{ - detail::current_scope = python::incref(new_scope.ptr()); -} - -}} // namespace boost::python - -#endif // SCOPE_DWA2002724_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/self.hpp b/contrib/restricted/boost/python/include/boost/python/self.hpp deleted file mode 100644 index 99ec5b8fbe7..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/self.hpp +++ /dev/null @@ -1,33 +0,0 @@ -// 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 SELF_DWA2002531_HPP -# define SELF_DWA2002531_HPP - -# include <boost/python/detail/prefix.hpp> - -namespace boost { namespace python { - -#define BOOST_PYTHON_SELF_IS_CLASS - -// Sink self_t into its own namespace so that we have a safe place to -// put the completely general operator templates which operate on -// it. It is possible to avoid this, but it turns out to be much more -// complicated and finally GCC 2.95.2 chokes on it. -namespace self_ns -{ -# ifndef BOOST_PYTHON_SELF_IS_CLASS - enum self_t { self }; -# else - struct self_t {}; - extern BOOST_PYTHON_DECL self_t self; -# endif -} - -using self_ns::self_t; -using self_ns::self; - -}} // namespace boost::python - -#endif // SELF_DWA2002531_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/signature.hpp b/contrib/restricted/boost/python/include/boost/python/signature.hpp deleted file mode 100644 index ab4bca390a4..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/signature.hpp +++ /dev/null @@ -1,252 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -// Copyright David Abrahams 2002, Joel de Guzman, 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) -// -/////////////////////////////////////////////////////////////////////////////// -#if !defined(BOOST_PP_IS_ITERATING) - -# ifndef SIGNATURE_JDG20020813_HPP -# define SIGNATURE_JDG20020813_HPP - -# include <boost/python/detail/prefix.hpp> - -# include <boost/mpl/if.hpp> - -# include <boost/python/detail/preprocessor.hpp> -# include <boost/python/detail/type_traits.hpp> -# include <boost/preprocessor/repeat.hpp> -# include <boost/preprocessor/enum.hpp> -# include <boost/preprocessor/enum_params.hpp> -# include <boost/preprocessor/empty.hpp> -# include <boost/preprocessor/arithmetic/sub.hpp> -# include <boost/preprocessor/iterate.hpp> -# include <boost/python/detail/type_list.hpp> - -# include <boost/preprocessor/debug/line.hpp> -# include <boost/preprocessor/arithmetic/sub.hpp> -# include <boost/preprocessor/arithmetic/inc.hpp> -# include <boost/preprocessor/repetition/enum_trailing_params.hpp> - -# define BOOST_PYTHON_LIST_INC(n) \ - BOOST_PP_CAT(mpl::vector, BOOST_PP_INC(n)) - -/////////////////////////////////////////////////////////////////////////////// -namespace boost { namespace python { namespace detail { - -// A metafunction returning C1 if C1 is derived from C2, and C2 -// otherwise -template <class C1, class C2> -struct most_derived -{ - typedef typename mpl::if_< - detail::is_convertible<C1*,C2*> - , C1 - , C2 - >::type type; -}; - -// The following macros generate expansions for:: -// -// template <class RT, class T0... class TN> -// inline mpl::vector<RT, T0...TN> -// get_signature(RT(BOOST_PYTHON_FN_CC *)(T0...TN), void* = 0) -// { -// return mpl::list<RT, T0...TN>(); -// } -// -// where BOOST_PYTHON_FN_CC is a calling convention keyword, can be -// -// empty, for default calling convention -// __cdecl (if BOOST_PYTHON_ENABLE_CDECL is defined) -// __stdcall (if BOOST_PYTHON_ENABLE_STDCALL is defined) -// __fastcall (if BOOST_PYTHON_ENABLE_FASTCALL is defined) -// -// And, for an appropriate assortment of cv-qualifications:: -// -// template <class RT, class ClassT, class T0... class TN> -// inline mpl::vector<RT, ClassT&, T0...TN> -// get_signature(RT(BOOST_PYTHON_FN_CC ClassT::*)(T0...TN) cv)) -// { -// return mpl::list<RT, ClassT&, T0...TN>(); -// } -// -// template <class Target, class RT, class ClassT, class T0... class TN> -// inline mpl::vector< -// RT -// , typename most_derived<Target, ClassT>::type& -// , T0...TN -// > -// get_signature(RT(BOOST_PYTHON_FN_CC ClassT::*)(T0...TN) cv), Target*) -// { -// return mpl::list<RT, ClassT&, T0...TN>(); -// } -// -// There are two forms for invoking get_signature:: -// -// get_signature(f) -// -// and :: -// -// get_signature(f,(Target*)0) -// -// These functions extract the return type, class (for member -// functions) and arguments of the input signature and stuff them in -// an mpl type sequence (the calling convention is dropped). -// Note that cv-qualification is dropped from -// the "hidden this" argument of member functions; that is a -// necessary sacrifice to ensure that an lvalue from_python converter -// is used. A pointer is not used so that None will be rejected for -// overload resolution. -// -// The second form of get_signature essentially downcasts the "hidden -// this" argument of member functions to Target, because the function -// may actually be a member of a base class which is not wrapped, and -// in that case conversion from python would fail. -// -// @group { - -// 'default' calling convention - -# define BOOST_PYTHON_FN_CC - -# define BOOST_PP_ITERATION_PARAMS_1 \ - (3, (0, BOOST_PYTHON_MAX_ARITY, <boost/python/signature.hpp>)) - -# include BOOST_PP_ITERATE() - -# undef BOOST_PYTHON_FN_CC - -// __cdecl calling convention - -# if defined(BOOST_PYTHON_ENABLE_CDECL) - -# define BOOST_PYTHON_FN_CC __cdecl -# define BOOST_PYTHON_FN_CC_IS_CDECL - -# define BOOST_PP_ITERATION_PARAMS_1 \ - (3, (0, BOOST_PYTHON_MAX_ARITY, <boost/python/signature.hpp>)) - -# include BOOST_PP_ITERATE() - -# undef BOOST_PYTHON_FN_CC -# undef BOOST_PYTHON_FN_CC_IS_CDECL - -# endif // defined(BOOST_PYTHON_ENABLE_CDECL) - -// __stdcall calling convention - -# if defined(BOOST_PYTHON_ENABLE_STDCALL) - -# define BOOST_PYTHON_FN_CC __stdcall - -# define BOOST_PP_ITERATION_PARAMS_1 \ - (3, (0, BOOST_PYTHON_MAX_ARITY, <boost/python/signature.hpp>)) - -# include BOOST_PP_ITERATE() - -# undef BOOST_PYTHON_FN_CC - -# endif // defined(BOOST_PYTHON_ENABLE_STDCALL) - -// __fastcall calling convention - -# if defined(BOOST_PYTHON_ENABLE_FASTCALL) - -# define BOOST_PYTHON_FN_CC __fastcall - -# define BOOST_PP_ITERATION_PARAMS_1 \ - (3, (0, BOOST_PYTHON_MAX_ARITY, <boost/python/signature.hpp>)) - -# include BOOST_PP_ITERATE() - -# undef BOOST_PYTHON_FN_CC - -# endif // defined(BOOST_PYTHON_ENABLE_FASTCALL) - -# undef BOOST_PYTHON_LIST_INC - -// } - -}}} // namespace boost::python::detail - - -# endif // SIGNATURE_JDG20020813_HPP - -// For gcc 4.4 compatability, we must include the -// BOOST_PP_ITERATION_DEPTH test inside an #else clause. -#else // BOOST_PP_IS_ITERATING -#if BOOST_PP_ITERATION_DEPTH() == 1 // defined(BOOST_PP_IS_ITERATING) - -# define N BOOST_PP_ITERATION() - - // as 'get_signature(RT(*)(T0...TN), void* = 0)' is the same - // function as 'get_signature(RT(__cdecl *)(T0...TN), void* = 0)', - // we don't define it twice -# if !defined(BOOST_PYTHON_FN_CC_IS_CDECL) - -template < - class RT BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, class T)> -inline BOOST_PYTHON_LIST_INC(N)< - RT BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, T)> -get_signature(RT(BOOST_PYTHON_FN_CC *)(BOOST_PP_ENUM_PARAMS_Z(1, N, T)), void* = 0) -{ - return BOOST_PYTHON_LIST_INC(N)< - RT BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, T) - >(); -} - -# endif // !defined(BOOST_PYTHON_FN_CC_IS_CDECL) - -# undef N - -# define BOOST_PP_ITERATION_PARAMS_2 \ - (3, (0, 3, <boost/python/signature.hpp>)) -# include BOOST_PP_ITERATE() - -#else - -# define N BOOST_PP_RELATIVE_ITERATION(1) -# define Q BOOST_PYTHON_CV_QUALIFIER(BOOST_PP_ITERATION()) - -template < - class RT, class ClassT BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, class T)> -inline BOOST_PYTHON_LIST_INC(BOOST_PP_INC(N))< - RT, ClassT& BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, T)> -get_signature(RT(BOOST_PYTHON_FN_CC ClassT::*)(BOOST_PP_ENUM_PARAMS_Z(1, N, T)) Q) -{ - return BOOST_PYTHON_LIST_INC(BOOST_PP_INC(N))< - RT, ClassT& BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, T) - >(); -} - -template < - class Target - , class RT - , class ClassT - BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, class T) -> -inline BOOST_PYTHON_LIST_INC(BOOST_PP_INC(N))< - RT - , typename most_derived<Target, ClassT>::type& - BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, T) -> -get_signature( - RT(BOOST_PYTHON_FN_CC ClassT::*)(BOOST_PP_ENUM_PARAMS_Z(1, N, T)) Q - , Target* -) -{ - return BOOST_PYTHON_LIST_INC(BOOST_PP_INC(N))< - RT - , BOOST_DEDUCED_TYPENAME most_derived<Target, ClassT>::type& - BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, T) - >(); -} - -# undef Q -# undef N - -#endif // BOOST_PP_ITERATION_DEPTH() -#endif // !defined(BOOST_PP_IS_ITERATING) diff --git a/contrib/restricted/boost/python/include/boost/python/slice.hpp b/contrib/restricted/boost/python/include/boost/python/slice.hpp deleted file mode 100644 index 80660fab77c..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/slice.hpp +++ /dev/null @@ -1,276 +0,0 @@ -#ifndef BOOST_PYTHON_SLICE_JDB20040105_HPP -#define BOOST_PYTHON_SLICE_JDB20040105_HPP - -// Copyright (c) 2004 Jonathan Brandmeyer -// Use, modification and distribution are subject to 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) - -#include <boost/python/detail/prefix.hpp> -#include <boost/config.hpp> -#include <boost/python/object.hpp> -#include <boost/python/extract.hpp> -#include <boost/python/converter/pytype_object_mgr_traits.hpp> - -#include <boost/iterator/iterator_traits.hpp> - -#include <iterator> -#include <algorithm> - -namespace boost { namespace python { - -namespace detail -{ - class BOOST_PYTHON_DECL slice_base : public object - { - public: - // Get the Python objects associated with the slice. In principle, these - // may be any arbitrary Python type, but in practice they are usually - // integers. If one or more parameter is ommited in the Python expression - // that created this slice, than that parameter is None here, and compares - // equal to a default-constructed boost::python::object. - // If a user-defined type wishes to support slicing, then support for the - // special meaning associated with negative indices is up to the user. - object start() const; - object stop() const; - object step() const; - - protected: - explicit slice_base(PyObject*, PyObject*, PyObject*); - - BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(slice_base, object) - }; -} - -class slice : public detail::slice_base -{ - typedef detail::slice_base base; - public: - // Equivalent to slice(::) - slice() : base(0,0,0) {} - - // Each argument must be slice_nil, or implicitly convertable to object. - // They should normally be integers. - template<typename Integer1, typename Integer2> - slice( Integer1 start, Integer2 stop) - : base( object(start).ptr(), object(stop).ptr(), 0 ) - {} - - template<typename Integer1, typename Integer2, typename Integer3> - slice( Integer1 start, Integer2 stop, Integer3 stride) - : base( object(start).ptr(), object(stop).ptr(), object(stride).ptr() ) - {} - - // The following algorithm is intended to automate the process of - // determining a slice range when you want to fully support negative - // indices and non-singular step sizes. Its functionallity is simmilar to - // PySlice_GetIndicesEx() in the Python/C API, but tailored for C++ users. - // This template returns a slice::range struct that, when used in the - // following iterative loop, will traverse a slice of the function's - // arguments. - // while (start != end) { - // do_foo(...); - // std::advance( start, step); - // } - // do_foo(...); // repeat exactly once more. - - // Arguments: a [begin, end) pair of STL-conforming random-access iterators. - - // Return: slice::range, where start and stop define a _closed_ interval - // that covers at most [begin, end-1] of the provided arguments, and a step - // that is non-zero. - - // Throws: error_already_set() if any of the indices are neither None nor - // integers, or the slice has a step value of zero. - // std::invalid_argument if the resulting range would be empty. Normally, - // you should catch this exception and return an empty sequence of the - // appropriate type. - - // Performance: constant time for random-access iterators. - - // Rationale: - // closed-interval: If an open interval were used, then for a non-singular - // value for step, the required state for the end iterator could be - // beyond the one-past-the-end postion of the specified range. While - // probably harmless, the behavior of STL-conforming iterators is - // undefined in this case. - // exceptions on zero-length range: It is impossible to define a closed - // interval over an empty range, so some other form of error checking - // would have to be used by the user to prevent undefined behavior. In - // the case where the user fails to catch the exception, it will simply - // be translated to Python by the default exception handling mechanisms. - - template<typename RandomAccessIterator> - struct range - { - RandomAccessIterator start; - RandomAccessIterator stop; - typename iterator_difference<RandomAccessIterator>::type step; - }; - - template<typename RandomAccessIterator> - slice::range<RandomAccessIterator> - get_indices( const RandomAccessIterator& begin, - const RandomAccessIterator& end) const - { - // This is based loosely on PySlice_GetIndicesEx(), but it has been - // carefully crafted to ensure that these iterators never fall out of - // the range of the container. - slice::range<RandomAccessIterator> ret; - - typedef typename iterator_difference<RandomAccessIterator>::type difference_type; - difference_type max_dist = std::distance(begin, end); - - object slice_start = this->start(); - object slice_stop = this->stop(); - object slice_step = this->step(); - - // Extract the step. - if (slice_step == object()) { - ret.step = 1; - } - else { - ret.step = extract<long>( slice_step); - if (ret.step == 0) { - PyErr_SetString( PyExc_IndexError, "step size cannot be zero."); - throw_error_already_set(); - } - } - - // Setup the start iterator. - if (slice_start == object()) { - if (ret.step < 0) { - ret.start = end; - --ret.start; - } - else - ret.start = begin; - } - else { - difference_type i = extract<long>( slice_start); - if (i >= max_dist && ret.step > 0) - throw std::invalid_argument( "Zero-length slice"); - if (i >= 0) { - ret.start = begin; - BOOST_USING_STD_MIN(); - std::advance( ret.start, min BOOST_PREVENT_MACRO_SUBSTITUTION(i, max_dist-1)); - } - else { - if (i < -max_dist && ret.step < 0) - throw std::invalid_argument( "Zero-length slice"); - ret.start = end; - // Advance start (towards begin) not farther than begin. - std::advance( ret.start, (-i < max_dist) ? i : -max_dist ); - } - } - - // Set up the stop iterator. This one is a little trickier since slices - // define a [) range, and we are returning a [] range. - if (slice_stop == object()) { - if (ret.step < 0) { - ret.stop = begin; - } - else { - ret.stop = end; - std::advance( ret.stop, -1); - } - } - else { - difference_type i = extract<long>(slice_stop); - // First, branch on which direction we are going with this. - if (ret.step < 0) { - if (i+1 >= max_dist || i == -1) - throw std::invalid_argument( "Zero-length slice"); - - if (i >= 0) { - ret.stop = begin; - std::advance( ret.stop, i+1); - } - else { // i is negative, but more negative than -1. - ret.stop = end; - std::advance( ret.stop, (-i < max_dist) ? i : -max_dist); - } - } - else { // stepping forward - if (i == 0 || -i >= max_dist) - throw std::invalid_argument( "Zero-length slice"); - - if (i > 0) { - ret.stop = begin; - std::advance( ret.stop, (std::min)( i-1, max_dist-1)); - } - else { // i is negative, but not more negative than -max_dist - ret.stop = end; - std::advance( ret.stop, i-1); - } - } - } - - // Now the fun part, handling the possibilites surrounding step. - // At this point, step has been initialized, ret.stop, and ret.step - // represent the widest possible range that could be traveled - // (inclusive), and final_dist is the maximum distance covered by the - // slice. - typename iterator_difference<RandomAccessIterator>::type final_dist = - std::distance( ret.start, ret.stop); - - // First case, if both ret.start and ret.stop are equal, then step - // is irrelevant and we can return here. - if (final_dist == 0) - return ret; - - // Second, if there is a sign mismatch, than the resulting range and - // step size conflict: std::advance( ret.start, ret.step) goes away from - // ret.stop. - if ((final_dist > 0) != (ret.step > 0)) - throw std::invalid_argument( "Zero-length slice."); - - // Finally, if the last step puts us past the end, we move ret.stop - // towards ret.start in the amount of the remainder. - // I don't remember all of the oolies surrounding negative modulii, - // so I am handling each of these cases separately. - if (final_dist < 0) { - difference_type remainder = -final_dist % -ret.step; - std::advance( ret.stop, remainder); - } - else { - difference_type remainder = final_dist % ret.step; - std::advance( ret.stop, -remainder); - } - - return ret; - } - - // Incorrect spelling. DO NOT USE. Only here for backward compatibility. - // Corrected 2011-06-14. - template<typename RandomAccessIterator> - slice::range<RandomAccessIterator> - get_indicies( const RandomAccessIterator& begin, - const RandomAccessIterator& end) const - { - return get_indices(begin, end); - } - - public: - // This declaration, in conjunction with the specialization of - // object_manager_traits<> below, allows C++ functions accepting slice - // arguments to be called from from Python. These constructors should never - // be used in client code. - BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(slice, detail::slice_base) -}; - - -namespace converter { - -template<> -struct object_manager_traits<slice> - : pytype_object_manager_traits<&PySlice_Type, slice> -{ -}; - -} // !namesapce converter - -} } // !namespace ::boost::python - - -#endif // !defined BOOST_PYTHON_SLICE_JDB20040105_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/slice_nil.hpp b/contrib/restricted/boost/python/include/boost/python/slice_nil.hpp deleted file mode 100644 index e911f068011..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/slice_nil.hpp +++ /dev/null @@ -1,44 +0,0 @@ -// 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 SLICE_NIL_DWA2002620_HPP -# define SLICE_NIL_DWA2002620_HPP - -# include <boost/python/detail/prefix.hpp> -# include <boost/python/object_core.hpp> - -namespace boost { namespace python { namespace api { - -class slice_nil : public object -{ - public: - slice_nil() : object() {} -}; - -# ifndef _ // Watch out for GNU gettext users, who #define _(x) -static const slice_nil _ = slice_nil(); -# endif - -template <class T> -struct slice_bound -{ - typedef object type; -}; - -template <> -struct slice_bound<slice_nil> -{ - typedef slice_nil type; -}; - -} - -using api::slice_nil; -# ifndef _ // Watch out for GNU gettext users, who #define _(x) -using api::_; -# endif - -}} // namespace boost::python - -#endif // SLICE_NIL_DWA2002620_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/ssize_t.hpp b/contrib/restricted/boost/python/include/boost/python/ssize_t.hpp deleted file mode 100644 index e8a2d92f631..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/ssize_t.hpp +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright Ralf W. Grosse-Kunstleve & David Abrahams 2006. -// 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 BOOST_PYTHON_SSIZE_T_RWGK20060924_HPP -# define BOOST_PYTHON_SSIZE_T_RWGK20060924_HPP - -# include <boost/python/detail/prefix.hpp> - -namespace boost { namespace python { - -#if PY_VERSION_HEX >= 0x02050000 - -typedef Py_ssize_t ssize_t; -ssize_t const ssize_t_max = PY_SSIZE_T_MAX; -ssize_t const ssize_t_min = PY_SSIZE_T_MIN; - -#else - -typedef int ssize_t; -ssize_t const ssize_t_max = INT_MAX; -ssize_t const ssize_t_min = INT_MIN; - -#endif - -}} // namespace boost::python - -#endif // BOOST_PYTHON_SSIZE_T_RWGK20060924_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/str.hpp b/contrib/restricted/boost/python/include/boost/python/str.hpp deleted file mode 100644 index 434c8c986cc..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/str.hpp +++ /dev/null @@ -1,422 +0,0 @@ -// 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 STR_20020703_HPP -#define STR_20020703_HPP - -# include <boost/python/detail/prefix.hpp> - -#include <boost/python/object.hpp> -#include <boost/python/list.hpp> -#include <boost/python/converter/pytype_object_mgr_traits.hpp> - -// disable defines in <cctype> provided by some system libraries -#undef isspace -#undef islower -#undef isalpha -#undef isdigit -#undef isalnum -#undef isupper - -namespace boost { namespace python { - -class str; - -namespace detail -{ - struct BOOST_PYTHON_DECL str_base : object - { - str capitalize() const; - - str center(object_cref width) const; - - long count(object_cref sub) const; - - long count(object_cref sub, object_cref start) const; - - long count(object_cref sub, object_cref start, object_cref end) const; - -#if PY_VERSION_HEX < 0x03000000 - object decode() const; - object decode(object_cref encoding) const; - - object decode(object_cref encoding, object_cref errors) const; -#endif - - object encode() const; - object encode(object_cref encoding) const; - object encode(object_cref encoding, object_cref errors) const; - - bool endswith(object_cref suffix) const; - - bool endswith(object_cref suffix, object_cref start) const; - bool endswith(object_cref suffix, object_cref start, object_cref end) const; - - str expandtabs() const; - str expandtabs(object_cref tabsize) const; - - long find(object_cref sub) const; - long find(object_cref sub, object_cref start) const; - - long find(object_cref sub, object_cref start, object_cref end) const; - - long index(object_cref sub) const; - - long index(object_cref sub, object_cref start) const; - long index(object_cref sub, object_cref start, object_cref end) const; - - bool isalnum() const; - bool isalpha() const; - bool isdigit() const; - bool islower() const; - bool isspace() const; - bool istitle() const; - bool isupper() const; - - str join(object_cref sequence) const; - - str ljust(object_cref width) const; - str lower() const; - str lstrip() const; - - str replace(object_cref old, object_cref new_) const; - str replace(object_cref old, object_cref new_, object_cref maxsplit) const; - long rfind(object_cref sub) const; - - long rfind(object_cref sub, object_cref start) const; - - long rfind(object_cref sub, object_cref start, object_cref end) const; - long rindex(object_cref sub) const; - long rindex(object_cref sub, object_cref start) const; - - - long rindex(object_cref sub, object_cref start, object_cref end) const; - - str rjust(object_cref width) const; - - str rstrip() const; - - list split() const; - list split(object_cref sep) const; - - list split(object_cref sep, object_cref maxsplit) const; - - - list splitlines() const; - list splitlines(object_cref keepends) const; - - bool startswith(object_cref prefix) const; - - - bool startswith(object_cref prefix, object_cref start) const; - bool startswith(object_cref prefix, object_cref start, object_cref end) const; - - str strip() const; - str swapcase() const; - str title() const; - - str translate(object_cref table) const; - - str translate(object_cref table, object_cref deletechars) const; - - - str upper() const; - - protected: - str_base(); // new str - - str_base(const char* s); // new str - - str_base(char const* start, char const* finish); - - str_base(char const* start, std::size_t length); - - explicit str_base(object_cref other); - - BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(str_base, object) - private: - static new_reference call(object const&); - }; -} - - -class str : public detail::str_base -{ - typedef detail::str_base base; - public: - str() {} // new str - - str(const char* s) : base(s) {} // new str - - str(char const* start, char const* finish) // new str - : base(start, finish) - {} - - str(char const* start, std::size_t length) // new str - : base(start, length) - {} - - template <class T> - explicit str(T const& other) - : base(object(other)) - { - } - - template <class T> - str center(T const& width) const - { - return base::center(object(width)); - } - - template<class T> - long count(T const& sub) const - { - return base::count(object(sub)); - } - - template<class T1, class T2> - long count(T1 const& sub,T2 const& start) const - { - return base::count(object(sub), object(start)); - } - - template<class T1, class T2, class T3> - long count(T1 const& sub,T2 const& start, T3 const& end) const - { - return base::count(object(sub), object(start), object(end)); - } - -#if PY_VERSION_HEX < 0x03000000 - object decode() const { return base::decode(); } - - template<class T> - object decode(T const& encoding) const - { - return base::decode(object(encoding)); - } - - template<class T1, class T2> - object decode(T1 const& encoding, T2 const& errors) const - { - return base::decode(object(encoding),object(errors)); - } -#endif - - object encode() const { return base::encode(); } - - template <class T> - object encode(T const& encoding) const - { - return base::encode(object(encoding)); - } - - template <class T1, class T2> - object encode(T1 const& encoding, T2 const& errors) const - { - return base::encode(object(encoding),object(errors)); - } - - template <class T> - bool endswith(T const& suffix) const - { - return base::endswith(object(suffix)); - } - - template <class T1, class T2> - bool endswith(T1 const& suffix, T2 const& start) const - { - return base::endswith(object(suffix), object(start)); - } - - template <class T1, class T2, class T3> - bool endswith(T1 const& suffix, T2 const& start, T3 const& end) const - { - return base::endswith(object(suffix), object(start), object(end)); - } - - str expandtabs() const { return base::expandtabs(); } - - template <class T> - str expandtabs(T const& tabsize) const - { - return base::expandtabs(object(tabsize)); - } - - template <class T> - long find(T const& sub) const - { - return base::find(object(sub)); - } - - template <class T1, class T2> - long find(T1 const& sub, T2 const& start) const - { - return base::find(object(sub), object(start)); - } - - template <class T1, class T2, class T3> - long find(T1 const& sub, T2 const& start, T3 const& end) const - { - return base::find(object(sub), object(start), object(end)); - } - - template <class T> - long index(T const& sub) const - { - return base::index(object(sub)); - } - - template <class T1, class T2> - long index(T1 const& sub, T2 const& start) const - { - return base::index(object(sub), object(start)); - } - - template <class T1, class T2, class T3> - long index(T1 const& sub, T2 const& start, T3 const& end) const - { - return base::index(object(sub), object(start), object(end)); - } - - template <class T> - str join(T const& sequence) const - { - return base::join(object(sequence)); - } - - template <class T> - str ljust(T const& width) const - { - return base::ljust(object(width)); - } - - template <class T1, class T2> - str replace(T1 const& old, T2 const& new_) const - { - return base::replace(object(old),object(new_)); - } - - template <class T1, class T2, class T3> - str replace(T1 const& old, T2 const& new_, T3 const& maxsplit) const - { - return base::replace(object(old),object(new_), object(maxsplit)); - } - - template <class T> - long rfind(T const& sub) const - { - return base::rfind(object(sub)); - } - - template <class T1, class T2> - long rfind(T1 const& sub, T2 const& start) const - { - return base::rfind(object(sub), object(start)); - } - - template <class T1, class T2, class T3> - long rfind(T1 const& sub, T2 const& start, T3 const& end) const - { - return base::rfind(object(sub), object(start), object(end)); - } - - template <class T> - long rindex(T const& sub) const - { - return base::rindex(object(sub)); - } - - template <class T1, class T2> - long rindex(T1 const& sub, T2 const& start) const - { - return base::rindex(object(sub), object(start)); - } - - template <class T1, class T2, class T3> - long rindex(T1 const& sub, T2 const& start, T3 const& end) const - { - return base::rindex(object(sub), object(start), object(end)); - } - - template <class T> - str rjust(T const& width) const - { - return base::rjust(object(width)); - } - - list split() const { return base::split(); } - - template <class T> - list split(T const& sep) const - { - return base::split(object(sep)); - } - - template <class T1, class T2> - list split(T1 const& sep, T2 const& maxsplit) const - { - return base::split(object(sep), object(maxsplit)); - } - - list splitlines() const { return base::splitlines(); } - - template <class T> - list splitlines(T const& keepends) const - { - return base::splitlines(object(keepends)); - } - - template <class T> - bool startswith(T const& prefix) const - { - return base::startswith(object(prefix)); - } - - template <class T1, class T2> - bool startswith(T1 const& prefix, T2 const& start) const - { - return base::startswith(object(prefix), object(start)); - } - - template <class T1, class T2, class T3> - bool startswith(T1 const& prefix, T2 const& start, T3 const& end) const - { - return base::startswith(object(prefix), object(start), object(end)); - } - - template <class T> - str translate(T const& table) const - { - return base::translate(object(table)); - } - - template <class T1, class T2> - str translate(T1 const& table, T2 const& deletechars) const - { - return base::translate(object(table), object(deletechars)); - } - - public: // implementation detail -- for internal use only - BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(str, base) -}; - -// -// Converter Specializations -// -namespace converter -{ - template <> - struct object_manager_traits<str> -#if PY_VERSION_HEX >= 0x03000000 - : pytype_object_manager_traits<&PyUnicode_Type,str> -#else - : pytype_object_manager_traits<&PyString_Type,str> -#endif - { - }; -} - -}} // namespace boost::python - -#endif // STR_20020703_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/tag.hpp b/contrib/restricted/boost/python/include/boost/python/tag.hpp deleted file mode 100644 index ccff9f1a17f..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/tag.hpp +++ /dev/null @@ -1,18 +0,0 @@ -// 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 TAG_DWA2002720_HPP -# define TAG_DWA2002720_HPP - -# include <boost/python/detail/prefix.hpp> - -namespace boost { namespace python { - -// used only to prevent argument-dependent lookup from finding the -// wrong function in some cases. Cheaper than qualification. -enum tag_t { tag }; - -}} // namespace boost::python - -#endif // TAG_DWA2002720_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/to_python_indirect.hpp b/contrib/restricted/boost/python/include/boost/python/to_python_indirect.hpp deleted file mode 100644 index 0a19aca5ff7..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/to_python_indirect.hpp +++ /dev/null @@ -1,112 +0,0 @@ -// 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 TO_PYTHON_INDIRECT_DWA200221_HPP -# define TO_PYTHON_INDIRECT_DWA200221_HPP - -# include <boost/python/detail/prefix.hpp> - -# include <boost/python/object/pointer_holder.hpp> -# include <boost/python/object/make_ptr_instance.hpp> - -# include <boost/python/detail/none.hpp> - -#ifndef BOOST_PYTHON_NO_PY_SIGNATURES -# include <boost/python/converter/pytype_function.hpp> -#endif - -# include <boost/python/refcount.hpp> - -# include <boost/python/detail/type_traits.hpp> - -# if defined(__ICL) && __ICL < 600 -# include <boost/shared_ptr.hpp> -# else -# include <memory> -# endif - -namespace boost { namespace python { - -template <class T, class MakeHolder> -struct to_python_indirect -{ - template <class U> - inline PyObject* - operator()(U const& ref) const - { - return this->execute(const_cast<U&>(ref), detail::is_pointer<U>()); - } -#ifndef BOOST_PYTHON_NO_PY_SIGNATURES - inline PyTypeObject const* - get_pytype()const - { - return converter::registered_pytype<T>::get_pytype(); - } -#endif - private: - template <class U> - inline PyObject* execute(U* ptr, detail::true_) const - { - // No special NULL treatment for references - if (ptr == 0) - return python::detail::none(); - else - return this->execute(*ptr, detail::false_()); - } - - template <class U> - inline PyObject* execute(U const& x, detail::false_) const - { - U* const p = &const_cast<U&>(x); - if (detail::is_polymorphic<U>::value) - { - if (PyObject* o = detail::wrapper_base_::owner(p)) - return incref(o); - } - return MakeHolder::execute(p); - } -}; - -// -// implementations -// -namespace detail -{ - struct make_owning_holder - { - template <class T> - static PyObject* execute(T* p) - { - // can't use auto_ptr with Intel 5 and VC6 Dinkum library - // for some reason. We get link errors against the auto_ptr - // copy constructor. -# if defined(__ICL) && __ICL < 600 - typedef boost::shared_ptr<T> smart_pointer; -# elif defined(BOOST_NO_CXX11_SMART_PTR) - typedef std::auto_ptr<T> smart_pointer; -# else - typedef std::unique_ptr<T> smart_pointer; -# endif - typedef objects::pointer_holder<smart_pointer, T> holder_t; - - smart_pointer ptr(const_cast<T*>(p)); - return objects::make_ptr_instance<T, holder_t>::execute(ptr); - } - }; - - struct make_reference_holder - { - template <class T> - static PyObject* execute(T* p) - { - typedef objects::pointer_holder<T*, T> holder_t; - T* q = const_cast<T*>(p); - return objects::make_ptr_instance<T, holder_t>::execute(q); - } - }; -} - -}} // namespace boost::python - -#endif // TO_PYTHON_INDIRECT_DWA200221_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/to_python_value.hpp b/contrib/restricted/boost/python/include/boost/python/to_python_value.hpp deleted file mode 100644 index b6ec0135ba8..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/to_python_value.hpp +++ /dev/null @@ -1,177 +0,0 @@ -// Copyright David Abrahams 2002. -// Copyright Stefan Seefeld 2016. -// 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 boost_python_to_python_value_hpp_ -#define boost_python_to_python_value_hpp_ - -#include <boost/python/detail/prefix.hpp> - -#include <boost/python/refcount.hpp> -#include <boost/python/tag.hpp> -#include <boost/python/handle.hpp> - -#include <boost/python/converter/registry.hpp> -#include <boost/python/converter/registered.hpp> -#include <boost/python/converter/builtin_converters.hpp> -#include <boost/python/converter/object_manager.hpp> -#include <boost/python/converter/shared_ptr_to_python.hpp> - -#include <boost/python/detail/type_traits.hpp> -#include <boost/python/detail/value_is_shared_ptr.hpp> -#include <boost/python/detail/value_arg.hpp> - -#include <boost/mpl/if.hpp> -#include <boost/mpl/or.hpp> - -namespace boost { namespace python { - -namespace detail -{ -#ifndef BOOST_PYTHON_NO_PY_SIGNATURES - -template <bool is_const_ref> -struct object_manager_get_pytype -{ - template <class U> - static PyTypeObject const* get( U& (*)() =0) - { - return converter::object_manager_traits<U>::get_pytype(); - } -}; - -template <> -struct object_manager_get_pytype<true> -{ - template <class U> - static PyTypeObject const* get( U const& (*)() =0) - { - return converter::object_manager_traits<U>::get_pytype(); - } -}; - -#endif - - template <class T> - struct object_manager_to_python_value - { - typedef typename value_arg<T>::type argument_type; - - PyObject* operator()(argument_type) const; -#ifndef BOOST_PYTHON_NO_PY_SIGNATURES - typedef boost::mpl::bool_<is_handle<T>::value> is_t_handle; - typedef boost::detail::indirect_traits::is_reference_to_const<T> is_t_const; - PyTypeObject const* get_pytype() const { - return get_pytype_aux((is_t_handle*)0); - } - - inline static PyTypeObject const* get_pytype_aux(mpl::true_*) {return converter::object_manager_traits<T>::get_pytype();} - - inline static PyTypeObject const* get_pytype_aux(mpl::false_* ) - { - return object_manager_get_pytype<is_t_const::value>::get((T(*)())0); - } - -#endif - - // This information helps make_getter() decide whether to try to - // return an internal reference or not. I don't like it much, - // but it will have to serve for now. - BOOST_STATIC_CONSTANT(bool, uses_registry = false); - }; - - - template <class T> - struct registry_to_python_value - { - typedef typename value_arg<T>::type argument_type; - - PyObject* operator()(argument_type) const; -#ifndef BOOST_PYTHON_NO_PY_SIGNATURES - PyTypeObject const* get_pytype() const {return converter::registered<T>::converters.to_python_target_type();} -#endif - - // This information helps make_getter() decide whether to try to - // return an internal reference or not. I don't like it much, - // but it will have to serve for now. - BOOST_STATIC_CONSTANT(bool, uses_registry = true); - }; - - template <class T> - struct shared_ptr_to_python_value - { - typedef typename value_arg<T>::type argument_type; - - PyObject* operator()(argument_type) const; -#ifndef BOOST_PYTHON_NO_PY_SIGNATURES - PyTypeObject const* get_pytype() const {return get_pytype((boost::type<argument_type>*)0);} -#endif - // This information helps make_getter() decide whether to try to - // return an internal reference or not. I don't like it much, - // but it will have to serve for now. - BOOST_STATIC_CONSTANT(bool, uses_registry = false); - private: -#ifndef BOOST_PYTHON_NO_PY_SIGNATURES - template <class U> - PyTypeObject const* get_pytype(boost::type<shared_ptr<U> &> *) const {return converter::registered<U>::converters.to_python_target_type();} - template <class U> - PyTypeObject const* get_pytype(boost::type<const shared_ptr<U> &> *) const {return converter::registered<U>::converters.to_python_target_type();} -# if !defined(BOOST_NO_CXX11_SMART_PTR) - template <class U> - PyTypeObject const* get_pytype(boost::type<std::shared_ptr<U> &> *) const {return converter::registered<U>::converters.to_python_target_type();} - template <class U> - PyTypeObject const* get_pytype(boost::type<const std::shared_ptr<U> &> *) const {return converter::registered<U>::converters.to_python_target_type();} -# endif -#endif - }; -} - -template <class T> -struct to_python_value - : mpl::if_< - detail::value_is_shared_ptr<T> - , detail::shared_ptr_to_python_value<T> - , typename mpl::if_< - mpl::or_< - converter::is_object_manager<T> - , converter::is_reference_to_object_manager<T> - > - , detail::object_manager_to_python_value<T> - , detail::registry_to_python_value<T> - >::type - >::type -{ -}; - -// -// implementation -// -namespace detail -{ - template <class T> - inline PyObject* registry_to_python_value<T>::operator()(argument_type x) const - { - return converter::registered<argument_type>::converters.to_python(&x); - } - - template <class T> - inline PyObject* object_manager_to_python_value<T>::operator()(argument_type x) const - { - return python::upcast<PyObject>( - python::xincref( - get_managed_object(x, tag)) - ); - } - - template <class T> - inline PyObject* shared_ptr_to_python_value<T>::operator()(argument_type x) const - { - return converter::shared_ptr_to_python(x); - } -} - -}} // namespace boost::python - -#endif diff --git a/contrib/restricted/boost/python/include/boost/python/tuple.hpp b/contrib/restricted/boost/python/include/boost/python/tuple.hpp deleted file mode 100644 index babfb63f1e4..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/tuple.hpp +++ /dev/null @@ -1,70 +0,0 @@ -// 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 TUPLE_20020706_HPP -#define TUPLE_20020706_HPP - -# include <boost/python/detail/prefix.hpp> - -#include <boost/python/object.hpp> -#include <boost/python/converter/pytype_object_mgr_traits.hpp> -#include <boost/preprocessor/enum_params.hpp> -#include <boost/preprocessor/repetition/enum_binary_params.hpp> - -namespace boost { namespace python { - -namespace detail -{ - struct BOOST_PYTHON_DECL tuple_base : object - { - protected: - tuple_base(); - tuple_base(object_cref sequence); - - BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(tuple_base, object) - - private: - static detail::new_reference call(object const&); - }; -} - -class tuple : public detail::tuple_base -{ - typedef detail::tuple_base base; - public: - tuple() {} - - template <class T> - explicit tuple(T const& sequence) - : base(object(sequence)) - { - } - - public: // implementation detail -- for internal use only - BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(tuple, base) -}; - -// -// Converter Specializations // $$$ JDG $$$ moved here to prevent -// // G++ bug complaining specialization - // provided after instantiation -namespace converter -{ - template <> - struct object_manager_traits<tuple> - : pytype_object_manager_traits<&PyTuple_Type,tuple> - { - }; -} - -// for completeness -inline tuple make_tuple() { return tuple(); } - -# define BOOST_PP_ITERATION_PARAMS_1 (3, (1, BOOST_PYTHON_MAX_ARITY, <boost/python/detail/make_tuple.hpp>)) -# include BOOST_PP_ITERATE() - -}} // namespace boost::python - -#endif - diff --git a/contrib/restricted/boost/python/include/boost/python/type_id.hpp b/contrib/restricted/boost/python/include/boost/python/type_id.hpp deleted file mode 100644 index 601601c3116..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/type_id.hpp +++ /dev/null @@ -1,184 +0,0 @@ -// 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 TYPE_ID_DWA2002517_HPP -# define TYPE_ID_DWA2002517_HPP - -# include <boost/python/detail/prefix.hpp> - -# include <boost/python/detail/msvc_typeinfo.hpp> -# include <boost/operators.hpp> -# include <typeinfo> -# include <cstring> -# include <ostream> -# include <boost/static_assert.hpp> -# include <boost/detail/workaround.hpp> -# include <boost/python/detail/type_traits.hpp> - -# ifndef BOOST_PYTHON_HAVE_GCC_CP_DEMANGLE -# if defined(__GNUC__) \ - && !defined(__EDG_VERSION__) -# define BOOST_PYTHON_HAVE_GCC_CP_DEMANGLE -# endif -# endif - -namespace boost { namespace python { - -// for this compiler at least, cross-shared-library type_info -// comparisons don't work, so use typeid(x).name() instead. It's not -// yet clear what the best default strategy is. -# if defined(__GNUC__) \ - || defined(_AIX) \ - || ( defined(__sgi) && defined(__host_mips)) \ - || (defined(__hpux) && defined(__HP_aCC)) \ - || (defined(linux) && defined(__INTEL_COMPILER) && defined(__ICC)) -# define BOOST_PYTHON_TYPE_ID_NAME -# endif - -#ifdef BOOST_PYTHON_HAVE_GCC_CP_DEMANGLE -// Runtime detection of broken cxxabi::__cxa_demangle versions, -// to avoid #ifdef clutter. -bool cxxabi_cxa_demangle_is_broken(); -#define BOOST_PYTHON_HAVE_CXXABI_CXA_DEMANGLE_IS_BROKEN -#endif - -// type ids which represent the same information as std::type_info -// (i.e. the top-level reference and cv-qualifiers are stripped), but -// which works across shared libraries. -struct type_info : private totally_ordered<type_info> -{ - inline type_info(std::type_info const& = typeid(void)); - - inline bool operator<(type_info const& rhs) const; - inline bool operator==(type_info const& rhs) const; - - char const* name() const; - friend BOOST_PYTHON_DECL std::ostream& operator<<( - std::ostream&, type_info const&); - - private: // data members -# ifdef BOOST_PYTHON_TYPE_ID_NAME - typedef char const* base_id_t; -# else - typedef std::type_info const* base_id_t; -# endif - - base_id_t m_base_type; -}; - - -// This macro is obsolete. Port away and remove. -# define BOOST_PYTHON_EXPLICIT_TT_DEF(T) - -template <class T> -inline type_info type_id() -{ - return type_info( -# if !defined(_MSC_VER) \ - || !BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, <= 700) - typeid(T) -# else // strip the decoration which Intel mistakenly leaves in - python::detail::msvc_typeid((boost::type<T>*)0) -# endif - ); -} - -# if (defined(__EDG_VERSION__) && __EDG_VERSION__ < 245) \ - || (defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 744) -// Older EDG-based compilers seems to mistakenly distinguish "int" from -// "signed int", etc., but only in typeid() expressions. However -// though int == signed int, the "signed" decoration is propagated -// down into template instantiations. Explicit specialization stops -// that from taking hold. - -# define BOOST_PYTHON_SIGNED_INTEGRAL_TYPE_ID(T) \ -template <> \ -inline type_info type_id<T>() \ -{ \ - return type_info(typeid(T)); \ -} - -BOOST_PYTHON_SIGNED_INTEGRAL_TYPE_ID(short) -BOOST_PYTHON_SIGNED_INTEGRAL_TYPE_ID(int) -BOOST_PYTHON_SIGNED_INTEGRAL_TYPE_ID(long) -// using Python's macro instead of Boost's - we don't seem to get the -// config right all the time. -# ifdef HAVE_LONG_LONG -BOOST_PYTHON_SIGNED_INTEGRAL_TYPE_ID(long long) -# endif -# undef BOOST_PYTHON_SIGNED_INTEGRAL_TYPE_ID -# endif - -// -inline type_info::type_info(std::type_info const& id) - : m_base_type( -# ifdef BOOST_PYTHON_TYPE_ID_NAME - id.name() -# else - &id -# endif - ) -{ -} - -inline bool type_info::operator<(type_info const& rhs) const -{ -# ifdef BOOST_PYTHON_TYPE_ID_NAME - return std::strcmp(m_base_type, rhs.m_base_type) < 0; -# else - return m_base_type->before(*rhs.m_base_type); -# endif -} - -inline bool type_info::operator==(type_info const& rhs) const -{ -# ifdef BOOST_PYTHON_TYPE_ID_NAME - return !std::strcmp(m_base_type, rhs.m_base_type); -# else - return *m_base_type == *rhs.m_base_type; -# endif -} - -# ifdef BOOST_PYTHON_HAVE_GCC_CP_DEMANGLE -namespace detail -{ - BOOST_PYTHON_DECL char const* gcc_demangle(char const*); -} -# endif - -inline char const* type_info::name() const -{ - char const* raw_name - = m_base_type -# ifndef BOOST_PYTHON_TYPE_ID_NAME - ->name() -# endif - ; - -# ifdef BOOST_PYTHON_HAVE_GCC_CP_DEMANGLE - return detail::gcc_demangle(raw_name); -# else - return raw_name; -# endif -} - - -BOOST_PYTHON_DECL std::ostream& operator<<(std::ostream&, type_info const&); - -template<> -inline type_info type_id<void>() -{ - return type_info (typeid (void *)); -} -# ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS -template<> -inline type_info type_id<const volatile void>() -{ - return type_info (typeid (void *)); -} -# endif - -}} // namespace boost::python - -#endif // TYPE_ID_DWA2002517_HPP diff --git a/contrib/restricted/boost/python/include/boost/python/wrapper.hpp b/contrib/restricted/boost/python/include/boost/python/wrapper.hpp deleted file mode 100644 index 166c8e2327d..00000000000 --- a/contrib/restricted/boost/python/include/boost/python/wrapper.hpp +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright David Abrahams 2004. 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 WRAPPER_DWA2004720_HPP -# define WRAPPER_DWA2004720_HPP - -# include <boost/python/detail/wrapper_base.hpp> -# include <boost/python/override.hpp> -# include <boost/python/converter/registered.hpp> -# include <boost/python/detail/sfinae.hpp> - -namespace boost { namespace python { - -template <class T> -class wrapper : public detail::wrapper_base -{ - public: - // Do not touch this implementation detail! - typedef T _wrapper_wrapped_type_; - - protected: - override get_override(char const* name) const - { - typedef detail::wrapper_base base; - converter::registration const& r - = converter::registered<T>::converters; - PyTypeObject* type = r.get_class_object(); - - return this->base::get_override(name, type); - } -}; - -}} // namespace boost::python - -#endif // WRAPPER_DWA2004720_HPP diff --git a/contrib/restricted/boost/python/src/converter/arg_to_python_base.cpp b/contrib/restricted/boost/python/src/converter/arg_to_python_base.cpp deleted file mode 100644 index d872314a74c..00000000000 --- a/contrib/restricted/boost/python/src/converter/arg_to_python_base.cpp +++ /dev/null @@ -1,28 +0,0 @@ -// 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) - -#include <boost/python/converter/arg_to_python_base.hpp> -#include <boost/python/errors.hpp> -#include <boost/python/converter/registrations.hpp> -#include <boost/python/handle.hpp> -#include <boost/python/refcount.hpp> - -namespace boost { namespace python { namespace converter { - -namespace detail -{ - arg_to_python_base::arg_to_python_base( - void const volatile* source, registration const& converters) -# if !defined(BOOST_MSVC) || BOOST_MSVC <= 1300 || _MSC_FULL_VER > 13102179 - : handle<> -# else - : m_ptr -# endif - (converters.to_python(source)) - { - } -} - -}}} // namespace boost::python::converter diff --git a/contrib/restricted/boost/python/src/converter/builtin_converters.cpp b/contrib/restricted/boost/python/src/converter/builtin_converters.cpp deleted file mode 100644 index ee2d5b4794b..00000000000 --- a/contrib/restricted/boost/python/src/converter/builtin_converters.cpp +++ /dev/null @@ -1,592 +0,0 @@ -// 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) - -#include <boost/python/handle.hpp> -#include <boost/python/type_id.hpp> -#include <boost/python/errors.hpp> -#include <boost/python/refcount.hpp> - -#include <boost/python/detail/config.hpp> -#include <boost/python/detail/wrap_python.hpp> - -#include <boost/python/converter/builtin_converters.hpp> -#include <boost/python/converter/rvalue_from_python_data.hpp> -#include <boost/python/converter/registry.hpp> -#include <boost/python/converter/registrations.hpp> -#include <boost/python/converter/shared_ptr_deleter.hpp> -#include <boost/python/converter/pytype_function.hpp> - -#include <boost/cast.hpp> -#include <string> -#include <complex> - -namespace boost { namespace python { namespace converter { - -shared_ptr_deleter::shared_ptr_deleter(handle<> owner) - : owner(owner) -{} - -shared_ptr_deleter::~shared_ptr_deleter() {} - -void shared_ptr_deleter::operator()(void const*) -{ - owner.reset(); -} - -namespace -{ - - // An lvalue conversion function which extracts a char const* from a - // Python String. -#if PY_VERSION_HEX < 0x03000000 - void* convert_to_cstring(PyObject* obj) - { - return PyString_Check(obj) ? PyString_AsString(obj) : 0; - } -#elif PY_VERSION_HEX < 0x03070000 - void* convert_to_cstring(PyObject* obj) - { - return PyUnicode_Check(obj) ? _PyUnicode_AsString(obj) : 0; - } -#else - void* convert_to_cstring(PyObject* obj) - { - return PyUnicode_Check(obj) ? const_cast<void*>(reinterpret_cast<const void*>(_PyUnicode_AsString(obj))) : 0; - } -#endif - - // Given a target type and a SlotPolicy describing how to perform a - // given conversion, registers from_python converters which use the - // SlotPolicy to extract the type. - template <class T, class SlotPolicy> - struct slot_rvalue_from_python - { - public: - slot_rvalue_from_python() - { - registry::insert( - &slot_rvalue_from_python<T,SlotPolicy>::convertible - , &slot_rvalue_from_python<T,SlotPolicy>::construct - , type_id<T>() - , &SlotPolicy::get_pytype - ); - } - - private: - static void* convertible(PyObject* obj) - { - unaryfunc* slot = SlotPolicy::get_slot(obj); - return slot && *slot ? slot : 0; - } - - static void construct(PyObject* obj, rvalue_from_python_stage1_data* data) - { - // Get the (intermediate) source object - unaryfunc creator = *static_cast<unaryfunc*>(data->convertible); - handle<> intermediate(creator(obj)); - - // Get the location in which to construct - void* storage = ((rvalue_from_python_storage<T>*)data)->storage.bytes; -# ifdef _MSC_VER -# pragma warning(push) -# pragma warning(disable:4244) -# endif - new (storage) T( SlotPolicy::extract(intermediate.get()) ); - -# ifdef _MSC_VER -# pragma warning(pop) -# endif - // record successful construction - data->convertible = storage; - } - }; - - // identity_unaryfunc/py_object_identity -- manufacture a unaryfunc - // "slot" which just returns its argument. - extern "C" PyObject* identity_unaryfunc(PyObject* x) - { - Py_INCREF(x); - return x; - } - unaryfunc py_object_identity = identity_unaryfunc; - -#if PY_VERSION_HEX >= 0x03000000 - // As in Python 3 there is only one integer type, we can have much - // simplified logic. - // XXX(bhy) maybe the code will work with 2.6 or even 2.5? - struct int_rvalue_from_python_base - { - static unaryfunc* get_slot(PyObject* obj) - { - return PyLong_Check(obj) ? &py_object_identity : 0; - } - static PyTypeObject const* get_pytype() {return &PyLong_Type;} - }; - - template <class T> - struct signed_int_rvalue_from_python : int_rvalue_from_python_base - { - static T extract(PyObject* intermediate) - { - long x = PyLong_AsLong(intermediate); - if (PyErr_Occurred()) - throw_error_already_set(); - return numeric_cast<T>(x); - } - }; - - template <class T> - struct unsigned_int_rvalue_from_python : int_rvalue_from_python_base - { - static T extract(PyObject* intermediate) - { - unsigned long x = PyLong_AsUnsignedLong(intermediate); - if (PyErr_Occurred()) - throw_error_already_set(); - return numeric_cast<T>(x); - } - }; -#else // PY_VERSION_HEX >= 0x03000000 - // A SlotPolicy for extracting signed integer types from Python objects - struct signed_int_rvalue_from_python_base - { - static unaryfunc* get_slot(PyObject* obj) - { - PyNumberMethods* number_methods = obj->ob_type->tp_as_number; - if (number_methods == 0) - return 0; - - return ( -#if PY_VERSION_HEX >= 0x02040000 && defined(BOOST_PYTHON_BOOL_INT_STRICT) - !PyBool_Check(obj) && -#endif - (PyInt_Check(obj) || PyLong_Check(obj))) - - ? &number_methods->nb_int : 0; - } - static PyTypeObject const* get_pytype() { return &PyInt_Type;} - }; - - template <class T> - struct signed_int_rvalue_from_python : signed_int_rvalue_from_python_base - { - static T extract(PyObject* intermediate) - { - long x = PyInt_AsLong(intermediate); - if (PyErr_Occurred()) - throw_error_already_set(); - return numeric_cast<T>(x); - } - }; - - // A SlotPolicy for extracting unsigned integer types from Python objects - struct unsigned_int_rvalue_from_python_base - { - static unaryfunc* get_slot(PyObject* obj) - { - PyNumberMethods* number_methods = obj->ob_type->tp_as_number; - if (number_methods == 0) - return 0; - - return ( -#if PY_VERSION_HEX >= 0x02040000 && defined(BOOST_PYTHON_BOOL_INT_STRICT) - !PyBool_Check(obj) && -#endif - (PyInt_Check(obj) || PyLong_Check(obj))) - ? &py_object_identity : 0; - } - static PyTypeObject const* get_pytype() { return &PyInt_Type;} - }; - - template <class T> - struct unsigned_int_rvalue_from_python : unsigned_int_rvalue_from_python_base - { - static T extract(PyObject* intermediate) - { - if (PyLong_Check(intermediate)) { - // PyLong_AsUnsignedLong() checks for negative overflow, so no - // need to check it here. - unsigned long result = PyLong_AsUnsignedLong(intermediate); - if (PyErr_Occurred()) - throw_error_already_set(); - return numeric_cast<T>(result); - } else { - // None of PyInt_AsUnsigned*() functions check for negative - // overflow, so use PyInt_AS_LONG instead and check if number is - // negative, issuing the exception appropriately. - long result = PyInt_AS_LONG(intermediate); - if (PyErr_Occurred()) - throw_error_already_set(); - if (result < 0) { - PyErr_SetString(PyExc_OverflowError, "can't convert negative" - " value to unsigned"); - throw_error_already_set(); - } - return numeric_cast<T>(result); - } - } - }; -#endif // PY_VERSION_HEX >= 0x03000000 - -// Checking Python's macro instead of Boost's - we don't seem to get -// the config right all the time. Furthermore, Python's is defined -// when long long is absent but __int64 is present. - -#ifdef HAVE_LONG_LONG - // A SlotPolicy for extracting long long types from Python objects - - struct long_long_rvalue_from_python_base - { - static unaryfunc* get_slot(PyObject* obj) - { -#if PY_VERSION_HEX >= 0x03000000 - return PyLong_Check(obj) ? &py_object_identity : 0; -#else - PyNumberMethods* number_methods = obj->ob_type->tp_as_number; - if (number_methods == 0) - return 0; - - // Return the identity conversion slot to avoid creating a - // new object. We'll handle that in the extract function - if (PyInt_Check(obj)) - return &number_methods->nb_int; - else if (PyLong_Check(obj)) - return &number_methods->nb_long; - else - return 0; -#endif - } - static PyTypeObject const* get_pytype() { return &PyLong_Type;} - }; - - struct long_long_rvalue_from_python : long_long_rvalue_from_python_base - { - static BOOST_PYTHON_LONG_LONG extract(PyObject* intermediate) - { -#if PY_VERSION_HEX < 0x03000000 - if (PyInt_Check(intermediate)) - { - return PyInt_AS_LONG(intermediate); - } - else -#endif - { - BOOST_PYTHON_LONG_LONG result = PyLong_AsLongLong(intermediate); - - if (PyErr_Occurred()) - throw_error_already_set(); - - return result; - } - } - }; - - struct unsigned_long_long_rvalue_from_python : long_long_rvalue_from_python_base - { - static unsigned BOOST_PYTHON_LONG_LONG extract(PyObject* intermediate) - { -#if PY_VERSION_HEX < 0x03000000 - if (PyInt_Check(intermediate)) - { - return numeric_cast<unsigned BOOST_PYTHON_LONG_LONG>(PyInt_AS_LONG(intermediate)); - } - else -#endif - { - unsigned BOOST_PYTHON_LONG_LONG result = PyLong_AsUnsignedLongLong(intermediate); - - if (PyErr_Occurred()) - throw_error_already_set(); - - return result; - } - } - }; -#endif - - // A SlotPolicy for extracting bool from a Python object - struct bool_rvalue_from_python - { - static unaryfunc* get_slot(PyObject* obj) - { -#if PY_VERSION_HEX >= 0x03000000 - return obj == Py_None || PyLong_Check(obj) ? &py_object_identity : 0; -#elif PY_VERSION_HEX >= 0x02040000 && defined(BOOST_PYTHON_BOOL_INT_STRICT) - return obj == Py_None || PyBool_Check(obj) ? &py_object_identity : 0; -#else - return obj == Py_None || PyInt_Check(obj) ? &py_object_identity : 0; -#endif - } - - static bool extract(PyObject* intermediate) - { - return PyObject_IsTrue(intermediate); - } - - static PyTypeObject const* get_pytype() - { -#if PY_VERSION_HEX >= 0x02030000 - return &PyBool_Type; -#else - return &PyInt_Type; -#endif - } - }; - - // A SlotPolicy for extracting floating types from Python objects. - struct float_rvalue_from_python - { - static unaryfunc* get_slot(PyObject* obj) - { - PyNumberMethods* number_methods = obj->ob_type->tp_as_number; - if (number_methods == 0) - return 0; - - // For integer types, return the tp_int conversion slot to avoid - // creating a new object. We'll handle that below -#if PY_VERSION_HEX < 0x03000000 - if (PyInt_Check(obj)) - return &number_methods->nb_int; -#endif - - return (PyLong_Check(obj) || PyFloat_Check(obj)) - ? &number_methods->nb_float : 0; - } - - static double extract(PyObject* intermediate) - { -#if PY_VERSION_HEX < 0x03000000 - if (PyInt_Check(intermediate)) - { - return PyInt_AS_LONG(intermediate); - } - else -#endif - { - return PyFloat_AS_DOUBLE(intermediate); - } - } - static PyTypeObject const* get_pytype() { return &PyFloat_Type;} - }; - -#if PY_VERSION_HEX >= 0x03000000 - unaryfunc py_unicode_as_string_unaryfunc = PyUnicode_AsUTF8String; -#endif - - // A SlotPolicy for extracting C++ strings from Python objects. - struct string_rvalue_from_python - { - // If the underlying object is "string-able" this will succeed - static unaryfunc* get_slot(PyObject* obj) - { -#if PY_VERSION_HEX >= 0x03000000 - 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; - -#endif - }; - - // Remember that this will be used to construct the result object -#if PY_VERSION_HEX >= 0x03000000 - static std::string extract(PyObject* intermediate) - { - return std::string(PyBytes_AsString(intermediate),PyBytes_Size(intermediate)); - } - static PyTypeObject const* get_pytype() { return &PyUnicode_Type;} -#else - static std::string extract(PyObject* intermediate) - { - return std::string(PyString_AsString(intermediate),PyString_Size(intermediate)); - } - static PyTypeObject const* get_pytype() { return &PyString_Type;} -#endif - }; - -#if defined(Py_USING_UNICODE) && !defined(BOOST_NO_STD_WSTRING) - // encode_string_unaryfunc/py_encode_string -- manufacture a unaryfunc - // "slot" which encodes a Python string using the default encoding - extern "C" PyObject* encode_string_unaryfunc(PyObject* x) - { - return PyUnicode_FromEncodedObject( x, 0, 0 ); - } - unaryfunc py_encode_string = encode_string_unaryfunc; - - // A SlotPolicy for extracting C++ strings from Python objects. - struct wstring_rvalue_from_python - { - // If the underlying object is "string-able" this will succeed - static unaryfunc* get_slot(PyObject* obj) - { - return PyUnicode_Check(obj) - ? &py_object_identity -#if PY_VERSION_HEX >= 0x03000000 - : PyBytes_Check(obj) -#else - : PyString_Check(obj) -#endif - ? &py_encode_string - : 0; - }; - - // Remember that this will be used to construct the result object - static std::wstring extract(PyObject* intermediate) - { - // On Windows, with Python >= 3.3, PyObject_Length cannot be used to get - // the size of the wchar_t string, because it will count the number of - // *code points*, but some characters not on the BMP will use two UTF-16 - // *code units* (surrogate pairs). - // This is not a problem on Unix, since wchar_t is 32-bit. -#if defined(_WIN32) && PY_VERSION_HEX >= 0x03030000 - BOOST_STATIC_ASSERT(sizeof(wchar_t) == 2); - - Py_ssize_t size = 0; - wchar_t *buf = PyUnicode_AsWideCharString(intermediate, &size); - if (buf == NULL) { - boost::python::throw_error_already_set(); - } - std::wstring result(buf, size); - PyMem_Free(buf); -#else - std::wstring result(::PyObject_Length(intermediate), L' '); - if (!result.empty()) - { - int err = PyUnicode_AsWideChar( -#if PY_VERSION_HEX < 0x03020000 - (PyUnicodeObject *) -#endif - intermediate - , &result[0] - , result.size()); - - if (err == -1) - throw_error_already_set(); - } -#endif - return result; - } - static PyTypeObject const* get_pytype() { return &PyUnicode_Type;} - }; -#endif - - struct complex_rvalue_from_python - { - static unaryfunc* get_slot(PyObject* obj) - { - if (PyComplex_Check(obj)) - return &py_object_identity; - else - return float_rvalue_from_python::get_slot(obj); - } - - static std::complex<double> extract(PyObject* intermediate) - { - if (PyComplex_Check(intermediate)) - { - return std::complex<double>( - PyComplex_RealAsDouble(intermediate) - , PyComplex_ImagAsDouble(intermediate)); - } -#if PY_VERSION_HEX < 0x03000000 - else if (PyInt_Check(intermediate)) - { - return PyInt_AS_LONG(intermediate); - } -#endif - else - { - return PyFloat_AS_DOUBLE(intermediate); - } - } - static PyTypeObject const* get_pytype() { return &PyComplex_Type;} - }; -} - -BOOST_PYTHON_DECL PyObject* do_return_to_python(char x) -{ -#if PY_VERSION_HEX >= 0x03000000 - return PyUnicode_FromStringAndSize(&x, 1); -#else - return PyString_FromStringAndSize(&x, 1); -#endif -} - -BOOST_PYTHON_DECL PyObject* do_return_to_python(char const* x) -{ -#if PY_VERSION_HEX >= 0x03000000 - return x ? PyUnicode_FromString(x) : boost::python::detail::none(); -#else - return x ? PyString_FromString(x) : boost::python::detail::none(); -#endif -} - -BOOST_PYTHON_DECL PyObject* do_return_to_python(PyObject* x) -{ - return x ? x : boost::python::detail::none(); -} - -BOOST_PYTHON_DECL PyObject* do_arg_to_python(PyObject* x) -{ - if (x == 0) - return boost::python::detail::none(); - - Py_INCREF(x); - return x; -} - -#define REGISTER_INT_CONVERTERS(signedness, U) \ - slot_rvalue_from_python< \ - signedness U \ - ,signedness##_int_rvalue_from_python<signedness U> \ - >() - -#define REGISTER_INT_CONVERTERS2(U) \ - REGISTER_INT_CONVERTERS(signed, U); \ - REGISTER_INT_CONVERTERS(unsigned, U) - -void initialize_builtin_converters() -{ - // booleans - slot_rvalue_from_python<bool,bool_rvalue_from_python>(); - - // integer types - REGISTER_INT_CONVERTERS2(char); - REGISTER_INT_CONVERTERS2(short); - REGISTER_INT_CONVERTERS2(int); - REGISTER_INT_CONVERTERS2(long); - -// using Python's macro instead of Boost's - we don't seem to get the -// config right all the time. -# ifdef HAVE_LONG_LONG - slot_rvalue_from_python<signed BOOST_PYTHON_LONG_LONG,long_long_rvalue_from_python>(); - slot_rvalue_from_python<unsigned BOOST_PYTHON_LONG_LONG,unsigned_long_long_rvalue_from_python>(); -# endif - - // floating types - slot_rvalue_from_python<float,float_rvalue_from_python>(); - slot_rvalue_from_python<double,float_rvalue_from_python>(); - slot_rvalue_from_python<long double,float_rvalue_from_python>(); - - slot_rvalue_from_python<std::complex<float>,complex_rvalue_from_python>(); - slot_rvalue_from_python<std::complex<double>,complex_rvalue_from_python>(); - slot_rvalue_from_python<std::complex<long double>,complex_rvalue_from_python>(); - - // Add an lvalue converter for char which gets us char const* -#if PY_VERSION_HEX < 0x03000000 - registry::insert(convert_to_cstring,type_id<char>(),&converter::wrap_pytype<&PyString_Type>::get_pytype); -#else - registry::insert(convert_to_cstring,type_id<char>(),&converter::wrap_pytype<&PyUnicode_Type>::get_pytype); -#endif - - // Register by-value converters to std::string, std::wstring -#if defined(Py_USING_UNICODE) && !defined(BOOST_NO_STD_WSTRING) - slot_rvalue_from_python<std::wstring, wstring_rvalue_from_python>(); -# endif - slot_rvalue_from_python<std::string, string_rvalue_from_python>(); - -} - -}}} // namespace boost::python::converter diff --git a/contrib/restricted/boost/python/src/converter/from_python.cpp b/contrib/restricted/boost/python/src/converter/from_python.cpp deleted file mode 100644 index 9678be1cb69..00000000000 --- a/contrib/restricted/boost/python/src/converter/from_python.cpp +++ /dev/null @@ -1,303 +0,0 @@ -// 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) - -#include <boost/python/converter/from_python.hpp> -#include <boost/python/converter/registrations.hpp> -#include <boost/python/converter/rvalue_from_python_data.hpp> - -#include <boost/python/object/find_instance.hpp> - -#include <boost/python/handle.hpp> -#include <boost/python/detail/raw_pyobject.hpp> -#include <boost/python/cast.hpp> - -#include <vector> -#include <algorithm> - -namespace boost { namespace python { namespace converter { - -// rvalue_from_python_stage1 -- do the first stage of a conversion -// from a Python object to a C++ rvalue. -// -// source - the Python object to be converted -// converters - the registry entry for the target type T -// -// Postcondition: where x is the result, one of: -// -// 1. x.convertible == 0, indicating failure -// -// 2. x.construct == 0, x.convertible is the address of an object of -// type T. Indicates a successful lvalue conversion -// -// 3. where y is of type rvalue_from_python_data<T>, -// x.construct(source, y) constructs an object of type T -// in y.storage.bytes and then sets y.convertible == y.storage.bytes, -// or else throws an exception and has no effect. -BOOST_PYTHON_DECL rvalue_from_python_stage1_data rvalue_from_python_stage1( - PyObject* source - , registration const& converters) -{ - rvalue_from_python_stage1_data data; - - // First check to see if it's embedded in an extension class - // instance, as a special case. - data.convertible = objects::find_instance_impl(source, converters.target_type, converters.is_shared_ptr); - data.construct = 0; - if (!data.convertible) - { - for (rvalue_from_python_chain const* chain = converters.rvalue_chain; - chain != 0; - chain = chain->next) - { - void* r = chain->convertible(source); - if (r != 0) - { - data.convertible = r; - data.construct = chain->construct; - break; - } - } - } - return data; -} - -// rvalue_result_from_python -- return the address of a C++ object which -// can be used as the result of calling a Python function. -// -// src - the Python object to be converted -// -// data - a reference to the base part of a -// rvalue_from_python_data<T> object, where T is the -// target type of the conversion. -// -// Requires: data.convertible == ®istered<T>::converters -// -BOOST_PYTHON_DECL void* rvalue_result_from_python( - PyObject* src, rvalue_from_python_stage1_data& data) -{ - // Retrieve the registration - // Cast in two steps for less-capable compilers - void const* converters_ = data.convertible; - registration const& converters = *static_cast<registration const*>(converters_); - - // Look for an eligible converter - data = rvalue_from_python_stage1(src, converters); - return rvalue_from_python_stage2(src, data, converters); -} - -BOOST_PYTHON_DECL void* rvalue_from_python_stage2( - PyObject* source, rvalue_from_python_stage1_data& data, registration const& converters) -{ - if (!data.convertible) - { - handle<> msg( -#if PY_VERSION_HEX >= 0x03000000 - ::PyUnicode_FromFormat -#else - ::PyString_FromFormat -#endif - ( - "No registered converter was able to produce a C++ rvalue of type %s from this Python object of type %s" - , converters.target_type.name() - , source->ob_type->tp_name - )); - - PyErr_SetObject(PyExc_TypeError, msg.get()); - throw_error_already_set(); - } - - // If a construct function was registered (i.e. we found an - // rvalue conversion), call it now. - if (data.construct != 0) - data.construct(source, &data); - - // Return the address of the resulting C++ object - return data.convertible; -} - -BOOST_PYTHON_DECL void* get_lvalue_from_python( - PyObject* source - , registration const& converters) -{ - // Check to see if it's embedded in a class instance - void* x = objects::find_instance_impl(source, converters.target_type); - if (x) - return x; - - lvalue_from_python_chain const* chain = converters.lvalue_chain; - for (;chain != 0; chain = chain->next) - { - void* r = chain->convert(source); - if (r != 0) - return r; - } - return 0; -} - -namespace -{ - // Prevent looping in implicit conversions. This could/should be - // much more efficient, but will work for now. - typedef std::vector<rvalue_from_python_chain const*> visited_t; - static visited_t visited; - - inline bool visit(rvalue_from_python_chain const* chain) - { - visited_t::iterator const p = std::lower_bound(visited.begin(), visited.end(), chain); - if (p != visited.end() && *p == chain) - return false; - visited.insert(p, chain); - return true; - } - - // RAII class for managing global visited marks. - struct unvisit - { - unvisit(rvalue_from_python_chain const* chain) - : chain(chain) {} - - ~unvisit() - { - visited_t::iterator const p = std::lower_bound(visited.begin(), visited.end(), chain); - assert(p != visited.end()); - visited.erase(p); - } - private: - rvalue_from_python_chain const* chain; - }; -} - - -BOOST_PYTHON_DECL bool implicit_rvalue_convertible_from_python( - PyObject* source - , registration const& converters) -{ - if (objects::find_instance_impl(source, converters.target_type)) - return true; - - rvalue_from_python_chain const* chain = converters.rvalue_chain; - - if (!visit(chain)) - return false; - - unvisit protect(chain); - - for (;chain != 0; chain = chain->next) - { - if (chain->convertible(source)) - return true; - } - - return false; -} - -namespace -{ - void throw_no_lvalue_from_python(PyObject* source, registration const& converters, char const* ref_type) - { - handle<> msg( -#if PY_VERSION_HEX >= 0x03000000 - ::PyUnicode_FromFormat -#else - ::PyString_FromFormat -#endif - ( - "No registered converter was able to extract a C++ %s to type %s" - " from this Python object of type %s" - , ref_type - , converters.target_type.name() - , source->ob_type->tp_name - )); - - PyErr_SetObject(PyExc_TypeError, msg.get()); - - throw_error_already_set(); - } - - void* lvalue_result_from_python( - PyObject* source - , registration const& converters - , char const* ref_type) - { - handle<> holder(source); - if (source->ob_refcnt <= 1) - { - handle<> msg( -#if PY_VERSION_HEX >= 0x3000000 - ::PyUnicode_FromFormat -#else - ::PyString_FromFormat -#endif - ( - "Attempt to return dangling %s to object of type: %s" - , ref_type - , converters.target_type.name())); - - PyErr_SetObject(PyExc_ReferenceError, msg.get()); - - throw_error_already_set(); - } - - void* result = get_lvalue_from_python(source, converters); - if (!result) - (throw_no_lvalue_from_python)(source, converters, ref_type); - return result; - } - -} - -BOOST_PYTHON_DECL void throw_no_pointer_from_python(PyObject* source, registration const& converters) -{ - (throw_no_lvalue_from_python)(source, converters, "pointer"); -} - -BOOST_PYTHON_DECL void throw_no_reference_from_python(PyObject* source, registration const& converters) -{ - (throw_no_lvalue_from_python)(source, converters, "reference"); -} - -BOOST_PYTHON_DECL void* reference_result_from_python( - PyObject* source - , registration const& converters) -{ - return (lvalue_result_from_python)(source, converters, "reference"); -} - -BOOST_PYTHON_DECL void* pointer_result_from_python( - PyObject* source - , registration const& converters) -{ - if (source == Py_None) - { - Py_DECREF(source); - return 0; - } - return (lvalue_result_from_python)(source, converters, "pointer"); -} - -BOOST_PYTHON_DECL void void_result_from_python(PyObject* o) -{ - Py_DECREF(expect_non_null(o)); -} - -} // namespace boost::python::converter - -BOOST_PYTHON_DECL PyObject* -pytype_check(PyTypeObject* type_, PyObject* source) -{ - if (!PyObject_IsInstance(source, python::upcast<PyObject>(type_))) - { - ::PyErr_Format( - PyExc_TypeError - , "Expecting an object of type %s; got an object of type %s instead" - , type_->tp_name - , source->ob_type->tp_name - ); - throw_error_already_set(); - } - return source; -} - -}} // namespace boost::python diff --git a/contrib/restricted/boost/python/src/converter/registry.cpp b/contrib/restricted/boost/python/src/converter/registry.cpp deleted file mode 100644 index aa20c3f6852..00000000000 --- a/contrib/restricted/boost/python/src/converter/registry.cpp +++ /dev/null @@ -1,306 +0,0 @@ -// Copyright David Abrahams 2001. -// 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) -#include <boost/python/converter/registry.hpp> -#include <boost/python/converter/registrations.hpp> -#include <boost/python/converter/builtin_converters.hpp> - -#include <set> -#include <stdexcept> - -#if defined(__APPLE__) && defined(__MACH__) && defined(__GNUC__) \ - && __GNUC__ == 3 && __GNUC_MINOR__ <= 4 && !defined(__APPLE_CC__) -# define BOOST_PYTHON_CONVERTER_REGISTRY_APPLE_MACH_WORKAROUND -#endif - -#if defined(BOOST_PYTHON_TRACE_REGISTRY) \ - || defined(BOOST_PYTHON_CONVERTER_REGISTRY_APPLE_MACH_WORKAROUND) -# include <iostream> -#endif - -namespace boost { namespace python { namespace converter { -BOOST_PYTHON_DECL PyTypeObject const* registration::expected_from_python_type() const -{ - if (this->m_class_object != 0) - return this->m_class_object; - - std::set<PyTypeObject const*> pool; - - for(rvalue_from_python_chain* r = rvalue_chain; r ; r=r->next) - if(r->expected_pytype) - pool.insert(r->expected_pytype()); - - //for now I skip the search for common base - if (pool.size()==1) - return *pool.begin(); - - return 0; - -} - -BOOST_PYTHON_DECL PyTypeObject const* registration::to_python_target_type() const -{ - if (this->m_class_object != 0) - return this->m_class_object; - - if (this->m_to_python_target_type != 0) - return this->m_to_python_target_type(); - - return 0; -} - -BOOST_PYTHON_DECL PyTypeObject* registration::get_class_object() const -{ - if (this->m_class_object == 0) - { - ::PyErr_Format( - PyExc_TypeError - , const_cast<char*>("No Python class registered for C++ class %s") - , this->target_type.name()); - - throw_error_already_set(); - } - - return this->m_class_object; -} - -BOOST_PYTHON_DECL PyObject* registration::to_python(void const volatile* source) const -{ - if (this->m_to_python == 0) - { - handle<> msg( -#if PY_VERSION_HEX >= 0x3000000 - ::PyUnicode_FromFormat -#else - ::PyString_FromFormat -#endif - ( - "No to_python (by-value) converter found for C++ type: %s" - , this->target_type.name() - ) - ); - - PyErr_SetObject(PyExc_TypeError, msg.get()); - - throw_error_already_set(); - } - - return source == 0 - ? incref(Py_None) - : this->m_to_python(const_cast<void*>(source)); -} - -namespace -{ - template< typename T > - void delete_node( T* node ) - { - if( !!node && !!node->next ) - delete_node( node->next ); - delete node; - } -} - -registration::~registration() -{ - delete_node(lvalue_chain); - delete_node(rvalue_chain); -} - - -namespace // <unnamed> -{ - typedef registration entry; - - typedef std::set<entry> registry_t; - -#ifndef BOOST_PYTHON_CONVERTER_REGISTRY_APPLE_MACH_WORKAROUND - registry_t& entries() - { - static registry_t registry; - -# ifndef BOOST_PYTHON_SUPPRESS_REGISTRY_INITIALIZATION - static bool builtin_converters_initialized = false; - if (!builtin_converters_initialized) - { - // Make this true early because registering the builtin - // converters will cause recursion. - builtin_converters_initialized = true; - - initialize_builtin_converters(); - } -# ifdef BOOST_PYTHON_TRACE_REGISTRY - std::cout << "registry: "; - for (registry_t::iterator p = registry.begin(); p != registry.end(); ++p) - { - std::cout << p->target_type << "; "; - } - std::cout << '\n'; -# endif -# endif - return registry; - } -#else - registry_t& static_registry() - { - static registry_t result; - return result; - } - - bool static_builtin_converters_initialized() - { - static bool result = false; - if (result == false) { - result = true; - std::cout << std::flush; - return false; - } - return true; - } - - registry_t& entries() - { -# ifndef BOOST_PYTHON_SUPPRESS_REGISTRY_INITIALIZATION - if (!static_builtin_converters_initialized()) - { - initialize_builtin_converters(); - } -# ifdef BOOST_PYTHON_TRACE_REGISTRY - std::cout << "registry: "; - for (registry_t::iterator p = static_registry().begin(); p != static_registry().end(); ++p) - { - std::cout << p->target_type << "; "; - } - std::cout << '\n'; -# endif -# endif - return static_registry(); - } -#endif // BOOST_PYTHON_CONVERTER_REGISTRY_APPLE_MACH_WORKAROUND - - entry* get(type_info type, bool is_shared_ptr = false) - { -# ifdef BOOST_PYTHON_TRACE_REGISTRY - registry_t::iterator p = entries().find(entry(type)); - - std::cout << "looking up " << type << ": " - << (p == entries().end() || p->target_type != type - ? "...NOT found\n" : "...found\n"); -# endif - std::pair<registry_t::const_iterator,bool> pos_ins - = entries().insert(entry(type,is_shared_ptr)); - -# if __MWERKS__ >= 0x3000 - // do a little invariant checking if a change was made - if ( pos_ins.second ) - assert(entries().invariants()); -# endif - return const_cast<entry*>(&*pos_ins.first); - } -} // namespace <unnamed> - -namespace registry -{ - void insert(to_python_function_t f, type_info source_t, PyTypeObject const* (*to_python_target_type)()) - { -# ifdef BOOST_PYTHON_TRACE_REGISTRY - std::cout << "inserting to_python " << source_t << "\n"; -# endif - entry* slot = get(source_t); - - assert(slot->m_to_python == 0); // we have a problem otherwise - if (slot->m_to_python != 0) - { - std::string msg = ( - std::string("to-Python converter for ") - + source_t.name() - + " already registered; second conversion method ignored." - ); - - if ( ::PyErr_Warn( NULL, const_cast<char*>(msg.c_str()) ) ) - { - throw_error_already_set(); - } - } - slot->m_to_python = f; - slot->m_to_python_target_type = to_python_target_type; - } - - // Insert an lvalue from_python converter - void insert(convertible_function convert, type_info key, PyTypeObject const* (*exp_pytype)()) - { -# ifdef BOOST_PYTHON_TRACE_REGISTRY - std::cout << "inserting lvalue from_python " << key << "\n"; -# endif - entry* found = get(key); - lvalue_from_python_chain *registration = new lvalue_from_python_chain; - registration->convert = convert; - registration->next = found->lvalue_chain; - found->lvalue_chain = registration; - - insert(convert, 0, key,exp_pytype); - } - - // Insert an rvalue from_python converter - void insert(convertible_function convertible - , constructor_function construct - , type_info key - , PyTypeObject const* (*exp_pytype)()) - { -# ifdef BOOST_PYTHON_TRACE_REGISTRY - std::cout << "inserting rvalue from_python " << key << "\n"; -# endif - entry* found = get(key); - rvalue_from_python_chain *registration = new rvalue_from_python_chain; - registration->convertible = convertible; - registration->construct = construct; - registration->expected_pytype = exp_pytype; - registration->next = found->rvalue_chain; - found->rvalue_chain = registration; - } - - // Insert an rvalue from_python converter - void push_back(convertible_function convertible - , constructor_function construct - , type_info key - , PyTypeObject const* (*exp_pytype)()) - { -# ifdef BOOST_PYTHON_TRACE_REGISTRY - std::cout << "push_back rvalue from_python " << key << "\n"; -# endif - rvalue_from_python_chain** found = &get(key)->rvalue_chain; - while (*found != 0) - found = &(*found)->next; - - rvalue_from_python_chain *registration = new rvalue_from_python_chain; - registration->convertible = convertible; - registration->construct = construct; - registration->expected_pytype = exp_pytype; - registration->next = 0; - *found = registration; - } - - registration const& lookup(type_info key) - { - return *get(key); - } - - registration const& lookup_shared_ptr(type_info key) - { - return *get(key, true); - } - - registration const* query(type_info type) - { - registry_t::iterator p = entries().find(entry(type)); -# ifdef BOOST_PYTHON_TRACE_REGISTRY - std::cout << "querying " << type - << (p == entries().end() || p->target_type != type - ? "...NOT found\n" : "...found\n"); -# endif - return (p == entries().end() || p->target_type != type) ? 0 : &*p; - } -} // namespace registry - -}}} // namespace boost::python::converter diff --git a/contrib/restricted/boost/python/src/converter/type_id.cpp b/contrib/restricted/boost/python/src/converter/type_id.cpp deleted file mode 100644 index c6a8bf7a04e..00000000000 --- a/contrib/restricted/boost/python/src/converter/type_id.cpp +++ /dev/null @@ -1,212 +0,0 @@ -// Copyright David Abrahams 2001. -// 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) - -#include <boost/python/type_id.hpp> -#include <boost/python/detail/decorated_type_id.hpp> -#include <utility> -#include <vector> -#include <algorithm> -#include <memory> -#include <cstdlib> -#include <cstring> - -#if defined(__QNXNTO__) -# include <ostream> -#else /* defined(__QNXNTO__) */ - -#if !defined(__GNUC__) || __GNUC__ >= 3 || __SGI_STL_PORT || __EDG_VERSION__ -# include <ostream> -#else -# include <ostream.h> -#endif - -# ifdef BOOST_PYTHON_HAVE_GCC_CP_DEMANGLE -# if defined(__GNUC__) && __GNUC__ >= 3 - -// http://lists.debian.org/debian-gcc/2003/09/msg00055.html notes -// that, in cxxabi.h of gcc-3.x for x < 4, this type is used before it -// is declared. -# if __GNUC__ == 3 && __GNUC_MINOR__ < 4 -class __class_type_info; -# endif - -# include <cxxabi.h> -# endif -# endif -#endif /* defined(__QNXNTO__) */ - -namespace boost { namespace python { - -# ifdef BOOST_PYTHON_HAVE_GCC_CP_DEMANGLE - -# if defined(__QNXNTO__) -namespace cxxabi { -extern "C" char* __cxa_demangle(char const*, char*, std::size_t*, int*); -} -# else /* defined(__QNXNTO__) */ - -# ifdef __GNUC__ -# if __GNUC__ < 3 - -namespace cxxabi = :: ; -extern "C" char* __cxa_demangle(char const*, char*, std::size_t*, int*); -# else - -namespace cxxabi = ::abi; // GCC 3.1 and later - -# if __GNUC__ == 3 && __GNUC_MINOR__ == 0 -namespace abi -{ - extern "C" char* __cxa_demangle(char const*, char*, std::size_t*, int*); -} -# endif /* __GNUC__ == 3 && __GNUC_MINOR__ == 0 */ -# endif /* __GNUC__ < 3 */ -# endif /* __GNUC__ */ -# endif /* defined(__QNXNTO__) */ - -namespace -{ - struct compare_first_cstring - { - template <class T> - bool operator()(T const& x, T const& y) - { - return std::strcmp(x.first,y.first) < 0; - } - }; - - struct free_mem - { - free_mem(char*p) - : p(p) {} - - ~free_mem() - { - std::free(p); - } - char* p; - }; -} - -bool cxxabi_cxa_demangle_is_broken() -{ - static bool was_tested = false; - static bool is_broken = false; - if (!was_tested) { - int status; - free_mem keeper(cxxabi::__cxa_demangle("b", 0, 0, &status)); - was_tested = true; - if (status == -2 || strcmp(keeper.p, "bool") != 0) { - is_broken = true; - } - } - return is_broken; -} - -namespace detail -{ - BOOST_PYTHON_DECL char const* gcc_demangle(char const* mangled) - { - typedef std::vector< - std::pair<char const*, char const*> - > mangling_map; - - static mangling_map demangler; - mangling_map::iterator p - = std::lower_bound( - demangler.begin(), demangler.end() - , std::make_pair(mangled, (char const*)0) - , compare_first_cstring()); - - if (p == demangler.end() || strcmp(p->first, mangled)) - { - int status; - free_mem keeper( - cxxabi::__cxa_demangle(mangled, 0, 0, &status) - ); - - assert(status != -3); // invalid argument error - - if (status == -1) - { - throw std::bad_alloc(); - } - else - { - char const* demangled - = status == -2 - // Invalid mangled name. Best we can do is to - // return it intact. - ? mangled - : keeper.p; - - // Ult Mundane, 2005 Aug 17 - // Contributed 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) - // The __cxa_demangle function is supposed to translate - // builtin types from their one-character mangled names, - // but it doesn't in gcc 3.3.5 and gcc 3.4.x. - if (cxxabi_cxa_demangle_is_broken() - && status == -2 && strlen(mangled) == 1) - { - // list from - // http://www.codesourcery.com/cxx-abi/abi.html - switch (mangled[0]) - { - case 'v': demangled = "void"; break; - case 'w': demangled = "wchar_t"; break; - case 'b': demangled = "bool"; break; - case 'c': demangled = "char"; break; - case 'a': demangled = "signed char"; break; - case 'h': demangled = "unsigned char"; break; - case 's': demangled = "short"; break; - case 't': demangled = "unsigned short"; break; - case 'i': demangled = "int"; break; - case 'j': demangled = "unsigned int"; break; - case 'l': demangled = "long"; break; - case 'm': demangled = "unsigned long"; break; - case 'x': demangled = "long long"; break; - case 'y': demangled = "unsigned long long"; break; - case 'n': demangled = "__int128"; break; - case 'o': demangled = "unsigned __int128"; break; - case 'f': demangled = "float"; break; - case 'd': demangled = "double"; break; - case 'e': demangled = "long double"; break; - case 'g': demangled = "__float128"; break; - case 'z': demangled = "..."; break; - } - } - - p = demangler.insert(p, std::make_pair(mangled, demangled)); - keeper.p = 0; - } - } - - return p->second; - } -} -# endif - -BOOST_PYTHON_DECL std::ostream& operator<<(std::ostream& os, type_info const& x) -{ - return os << x.name(); -} - -namespace detail -{ - BOOST_PYTHON_DECL std::ostream& operator<<(std::ostream& os, detail::decorated_type_info const& x) - { - os << x.m_base_type; - if (x.m_decoration & decorated_type_info::const_) - os << " const"; - if (x.m_decoration & decorated_type_info::volatile_) - os << " volatile"; - if (x.m_decoration & decorated_type_info::reference) - os << "&"; - return os; - } -} -}} // namespace boost::python::converter diff --git a/contrib/restricted/boost/python/src/dict.cpp b/contrib/restricted/boost/python/src/dict.cpp deleted file mode 100644 index 77d840d4552..00000000000 --- a/contrib/restricted/boost/python/src/dict.cpp +++ /dev/null @@ -1,184 +0,0 @@ -// Copyright David Abrahams 2004. 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) -#include <boost/python/dict.hpp> -#include <boost/python/extract.hpp> - -namespace boost { namespace python { namespace detail { -namespace -{ - // When returning list objects from methods, it may turn out that the - // derived class is returning something else, perhaps something not - // even derived from list. Since it is generally harmless for a - // Boost.Python wrapper object to hold an object of a different - // type, and because calling list() with an object may in fact - // perform a conversion, the least-bad alternative is to assume that - // we have a Python list object and stuff it into the list result. - list assume_list(object const& o) - { - return list(detail::borrowed_reference(o.ptr())); - } - - // No PyDict_CheckExact; roll our own. - inline bool check_exact(dict_base const* p) - { - return p->ptr()->ob_type == &PyDict_Type; - } -} - -detail::new_reference dict_base::call(object const& arg_) -{ - return (detail::new_reference)PyObject_CallFunction( - (PyObject*)&PyDict_Type, const_cast<char*>("(O)"), - arg_.ptr()); -} - -dict_base::dict_base() - : object(detail::new_reference(PyDict_New())) -{} - -dict_base::dict_base(object_cref data) - : object(call(data)) -{} - -void dict_base::clear() -{ - if (check_exact(this)) - PyDict_Clear(this->ptr()); - else - this->attr("clear")(); -} - -dict dict_base::copy() -{ - if (check_exact(this)) - { - return dict(detail::new_reference( - PyDict_Copy(this->ptr()))); - } - else - { - return dict(detail::borrowed_reference( - this->attr("copy")().ptr() - )); - } -} - -object dict_base::get(object_cref k) const -{ - if (check_exact(this)) - { - PyObject* result = PyDict_GetItem(this->ptr(),k.ptr()); - return object(detail::borrowed_reference(result ? result : Py_None)); - } - else - { - return this->attr("get")(k); - } -} - -object dict_base::get(object_cref k, object_cref d) const -{ - return this->attr("get")(k,d); -} - -bool dict_base::has_key(object_cref k) const -{ - return extract<bool>(this->contains(k)); -} - -list dict_base::items() const -{ - if (check_exact(this)) - { - return list(detail::new_reference( - PyDict_Items(this->ptr()))); - } - else - { - return assume_list(this->attr("items")()); - } -} - -object dict_base::iteritems() const -{ - return this->attr("iteritems")(); -} - -object dict_base::iterkeys() const -{ - return this->attr("iterkeys")(); -} - -object dict_base::itervalues() const -{ - return this->attr("itervalues")(); -} - -list dict_base::keys() const -{ - if (check_exact(this)) - { - return list(detail::new_reference( - PyDict_Keys(this->ptr()))); - } - else - { - return assume_list(this->attr("keys")()); - } -} - -tuple dict_base::popitem() -{ - return tuple(detail::borrowed_reference( - this->attr("popitem")().ptr() - )); -} - -object dict_base::setdefault(object_cref k) -{ - return this->attr("setdefault")(k); -} - -object dict_base::setdefault(object_cref k, object_cref d) -{ - return this->attr("setdefault")(k,d); -} - -void dict_base::update(object_cref other) -{ - if (check_exact(this)) - { - if (PyDict_Update(this->ptr(),other.ptr()) == -1) - throw_error_already_set(); - } - else - { - this->attr("update")(other); - } -} - -list dict_base::values() const -{ - if (check_exact(this)) - { - return list(detail::new_reference( - PyDict_Values(this->ptr()))); - } - else - { - return assume_list(this->attr("values")()); - } -} - -static struct register_dict_pytype_ptr -{ - register_dict_pytype_ptr() - { - const_cast<converter::registration &>( - converter::registry::lookup(boost::python::type_id<boost::python::dict>()) - ).m_class_object = &PyDict_Type; - } -}register_dict_pytype_ptr_; - -}}} // namespace boost::python diff --git a/contrib/restricted/boost/python/src/errors.cpp b/contrib/restricted/boost/python/src/errors.cpp deleted file mode 100644 index 34ea22f43e9..00000000000 --- a/contrib/restricted/boost/python/src/errors.cpp +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright David Abrahams 2001. -// 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 BOOST_PYTHON_SOURCE -# define BOOST_PYTHON_SOURCE -#endif - -#include <boost/python/errors.hpp> -#include <boost/cast.hpp> -#include <boost/python/detail/exception_handler.hpp> - -namespace boost { namespace python { - -error_already_set::~error_already_set() {} - -// IMPORTANT: this function may only be called from within a catch block! -BOOST_PYTHON_DECL bool handle_exception_impl(function0<void> f) -{ - try - { - if (detail::exception_handler::chain) - return detail::exception_handler::chain->handle(f); - f(); - return false; - } - catch(const boost::python::error_already_set&) - { - // The python error reporting has already been handled. - } - catch(const std::bad_alloc&) - { - PyErr_NoMemory(); - } - catch(const bad_numeric_cast& x) - { - PyErr_SetString(PyExc_OverflowError, x.what()); - } - catch(const std::out_of_range& x) - { - PyErr_SetString(PyExc_IndexError, x.what()); - } - catch(const std::invalid_argument& x) - { - PyErr_SetString(PyExc_ValueError, x.what()); - } - catch(const std::exception& x) - { - PyErr_SetString(PyExc_RuntimeError, x.what()); - } - catch(...) - { - PyErr_SetString(PyExc_RuntimeError, "unidentifiable C++ exception"); - } - return true; -} - -void BOOST_PYTHON_DECL throw_error_already_set() -{ - throw error_already_set(); -} - -namespace detail { - -bool exception_handler::operator()(function0<void> const& f) const -{ - if (m_next) - { - return m_next->handle(f); - } - else - { - f(); - return false; - } -} - -exception_handler::exception_handler(handler_function const& impl) - : m_impl(impl) - , m_next(0) -{ - if (chain != 0) - tail->m_next = this; - else - chain = this; - tail = this; -} - -exception_handler* exception_handler::chain; -exception_handler* exception_handler::tail; - -BOOST_PYTHON_DECL void register_exception_handler(handler_function const& f) -{ - // the constructor links the new object into a handler chain, so - // this object isn't actaully leaked (until, of course, the - // interpreter exits). - new exception_handler(f); -} - -} // namespace boost::python::detail - -}} // namespace boost::python - - diff --git a/contrib/restricted/boost/python/src/exec.cpp b/contrib/restricted/boost/python/src/exec.cpp deleted file mode 100644 index 7488da1f6dd..00000000000 --- a/contrib/restricted/boost/python/src/exec.cpp +++ /dev/null @@ -1,138 +0,0 @@ -// Copyright Stefan Seefeld 2005. -// 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) - -#include <boost/python/exec.hpp> -#include <boost/python/borrowed.hpp> -#include <boost/python/dict.hpp> -#include <boost/python/extract.hpp> -#include <boost/python/handle.hpp> - -namespace boost -{ -namespace python -{ - -object BOOST_PYTHON_DECL eval(str string, object global, object local) -{ - return eval(python::extract<char const *>(string), global, local); -} - -object BOOST_PYTHON_DECL eval(char const *string, object global, object local) -{ - // Set suitable default values for global and local dicts. - if (global.is_none()) - { - if (PyObject *g = PyEval_GetGlobals()) - global = object(detail::borrowed_reference(g)); - else - global = dict(); - } - if (local.is_none()) local = global; - // should be 'char const *' but older python versions don't use 'const' yet. - char *s = const_cast<char *>(string); - PyObject* result = PyRun_String(s, Py_eval_input, global.ptr(), local.ptr()); - if (!result) throw_error_already_set(); - return object(detail::new_reference(result)); -} - -object BOOST_PYTHON_DECL exec(str string, object global, object local) -{ - return exec(python::extract<char const *>(string), global, local); -} - -object BOOST_PYTHON_DECL exec(char const *string, object global, object local) -{ - // Set suitable default values for global and local dicts. - if (global.is_none()) - { - if (PyObject *g = PyEval_GetGlobals()) - global = object(detail::borrowed_reference(g)); - else - global = dict(); - } - if (local.is_none()) local = global; - // should be 'char const *' but older python versions don't use 'const' yet. - char *s = const_cast<char *>(string); - PyObject* result = PyRun_String(s, Py_file_input, global.ptr(), local.ptr()); - if (!result) throw_error_already_set(); - return object(detail::new_reference(result)); -} - -object BOOST_PYTHON_DECL exec_statement(str string, object global, object local) -{ - return exec_statement(python::extract<char const *>(string), global, local); -} - -object BOOST_PYTHON_DECL exec_statement(char const *string, object global, object local) -{ - // Set suitable default values for global and local dicts. - if (global.is_none()) - { - if (PyObject *g = PyEval_GetGlobals()) - global = object(detail::borrowed_reference(g)); - else - global = dict(); - } - if (local.is_none()) local = global; - // should be 'char const *' but older python versions don't use 'const' yet. - char *s = const_cast<char *>(string); - PyObject* result = PyRun_String(s, Py_single_input, global.ptr(), local.ptr()); - if (!result) throw_error_already_set(); - return object(detail::new_reference(result)); -} - -// Execute python source code from file filename. -// global and local are the global and local scopes respectively, -// used during execution. -object BOOST_PYTHON_DECL exec_file(str filename, object global, object local) -{ - return exec_file(python::extract<char const *>(filename), global, local); -} - -object BOOST_PYTHON_DECL exec_file(char const *filename, object global, object local) -{ - // Set suitable default values for global and local dicts. - if (global.is_none()) - { - if (PyObject *g = PyEval_GetGlobals()) - global = object(detail::borrowed_reference(g)); - else - global = dict(); - } - if (local.is_none()) local = global; - // should be 'char const *' but older python versions don't use 'const' yet. - char *f = const_cast<char *>(filename); -#if PY_VERSION_HEX >= 0x03010000 - // Let python manage any UTF bits to avoid potential incompatibilities. - PyObject *fo = Py_BuildValue("s", f); - PyObject *fb = Py_None; - PyUnicode_FSConverter(fo, &fb); - char *f_as_uft = PyBytes_AsString(fb); - FILE *fs = fopen(f_as_uft, "r"); - Py_DECREF(fo); - Py_DECREF(fb); -#elif PY_VERSION_HEX >= 0x03000000 - // Let python open the file to avoid potential binary incompatibilities. - PyObject *fo = Py_BuildValue("s", f); - FILE *fs = fopen(fo, "r"); - Py_DECREF(fo); -#else - // Let python open the file to avoid potential binary incompatibilities. - 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, - f, - Py_file_input, - global.ptr(), local.ptr()); - fclose(fs); - if (!result) throw_error_already_set(); - return object(detail::new_reference(result)); -} - -} // namespace boost::python -} // namespace boost diff --git a/contrib/restricted/boost/python/src/import.cpp b/contrib/restricted/boost/python/src/import.cpp deleted file mode 100644 index 0add79eea25..00000000000 --- a/contrib/restricted/boost/python/src/import.cpp +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright Stefan Seefeld 2005. -// 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) - -#include <boost/python/import.hpp> -#include <boost/python/borrowed.hpp> -#include <boost/python/extract.hpp> -#include <boost/python/handle.hpp> - -namespace boost -{ -namespace python -{ - -object BOOST_PYTHON_DECL import(str name) -{ - // should be 'char const *' but older python versions don't use 'const' yet. - char *n = python::extract<char *>(name); - python::handle<> module(PyImport_ImportModule(n)); - return python::object(module); -} - -} // namespace boost::python -} // namespace boost diff --git a/contrib/restricted/boost/python/src/list.cpp b/contrib/restricted/boost/python/src/list.cpp deleted file mode 100644 index 77e616881ab..00000000000 --- a/contrib/restricted/boost/python/src/list.cpp +++ /dev/null @@ -1,170 +0,0 @@ -// 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) -#include <boost/python/list.hpp> -#include <boost/python/ssize_t.hpp> - -namespace boost { namespace python { namespace detail { - - -detail::new_non_null_reference list_base::call(object const& arg_) -{ - return (detail::new_non_null_reference) - (expect_non_null)( - PyObject_CallFunction( - (PyObject*)&PyList_Type, const_cast<char*>("(O)"), - arg_.ptr())); -} - -list_base::list_base() - : object(detail::new_reference(PyList_New(0))) -{} - -list_base::list_base(object_cref sequence) - : object(list_base::call(sequence)) -{} - -void list_base::append(object_cref x) -{ - if (PyList_CheckExact(this->ptr())) - { - if (PyList_Append(this->ptr(), x.ptr()) == -1) - throw_error_already_set(); - } - else - { - this->attr("append")(x); - } -} - -//long list_base::count(object_cref value) const; - -void list_base::extend(object_cref sequence) -{ - this->attr("extend")(sequence); -} - -long list_base::index(object_cref value) const -{ - object result_obj(this->attr("index")(value)); -#if PY_VERSION_HEX >= 0x03000000 - ssize_t result = PyLong_AsSsize_t(result_obj.ptr()); -#else - long result = PyInt_AsLong(result_obj.ptr()); -#endif - if (result == -1) - throw_error_already_set(); - return result; -} - -void list_base::insert(ssize_t index, object_cref item) -{ - if (PyList_CheckExact(this->ptr())) - { - if (PyList_Insert(this->ptr(), index, item.ptr()) == -1) - throw_error_already_set(); - } - else - { - this->attr("insert")(index, item); - } -} - -void list_base::insert(object const& index, object_cref x) -{ -#if PY_VERSION_HEX >= 0x03000000 - ssize_t index_ = PyLong_AsSsize_t(index.ptr()); -#else - long index_ = PyInt_AsLong(index.ptr()); -#endif - if (index_ == -1 && PyErr_Occurred()) - throw_error_already_set(); - this->insert(index_, x); -} - -object list_base::pop() -{ - return this->attr("pop")(); -} - -object list_base::pop(ssize_t index) -{ - return this->pop(object(index)); -} - -object list_base::pop(object const& index) -{ - return this->attr("pop")(index); -} - -void list_base::remove(object_cref value) -{ - this->attr("remove")(value); -} - -void list_base::reverse() -{ - if (PyList_CheckExact(this->ptr())) - { - if (PyList_Reverse(this->ptr()) == -1) - throw_error_already_set(); - } - else - { - this->attr("reverse")(); - } -} - -void list_base::sort() -{ - if (PyList_CheckExact(this->ptr())) - { - if (PyList_Sort(this->ptr()) == -1) - throw_error_already_set(); - } - else - { - this->attr("sort")(); - } -} - -#if PY_VERSION_HEX >= 0x03000000 -void list_base::sort(args_proxy const &args, - kwds_proxy const &kwds) -{ - this->attr("sort")(args, kwds); -} -#else -void list_base::sort(object_cref cmpfunc) -{ - this->attr("sort")(cmpfunc); -} -#endif - -// For some reason, moving this to the end of the TU suppresses an ICE -// with vc6. -ssize_t list_base::count(object_cref value) const -{ - object result_obj(this->attr("count")(value)); -#if PY_VERSION_HEX >= 0x03000000 - ssize_t result = PyLong_AsSsize_t(result_obj.ptr()); -#else - long result = PyInt_AsLong(result_obj.ptr()); -#endif - if (result == -1) - throw_error_already_set(); - return result; -} - -static struct register_list_pytype_ptr -{ - register_list_pytype_ptr() - { - const_cast<converter::registration &>( - converter::registry::lookup(boost::python::type_id<boost::python::list>()) - ).m_class_object = &PyList_Type; - } -}register_list_pytype_ptr_; - -}}} // namespace boost::python diff --git a/contrib/restricted/boost/python/src/long.cpp b/contrib/restricted/boost/python/src/long.cpp deleted file mode 100644 index 6aa2965e834..00000000000 --- a/contrib/restricted/boost/python/src/long.cpp +++ /dev/null @@ -1,39 +0,0 @@ -// 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) -#include <boost/python/long.hpp> - -namespace boost { namespace python { namespace detail { - -new_reference long_base::call(object const& arg_) -{ - return (detail::new_reference)PyObject_CallFunction( - (PyObject*)&PyLong_Type, const_cast<char*>("(O)"), - arg_.ptr()); -} - -new_reference long_base::call(object const& arg_, object const& base) -{ - return (detail::new_reference)PyObject_CallFunction( - (PyObject*)&PyLong_Type, const_cast<char*>("(OO)"), - arg_.ptr(), base.ptr()); -} - -long_base::long_base() - : object( - detail::new_reference( - PyObject_CallFunction((PyObject*)&PyLong_Type, const_cast<char*>("()"))) - ) -{} - -long_base::long_base(object_cref arg) - : object(long_base::call(arg)) -{} - -long_base::long_base(object_cref arg, object_cref base) - : object(long_base::call(arg, base)) -{} - - -}}} // namespace boost::python diff --git a/contrib/restricted/boost/python/src/module.cpp b/contrib/restricted/boost/python/src/module.cpp deleted file mode 100644 index 57675fa2df8..00000000000 --- a/contrib/restricted/boost/python/src/module.cpp +++ /dev/null @@ -1,73 +0,0 @@ -// (C) Copyright David Abrahams 2000. -// 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) -// -// The author gratefully acknowleges the support of Dragon Systems, Inc., in -// producing this work. - -#include <boost/python/scope.hpp> -#include <boost/python/object/add_to_namespace.hpp> - -namespace boost { namespace python { namespace detail { - -namespace -{ - PyObject* init_module_in_scope(PyObject* m, void(*init_function)()) - { - if (m != 0) - { - // Create the current module scope - object m_obj(((borrowed_reference_t*)m)); - scope current_module(m_obj); - - if (handle_exception(init_function)) return NULL; - } - - return m; - } -} - -BOOST_PYTHON_DECL void scope_setattr_doc(char const* name, object const& x, char const* doc) -{ - // Use function::add_to_namespace to achieve overloading if - // appropriate. - scope current; - objects::add_to_namespace(current, name, x, doc); -} - -#if PY_VERSION_HEX >= 0x03000000 - -BOOST_PYTHON_DECL PyObject* init_module(PyModuleDef& moduledef, void(*init_function)()) -{ - return init_module_in_scope( - PyModule_Create(&moduledef), - init_function); -} - -#else - -namespace -{ - PyMethodDef initial_methods[] = { { 0, 0, 0, 0 } }; -} - -BOOST_PYTHON_DECL PyObject* init_module(char const* name, void(*init_function)()) -{ - return init_module_in_scope( - Py_InitModule(const_cast<char*>(name), initial_methods), - init_function); -} - -#endif - -}}} // namespace boost::python::detail - -namespace boost { namespace python { - -namespace detail -{ - BOOST_PYTHON_DECL PyObject* current_scope = 0; -} - -}} diff --git a/contrib/restricted/boost/python/src/object/class.cpp b/contrib/restricted/boost/python/src/object/class.cpp deleted file mode 100644 index c3afd1127ff..00000000000 --- a/contrib/restricted/boost/python/src/object/class.cpp +++ /dev/null @@ -1,781 +0,0 @@ -// Copyright David Abrahams 2001. -// 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) - -#include <boost/python/detail/prefix.hpp> -#include <boost/mpl/lambda.hpp> // #including this first is an intel6 workaround -#include <boost/cstdint.hpp> - -#include <boost/python/object/class.hpp> -#include <boost/python/object/instance.hpp> -#include <boost/python/object/class_detail.hpp> -#include <boost/python/scope.hpp> -#include <boost/python/converter/registry.hpp> -#include <boost/python/object/find_instance.hpp> -#include <boost/python/object/pickle_support.hpp> -#include <boost/python/detail/map_entry.hpp> -#include <boost/python/object.hpp> -#include <boost/python/object_protocol.hpp> -#include <boost/detail/binary_search.hpp> -#include <boost/python/self.hpp> -#include <boost/python/dict.hpp> -#include <boost/python/str.hpp> -#include <boost/python/ssize_t.hpp> -#include <functional> -#include <vector> -#include <cstddef> -#include <new> -#include <structmember.h> - -namespace boost { namespace python { - -# ifdef BOOST_PYTHON_SELF_IS_CLASS -namespace self_ns -{ - self_t self; -} -# endif - -instance_holder::instance_holder() - : m_next(0) -{ -} - -instance_holder::~instance_holder() -{ -} - -extern "C" -{ - // This is copied from typeobject.c in the Python sources. Even though - // class_metatype_object doesn't set Py_TPFLAGS_HAVE_GC, that bit gets - // filled in by the base class initialization process in - // PyType_Ready(). However, tp_is_gc is *not* copied from the base - // type, making it assume that classes are GC-able even if (like - // class_type_object) they're statically allocated. - static int - type_is_gc(PyTypeObject *python_type) - { - return python_type->tp_flags & Py_TPFLAGS_HEAPTYPE; - } - - // This is also copied from the Python sources. We can't implement - // static_data as a subclass property effectively without it. - typedef struct { - PyObject_HEAD - PyObject *prop_get; - PyObject *prop_set; - PyObject *prop_del; - PyObject *prop_doc; - int getter_doc; - } propertyobject; - - // Copied from Python source and removed the part for setting docstring, - // since we don't have a setter for __doc__ and trying to set it will - // cause the init fail. - static int property_init(PyObject *self, PyObject *args, PyObject *kwds) - { - PyObject *get = NULL, *set = NULL, *del = NULL, *doc = NULL; - static const char *kwlist[] = {"fget", "fset", "fdel", "doc", 0}; - propertyobject *prop = (propertyobject *)self; - - if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OOOO:property", - const_cast<char **>(kwlist), &get, &set, &del, &doc)) - return -1; - - if (get == Py_None) - get = NULL; - if (set == Py_None) - set = NULL; - if (del == Py_None) - del = NULL; - - Py_XINCREF(get); - Py_XINCREF(set); - Py_XINCREF(del); - Py_XINCREF(doc); - - prop->prop_get = get; - prop->prop_set = set; - prop->prop_del = del; - prop->prop_doc = doc; - prop->getter_doc = 0; - - return 0; - } - - - static PyObject * - static_data_descr_get(PyObject *self, PyObject * /*obj*/, PyObject * /*type*/) - { - propertyobject *gs = (propertyobject *)self; - - return PyObject_CallFunction(gs->prop_get, const_cast<char*>("()")); - } - - static int - static_data_descr_set(PyObject *self, PyObject * /*obj*/, PyObject *value) - { - propertyobject *gs = (propertyobject *)self; - PyObject *func, *res; - - if (value == NULL) - func = gs->prop_del; - else - func = gs->prop_set; - if (func == NULL) { - PyErr_SetString(PyExc_AttributeError, - value == NULL ? - "can't delete attribute" : - "can't set attribute"); - return -1; - } - if (value == NULL) - res = PyObject_CallFunction(func, const_cast<char*>("()")); - else - res = PyObject_CallFunction(func, const_cast<char*>("(O)"), value); - if (res == NULL) - return -1; - Py_DECREF(res); - return 0; - } -} - -static PyTypeObject static_data_object = { - PyVarObject_HEAD_INIT(NULL, 0) - const_cast<char*>("Boost.Python.StaticProperty"), - sizeof(propertyobject), - 0, - 0, /* tp_dealloc */ - 0, /* tp_print */ - 0, /* tp_getattr */ - 0, /* tp_setattr */ - 0, /* tp_compare */ - 0, /* tp_repr */ - 0, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - 0, /* tp_hash */ - 0, /* tp_call */ - 0, /* tp_str */ - 0, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT // | Py_TPFLAGS_HAVE_GC - | Py_TPFLAGS_BASETYPE, /* tp_flags */ - 0, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - 0, /* tp_methods */ - 0, /* tp_members */ - 0, /* tp_getset */ - 0, //&PyProperty_Type, /* tp_base */ - 0, /* tp_dict */ - static_data_descr_get, /* tp_descr_get */ - static_data_descr_set, /* tp_descr_set */ - 0, /* tp_dictoffset */ - property_init, /* tp_init */ - 0, /* tp_alloc */ - 0, // filled in with type_new /* tp_new */ - 0, // filled in with __PyObject_GC_Del /* tp_free */ - 0, /* tp_is_gc */ - 0, /* tp_bases */ - 0, /* tp_mro */ - 0, /* tp_cache */ - 0, /* tp_subclasses */ - 0, /* tp_weaklist */ -#if PYTHON_API_VERSION >= 1012 - 0 /* tp_del */ -#endif -}; - -namespace objects -{ -#if PY_VERSION_HEX < 0x03000000 - // XXX Not sure why this run into compiling error in Python 3 - extern "C" - { - // This declaration needed due to broken Python 2.2 headers - extern DL_IMPORT(PyTypeObject) PyProperty_Type; - } -#endif - - BOOST_PYTHON_DECL PyObject* static_data() - { - if (static_data_object.tp_dict == 0) - { - Py_SET_TYPE(&static_data_object, &PyType_Type); - static_data_object.tp_base = &PyProperty_Type; - if (PyType_Ready(&static_data_object)) - return 0; - } - return upcast<PyObject>(&static_data_object); - } -} - -extern "C" -{ - // Ordinarily, descriptors have a certain assymetry: you can use - // them to read attributes off the class object they adorn, but - // writing the same attribute on the class object always replaces - // the descriptor in the class __dict__. In order to properly - // represent C++ static data members, we need to allow them to be - // written through the class instance. This function of the - // metaclass makes it possible. - static int - class_setattro(PyObject *obj, PyObject *name, PyObject* value) - { - // Must use "private" Python implementation detail - // _PyType_Lookup instead of PyObject_GetAttr because the - // latter will always end up calling the descr_get function on - // any descriptor it finds; we need the unadulterated - // descriptor here. - PyObject* a = _PyType_Lookup(downcast<PyTypeObject>(obj), name); - - // a is a borrowed reference or 0 - - // If we found a static data descriptor, call it directly to - // force it to set the static data member - if (a != 0 && PyObject_IsInstance(a, objects::static_data())) - return Py_TYPE(a)->tp_descr_set(a, obj, value); - else - return PyType_Type.tp_setattro(obj, name, value); - } -} - -static PyTypeObject class_metatype_object = { - PyVarObject_HEAD_INIT(NULL, 0) - const_cast<char*>("Boost.Python.class"), - PyType_Type.tp_basicsize, - 0, - 0, /* tp_dealloc */ - 0, /* tp_print */ - 0, /* tp_getattr */ - 0, /* tp_setattr */ - 0, /* tp_compare */ - 0, /* tp_repr */ - 0, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - 0, /* tp_hash */ - 0, /* tp_call */ - 0, /* tp_str */ - 0, /* tp_getattro */ - class_setattro, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT // | Py_TPFLAGS_HAVE_GC - | Py_TPFLAGS_BASETYPE, /* tp_flags */ - 0, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - 0, /* tp_methods */ - 0, /* tp_members */ - 0, /* tp_getset */ - 0, //&PyType_Type, /* tp_base */ - 0, /* tp_dict */ - 0, /* tp_descr_get */ - 0, /* tp_descr_set */ - 0, /* tp_dictoffset */ - 0, /* tp_init */ - 0, /* tp_alloc */ - 0, // filled in with type_new /* tp_new */ - 0, // filled in with __PyObject_GC_Del /* tp_free */ - (inquiry)type_is_gc, /* tp_is_gc */ - 0, /* tp_bases */ - 0, /* tp_mro */ - 0, /* tp_cache */ - 0, /* tp_subclasses */ - 0, /* tp_weaklist */ -#if PYTHON_API_VERSION >= 1012 - 0 /* tp_del */ -#endif -}; - -// Install the instance data for a C++ object into a Python instance -// object. -void instance_holder::install(PyObject* self) noexcept -{ - assert(PyType_IsSubtype(Py_TYPE(Py_TYPE(self)), &class_metatype_object)); - m_next = ((objects::instance<>*)self)->objects; - ((objects::instance<>*)self)->objects = this; -} - - -namespace objects -{ -// Get the metatype object for all extension classes. - BOOST_PYTHON_DECL type_handle class_metatype() - { - if (class_metatype_object.tp_dict == 0) - { - Py_SET_TYPE(&class_metatype_object, &PyType_Type); - class_metatype_object.tp_base = &PyType_Type; - if (PyType_Ready(&class_metatype_object)) - return type_handle(); - } - return type_handle(borrowed(&class_metatype_object)); - } - extern "C" - { - static void instance_dealloc(PyObject* inst) - { - instance<>* kill_me = (instance<>*)inst; - - for (instance_holder* p = kill_me->objects, *next; p != 0; p = next) - { - next = p->next(); - p->~instance_holder(); - instance_holder::deallocate(inst, dynamic_cast<void*>(p)); - } - - // Python 2.2.1 won't add weak references automatically when - // tp_itemsize > 0, so we need to manage that - // ourselves. Accordingly, we also have to clean up the - // weakrefs ourselves. - if (kill_me->weakrefs != NULL) - PyObject_ClearWeakRefs(inst); - - Py_XDECREF(kill_me->dict); - - Py_TYPE(inst)->tp_free(inst); - } - - static PyObject * - instance_new(PyTypeObject* type_, PyObject* /*args*/, PyObject* /*kw*/) - { - // Attempt to find the __instance_size__ attribute. If not present, no problem. - PyObject* d = type_->tp_dict; - PyObject* instance_size_obj = PyObject_GetAttrString(d, const_cast<char*>("__instance_size__")); - - ssize_t instance_size = instance_size_obj ? -#if PY_VERSION_HEX >= 0x03000000 - PyLong_AsSsize_t(instance_size_obj) : 0; -#else - PyInt_AsLong(instance_size_obj) : 0; -#endif - - if (instance_size < 0) - instance_size = 0; - - PyErr_Clear(); // Clear any errors that may have occurred. - - instance<>* result = (instance<>*)type_->tp_alloc(type_, instance_size); - if (result) - { - // Guido says we can use ob_size for any purpose we - // like, so we'll store the total size of the object - // there. A negative number indicates that the extra - // instance memory is not yet allocated to any holders. - Py_SET_SIZE(result,-static_cast<int>(offsetof(instance<>,storage) + instance_size)); - } - return (PyObject*)result; - } - - static PyObject* instance_get_dict(PyObject* op, void*) - { - instance<>* inst = downcast<instance<> >(op); - if (inst->dict == 0) - inst->dict = PyDict_New(); - return python::xincref(inst->dict); - } - - static int instance_set_dict(PyObject* op, PyObject* dict, void*) - { - instance<>* inst = downcast<instance<> >(op); - python::xdecref(inst->dict); - inst->dict = python::incref(dict); - return 0; - } - - } - - - static PyGetSetDef instance_getsets[] = { - {const_cast<char*>("__dict__"), instance_get_dict, instance_set_dict, NULL, 0}, - {0, 0, 0, 0, 0} - }; - - - static PyMemberDef instance_members[] = { - {const_cast<char*>("__weakref__"), T_OBJECT, offsetof(instance<>, weakrefs), 0, 0}, - {0, 0, 0, 0, 0} - }; - - static PyTypeObject class_type_object = { - PyVarObject_HEAD_INIT(NULL, 0) - const_cast<char*>("Boost.Python.instance"), - offsetof(instance<>,storage), /* tp_basicsize */ - 1, /* tp_itemsize */ - instance_dealloc, /* tp_dealloc */ - 0, /* tp_print */ - 0, /* tp_getattr */ - 0, /* tp_setattr */ - 0, /* tp_compare */ - 0, /* tp_repr */ - 0, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - 0, /* tp_hash */ - 0, /* tp_call */ - 0, /* tp_str */ - 0, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT // | Py_TPFLAGS_HAVE_GC - | Py_TPFLAGS_BASETYPE, /* tp_flags */ - 0, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - offsetof(instance<>,weakrefs), /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - 0, /* tp_methods */ - instance_members, /* tp_members */ - instance_getsets, /* tp_getset */ - 0, //&PyBaseObject_Type, /* tp_base */ - 0, /* tp_dict */ - 0, /* tp_descr_get */ - 0, /* tp_descr_set */ - offsetof(instance<>,dict), /* tp_dictoffset */ - 0, /* tp_init */ - PyType_GenericAlloc, /* tp_alloc */ - instance_new, /* tp_new */ - 0, /* tp_free */ - 0, /* tp_is_gc */ - 0, /* tp_bases */ - 0, /* tp_mro */ - 0, /* tp_cache */ - 0, /* tp_subclasses */ - 0, /* tp_weaklist */ -#if PYTHON_API_VERSION >= 1012 - 0 /* tp_del */ -#endif - }; - - BOOST_PYTHON_DECL type_handle class_type() - { - if (class_type_object.tp_dict == 0) - { - Py_SET_TYPE(&class_type_object, incref(class_metatype().get())); - class_type_object.tp_base = &PyBaseObject_Type; - if (PyType_Ready(&class_type_object)) - return type_handle(); -// class_type_object.tp_setattro = class_setattro; - } - return type_handle(borrowed(&class_type_object)); - } - - BOOST_PYTHON_DECL void* - find_instance_impl(PyObject* inst, type_info type, bool null_shared_ptr_only) - { - if (!Py_TYPE(Py_TYPE(inst)) || - !PyType_IsSubtype(Py_TYPE(Py_TYPE(inst)), &class_metatype_object)) - return 0; - - instance<>* self = reinterpret_cast<instance<>*>(inst); - - for (instance_holder* match = self->objects; match != 0; match = match->next()) - { - void* const found = match->holds(type, null_shared_ptr_only); - if (found) - return found; - } - return 0; - } - - object module_prefix() - { - return object( - PyObject_IsInstance(scope().ptr(), upcast<PyObject>(&PyModule_Type)) - ? object(scope().attr("__name__")) - : api::getattr(scope(), "__module__", str()) - ); - } - - namespace - { - // Find a registered class object corresponding to id. Return a - // null handle if no such class is registered. - inline type_handle query_class(type_info id) - { - converter::registration const* p = converter::registry::query(id); - return type_handle( - python::borrowed( - python::allow_null(p ? p->m_class_object : 0)) - ); - } - - // Find a registered class corresponding to id. If not found, - // throw an appropriate exception. - type_handle get_class(type_info id) - { - type_handle result(query_class(id)); - - if (result.get() == 0) - { - object report("extension class wrapper for base class "); - report = report + id.name() + " has not been created yet"; - PyErr_SetObject(PyExc_RuntimeError, report.ptr()); - throw_error_already_set(); - } - return result; - } - - // class_base constructor - // - // name - the name of the new Python class - // - // num_types - one more than the number of declared bases - // - // types - array of python::type_info, the first item - // corresponding to the class being created, and the - // rest corresponding to its declared bases. - // - inline object - new_class(char const* name, std::size_t num_types, type_info const* const types, char const* doc) - { - assert(num_types >= 1); - - // Build a tuple of the base Python type objects. If no bases - // were declared, we'll use our class_type() as the single base - // class. - ssize_t const num_bases = (std::max)(num_types - 1, static_cast<std::size_t>(1)); - handle<> bases(PyTuple_New(num_bases)); - - for (ssize_t i = 1; i <= num_bases; ++i) - { - type_handle c = (i >= static_cast<ssize_t>(num_types)) ? class_type() : get_class(types[i]); - // PyTuple_SET_ITEM steals this reference - PyTuple_SET_ITEM(bases.get(), static_cast<ssize_t>(i - 1), upcast<PyObject>(c.release())); - } - - // Call the class metatype to create a new class - dict d; - - object m = module_prefix(); - if (m) d["__module__"] = m; - - if (doc != 0) - d["__doc__"] = doc; - - object result = object(class_metatype())(name, bases, d); - assert(PyType_IsSubtype(Py_TYPE(result.ptr()), &PyType_Type)); - - if (scope().ptr() != Py_None) - scope().attr(name) = result; - - // For pickle. Will lead to informative error messages if pickling - // is not enabled. - result.attr("__reduce__") = object(make_instance_reduce_function()); - - return result; - } - } - - class_base::class_base( - char const* name, std::size_t num_types, type_info const* const types, char const* doc) - : object(new_class(name, num_types, types, doc)) - { - // Insert the new class object in the registry - converter::registration& converters = const_cast<converter::registration&>( - converter::registry::lookup(types[0])); - - // Class object is leaked, for now - converters.m_class_object = (PyTypeObject*)incref(this->ptr()); - } - - BOOST_PYTHON_DECL void copy_class_object(type_info const& src, type_info const& dst) - { - converter::registration& dst_converters - = const_cast<converter::registration&>(converter::registry::lookup(dst)); - - converter::registration const& src_converters = converter::registry::lookup(src); - - dst_converters.m_class_object = src_converters.m_class_object; - } - - void class_base::set_instance_size(std::size_t instance_size) - { - this->attr("__instance_size__") = instance_size; - } - - void class_base::add_property( - char const* name, object const& fget, char const* docstr) - { - object property( - (python::detail::new_reference) - PyObject_CallFunction((PyObject*)&PyProperty_Type, const_cast<char*>("Osss"), fget.ptr(), (char*)NULL, (char*)NULL, docstr)); - - this->setattr(name, property); - } - - void class_base::add_property( - char const* name, object const& fget, object const& fset, char const* docstr) - { - object property( - (python::detail::new_reference) - PyObject_CallFunction((PyObject*)&PyProperty_Type, const_cast<char*>("OOss"), fget.ptr(), fset.ptr(), (char*)NULL, docstr)); - - this->setattr(name, property); - } - - void class_base::add_static_property(char const* name, object const& fget) - { - object property( - (python::detail::new_reference) - PyObject_CallFunction(static_data(), const_cast<char*>("O"), fget.ptr()) - ); - - this->setattr(name, property); - } - - void class_base::add_static_property(char const* name, object const& fget, object const& fset) - { - object property( - (python::detail::new_reference) - PyObject_CallFunction(static_data(), const_cast<char*>("OO"), fget.ptr(), fset.ptr())); - - this->setattr(name, property); - } - - void class_base::setattr(char const* name, object const& x) - { - if (PyObject_SetAttrString(this->ptr(), const_cast<char*>(name), x.ptr()) < 0) - throw_error_already_set(); - } - - namespace - { - extern "C" PyObject* no_init(PyObject*, PyObject*) - { - ::PyErr_SetString(::PyExc_RuntimeError, const_cast<char*>("This class cannot be instantiated from Python")); - return NULL; - } - static ::PyMethodDef no_init_def = { - const_cast<char*>("__init__"), no_init, METH_VARARGS, - const_cast<char*>("Raises an exception\n" - "This class cannot be instantiated from Python\n") - }; - } - - void class_base::def_no_init() - { - handle<> f(::PyCFunction_New(&no_init_def, 0)); - this->setattr("__init__", object(f)); - } - - void class_base::enable_pickling_(bool getstate_manages_dict) - { - setattr("__safe_for_unpickling__", object(true)); - - if (getstate_manages_dict) - { - setattr("__getstate_manages_dict__", object(true)); - } - } - - namespace - { - PyObject* callable_check(PyObject* callable) - { - if (PyCallable_Check(expect_non_null(callable))) - return callable; - - ::PyErr_Format( - PyExc_TypeError - , const_cast<char*>("staticmethod expects callable object; got an object of type %s, which is not callable") - , Py_TYPE(callable)->tp_name - ); - - throw_error_already_set(); - return 0; - } - } - - void class_base::make_method_static(const char * method_name) - { - PyTypeObject* self = downcast<PyTypeObject>(this->ptr()); - dict d((handle<>(borrowed(self->tp_dict)))); - - object method(d[method_name]); - - this->attr(method_name) = object( - handle<>( - PyStaticMethod_New((callable_check)(method.ptr()) ) - )); - } - - BOOST_PYTHON_DECL type_handle registered_class_object(type_info id) - { - return query_class(id); - } -} // namespace objects - - -typedef unsigned int alignment_marker_t; - -void* instance_holder::allocate(PyObject* self_, std::size_t holder_offset, std::size_t holder_size, std::size_t alignment) -{ - assert(PyType_IsSubtype(Py_TYPE(Py_TYPE(self_)), &class_metatype_object)); - objects::instance<>* self = (objects::instance<>*)self_; - - int total_size_needed = holder_offset + holder_size + alignment - 1; - - if (-Py_SIZE(self) >= total_size_needed) - { - // holder_offset should at least point into the variable-sized part - assert(holder_offset >= offsetof(objects::instance<>,storage)); - - size_t allocated = holder_size + alignment; - void* storage = (char*)self + holder_offset; - void* aligned_storage = ::boost::alignment::align(alignment, holder_size, storage, allocated); - - // Record the fact that the storage is occupied, noting where it starts - const size_t offset = reinterpret_cast<uintptr_t>(aligned_storage) - reinterpret_cast<uintptr_t>(storage) + holder_offset; - Py_SET_SIZE(self, offset); - return (char*)self + offset; - } - else - { - const size_t base_allocation = sizeof(alignment_marker_t) + holder_size + alignment - 1; - void* const base_storage = PyMem_Malloc(base_allocation); - if (base_storage == 0) - throw std::bad_alloc(); - - const uintptr_t x = reinterpret_cast<uintptr_t>(base_storage) + sizeof(alignment_marker_t); - //this has problems for x -> max(void *) - //const size_t padding = alignment - ((x + sizeof(alignment_marker_t)) % alignment); - //only works for alignments with alignments of powers of 2, but no edge conditions - const uintptr_t padding = alignment == 1 ? 0 : ( alignment - (x & (alignment - 1)) ); - const size_t aligned_offset = sizeof(alignment_marker_t) + padding; - void* const aligned_storage = (char *)base_storage + aligned_offset; - BOOST_ASSERT((char *) aligned_storage + holder_size <= (char *)base_storage + base_allocation); - alignment_marker_t* const marker_storage = reinterpret_cast<alignment_marker_t *>((char *)aligned_storage - sizeof(alignment_marker_t)); - *marker_storage = static_cast<alignment_marker_t>(padding); - return aligned_storage; - } -} - -void instance_holder::deallocate(PyObject* self_, void* storage) noexcept -{ - assert(PyType_IsSubtype(Py_TYPE(Py_TYPE(self_)), &class_metatype_object)); - objects::instance<>* self = (objects::instance<>*)self_; - if (storage != (char*)self + Py_SIZE(self)) - { - alignment_marker_t* marker_storage = reinterpret_cast<alignment_marker_t *>((char *)storage - sizeof(alignment_marker_t)); - void *malloced_storage = (char *) storage - sizeof(alignment_marker_t) - (*marker_storage); - PyMem_Free(malloced_storage); - } -} - -}} // namespace boost::python diff --git a/contrib/restricted/boost/python/src/object/enum.cpp b/contrib/restricted/boost/python/src/object/enum.cpp deleted file mode 100644 index 5753b32e074..00000000000 --- a/contrib/restricted/boost/python/src/object/enum.cpp +++ /dev/null @@ -1,251 +0,0 @@ -// 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) - -#include <boost/python/object/enum_base.hpp> -#include <boost/python/cast.hpp> -#include <boost/python/scope.hpp> -#include <boost/python/object.hpp> -#include <boost/python/tuple.hpp> -#include <boost/python/dict.hpp> -#include <boost/python/str.hpp> -#include <boost/python/extract.hpp> -#include <boost/python/object_protocol.hpp> -#include <structmember.h> - -namespace boost { namespace python { namespace objects { - -struct enum_object -{ -#if PY_VERSION_HEX >= 0x03000000 - PyLongObject base_object; -#else - PyIntObject base_object; -#endif - PyObject* name; -}; - -static PyMemberDef enum_members[] = { - {const_cast<char*>("name"), T_OBJECT_EX, offsetof(enum_object,name),READONLY, 0}, - {0, 0, 0, 0, 0} -}; - - -extern "C" -{ - static void - enum_dealloc(enum_object* self) - { - Py_XDECREF(self->name); - Py_TYPE(self)->tp_free((PyObject*)self); - } - - static PyObject* enum_repr(PyObject* self_) - { - PyObject *mod = PyObject_GetAttrString( self_, "__module__"); - object auto_free = object(handle<>(mod)); - enum_object* self = downcast<enum_object>(self_); - if (!self->name) - { - return -#if PY_VERSION_HEX >= 0x03000000 - PyUnicode_FromFormat("%S.%s(%ld)", mod, self_->ob_type->tp_name, PyLong_AsLong(self_)); -#else - PyString_FromFormat("%s.%s(%ld)", PyString_AsString(mod), self_->ob_type->tp_name, PyInt_AS_LONG(self_)); -#endif - } - else - { - PyObject* name = self->name; - if (name == 0) - return 0; - - return -#if PY_VERSION_HEX >= 0x03000000 - PyUnicode_FromFormat("%S.%s.%S", mod, self_->ob_type->tp_name, name); -#else - PyString_FromFormat("%s.%s.%s", - PyString_AsString(mod), self_->ob_type->tp_name, PyString_AsString(name)); -#endif - } - } - - static PyObject* enum_str(PyObject* self_) - { - enum_object* self = downcast<enum_object>(self_); - if (!self->name) - { -#if PY_VERSION_HEX >= 0x03000000 - return PyLong_Type.tp_str(self_); -#else - return PyInt_Type.tp_str(self_); -#endif - } - else - { - return incref(self->name); - } - } -} - -static PyTypeObject enum_type_object = { - PyVarObject_HEAD_INIT(NULL, 0) // &PyType_Type - const_cast<char*>("Boost.Python.enum"), - sizeof(enum_object), /* tp_basicsize */ - 0, /* tp_itemsize */ - (destructor) enum_dealloc, /* tp_dealloc */ - 0, /* tp_print */ - 0, /* tp_getattr */ - 0, /* tp_setattr */ - 0, /* tp_compare */ - enum_repr, /* tp_repr */ - 0, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - 0, /* tp_hash */ - 0, /* tp_call */ - enum_str, /* tp_str */ - 0, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT -#if PY_VERSION_HEX < 0x03000000 - | Py_TPFLAGS_CHECKTYPES -#endif - | Py_TPFLAGS_BASETYPE, /* tp_flags */ - 0, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - 0, /* tp_methods */ - enum_members, /* tp_members */ - 0, /* tp_getset */ - 0, //&PyInt_Type, /* tp_base */ - 0, /* tp_dict */ - 0, /* tp_descr_get */ - 0, /* tp_descr_set */ - 0, /* tp_dictoffset */ - 0, /* tp_init */ - 0, /* tp_alloc */ - 0, /* tp_new */ - 0, /* tp_free */ - 0, /* tp_is_gc */ - 0, /* tp_bases */ - 0, /* tp_mro */ - 0, /* tp_cache */ - 0, /* tp_subclasses */ - 0, /* tp_weaklist */ -#if PYTHON_API_VERSION >= 1012 - 0 /* tp_del */ -#endif -}; - -object module_prefix(); - -namespace -{ - object new_enum_type(char const* name, char const *doc) - { - if (enum_type_object.tp_dict == 0) - { - Py_SET_TYPE(&enum_type_object, incref(&PyType_Type)); -#if PY_VERSION_HEX >= 0x03000000 - enum_type_object.tp_base = &PyLong_Type; -#else - enum_type_object.tp_base = &PyInt_Type; -#endif - if (PyType_Ready(&enum_type_object)) - throw_error_already_set(); - } - - type_handle metatype(borrowed(&PyType_Type)); - type_handle base(borrowed(&enum_type_object)); - - // suppress the instance __dict__ in these enum objects. There - // may be a slicker way, but this'll do for now. - dict d; - d["__slots__"] = tuple(); - d["values"] = dict(); - d["names"] = dict(); - - object module_name = module_prefix(); - if (module_name) - d["__module__"] = module_name; - if (doc) - d["__doc__"] = doc; - - object result = (object(metatype))(name, make_tuple(base), d); - - scope().attr(name) = result; - - return result; - } -} - -enum_base::enum_base( - char const* name - , converter::to_python_function_t to_python - , converter::convertible_function convertible - , converter::constructor_function construct - , type_info id - , char const *doc - ) - : object(new_enum_type(name, doc)) -{ - converter::registration& converters - = const_cast<converter::registration&>( - converter::registry::lookup(id)); - - converters.m_class_object = downcast<PyTypeObject>(this->ptr()); - converter::registry::insert(to_python, id); - converter::registry::insert(convertible, construct, id); -} - -void enum_base::add_value(char const* name_, long value) -{ - // Convert name to Python string - object name(name_); - - // Create a new enum instance by calling the class with a value - object x = (*this)(value); - - // Store the object in the enum class - (*this).attr(name_) = x; - - dict d = extract<dict>(this->attr("values"))(); - d[value] = x; - - // Set the name field in the new enum instanec - enum_object* p = downcast<enum_object>(x.ptr()); - Py_XDECREF(p->name); - p->name = incref(name.ptr()); - - dict names_dict = extract<dict>(this->attr("names"))(); - names_dict[x.attr("name")] = x; -} - -void enum_base::export_values() -{ - dict d = extract<dict>(this->attr("names"))(); - list items = d.items(); - scope current; - - for (unsigned i = 0, max = len(items); i < max; ++i) - api::setattr(current, items[i][0], items[i][1]); - } - -PyObject* enum_base::to_python(PyTypeObject* type_, long x) -{ - object type((type_handle(borrowed(type_)))); - - dict d = extract<dict>(type.attr("values"))(); - object v = d.get(x, object()); - return incref( - (v == object() ? type(x) : v).ptr()); -} - -}}} // namespace boost::python::object diff --git a/contrib/restricted/boost/python/src/object/function.cpp b/contrib/restricted/boost/python/src/object/function.cpp deleted file mode 100644 index 4adb49453c8..00000000000 --- a/contrib/restricted/boost/python/src/object/function.cpp +++ /dev/null @@ -1,789 +0,0 @@ -// Copyright David Abrahams 2001. -// 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) - -#include <boost/python/docstring_options.hpp> -#include <boost/python/object/function_object.hpp> -#include <boost/python/object/function_handle.hpp> -#include <boost/python/object/function_doc_signature.hpp> -#include <boost/python/errors.hpp> -#include <boost/python/str.hpp> -#include <boost/python/object_attributes.hpp> -#include <boost/python/args.hpp> -#include <boost/python/refcount.hpp> -#include <boost/python/extract.hpp> -#include <boost/python/tuple.hpp> -#include <boost/python/list.hpp> -#include <boost/python/ssize_t.hpp> - -#include <boost/python/detail/signature.hpp> -#include <boost/python/detail/none.hpp> -#include <boost/mpl/vector/vector10.hpp> - -#include <boost/bind/bind.hpp> - -#include <algorithm> -#include <cstring> - -#if BOOST_PYTHON_DEBUG_ERROR_MESSAGES -# include <cstdio> -#endif - -namespace boost { namespace python { - volatile bool docstring_options::show_user_defined_ = true; - volatile bool docstring_options::show_cpp_signatures_ = true; -#ifndef BOOST_PYTHON_NO_PY_SIGNATURES - volatile bool docstring_options::show_py_signatures_ = true; -#else - volatile bool docstring_options::show_py_signatures_ = false; -#endif -}} - -namespace boost { namespace python { namespace objects { - -py_function_impl_base::~py_function_impl_base() -{ -} - -unsigned py_function_impl_base::max_arity() const -{ - return this->min_arity(); -} - -extern PyTypeObject function_type; - -function::function( - py_function const& implementation -#if BOOST_WORKAROUND(__EDG_VERSION__, == 245) - , python::detail::keyword const* names_and_defaults -#else - , python::detail::keyword const* const names_and_defaults -#endif - , unsigned num_keywords - ) - : m_fn(implementation) - , m_nkeyword_values(0) -{ - if (names_and_defaults != 0) - { - unsigned int max_arity = m_fn.max_arity(); - unsigned int keyword_offset - = max_arity > num_keywords ? max_arity - num_keywords : 0; - - - ssize_t tuple_size = num_keywords ? max_arity : 0; - m_arg_names = object(handle<>(PyTuple_New(tuple_size))); - - if (num_keywords != 0) - { - for (unsigned j = 0; j < keyword_offset; ++j) - PyTuple_SET_ITEM(m_arg_names.ptr(), j, incref(Py_None)); - } - - for (unsigned i = 0; i < num_keywords; ++i) - { - tuple kv; - - python::detail::keyword const* const p = names_and_defaults + i; - if (p->default_value) - { - kv = make_tuple(p->name, p->default_value); - ++m_nkeyword_values; - } - else - { - kv = make_tuple(p->name); - } - - PyTuple_SET_ITEM( - m_arg_names.ptr() - , i + keyword_offset - , incref(kv.ptr()) - ); - } - } - - PyObject* p = this; - if (Py_TYPE(&function_type) == 0) - { - Py_SET_TYPE(&function_type, &PyType_Type); - ::PyType_Ready(&function_type); - } - - (void)( // warning suppression for GCC - PyObject_INIT(p, &function_type) - ); -} - -function::~function() -{ -} - -PyObject* function::call(PyObject* args, PyObject* keywords) const -{ - std::size_t n_unnamed_actual = PyTuple_GET_SIZE(args); - std::size_t n_keyword_actual = keywords ? PyDict_Size(keywords) : 0; - std::size_t n_actual = n_unnamed_actual + n_keyword_actual; - - function const* f = this; - - // Try overloads looking for a match - do - { - // Check for a plausible number of arguments - unsigned min_arity = f->m_fn.min_arity(); - unsigned max_arity = f->m_fn.max_arity(); - - if (n_actual + f->m_nkeyword_values >= min_arity - && n_actual <= max_arity) - { - // This will be the args that actually get passed - handle<>inner_args(allow_null(borrowed(args))); - - if (n_keyword_actual > 0 // Keyword arguments were supplied - || n_actual < min_arity) // or default keyword values are needed - { - if (f->m_arg_names.is_none()) - { - // this overload doesn't accept keywords - inner_args = handle<>(); - } - else - { - // "all keywords are none" is a special case - // indicating we will accept any number of keyword - // arguments - if (PyTuple_Size(f->m_arg_names.ptr()) == 0) - { - // no argument preprocessing - } - else - { - // build a new arg tuple, will adjust its size later - assert(max_arity <= static_cast<std::size_t>(ssize_t_max)); - inner_args = handle<>( - PyTuple_New(static_cast<ssize_t>(max_arity))); - - // Fill in the positional arguments - for (std::size_t i = 0; i < n_unnamed_actual; ++i) - PyTuple_SET_ITEM(inner_args.get(), i, incref(PyTuple_GET_ITEM(args, i))); - - // Grab remaining arguments by name from the keyword dictionary - std::size_t n_actual_processed = n_unnamed_actual; - - for (std::size_t arg_pos = n_unnamed_actual; arg_pos < max_arity ; ++arg_pos) - { - // Get the keyword[, value pair] corresponding - PyObject* kv = PyTuple_GET_ITEM(f->m_arg_names.ptr(), arg_pos); - - // If there were any keyword arguments, - // look up the one we need for this - // argument position - PyObject* value = n_keyword_actual - ? PyDict_GetItem(keywords, PyTuple_GET_ITEM(kv, 0)) - : 0; - - if (!value) - { - // Not found; check if there's a default value - if (PyTuple_GET_SIZE(kv) > 1) - value = PyTuple_GET_ITEM(kv, 1); - - if (!value) - { - // still not found; matching fails - PyErr_Clear(); - inner_args = handle<>(); - break; - } - } - else - { - ++n_actual_processed; - } - - PyTuple_SET_ITEM(inner_args.get(), arg_pos, incref(value)); - } - - if (inner_args.get()) - { - //check if we proccessed all the arguments - if(n_actual_processed < n_actual) - inner_args = handle<>(); - } - } - } - } - - // Call the function. Pass keywords in case it's a - // function accepting any number of keywords - PyObject* result = inner_args ? f->m_fn(inner_args.get(), keywords) : 0; - - // If the result is NULL but no error was set, m_fn failed - // the argument-matching test. - - // This assumes that all other error-reporters are - // well-behaved and never return NULL to python without - // setting an error. - if (result != 0 || PyErr_Occurred()) - return result; - } - f = f->m_overloads.get(); - } - while (f); - // None of the overloads matched; time to generate the error message - argument_error(args, keywords); - return 0; -} - -object function::signature(bool show_return_type) const -{ - py_function const& impl = m_fn; - - python::detail::signature_element const* return_type = impl.signature(); - python::detail::signature_element const* s = return_type + 1; - - list formal_params; - if (impl.max_arity() == 0) - formal_params.append("void"); - - for (unsigned n = 0; n < impl.max_arity(); ++n) - { - if (s[n].basename == 0) - { - formal_params.append("..."); - break; - } - - str param(s[n].basename); - if (s[n].lvalue) - param += " {lvalue}"; - - if (m_arg_names) // None or empty tuple will test false - { - object kv(m_arg_names[n]); - if (kv) - { - char const* const fmt = len(kv) > 1 ? " %s=%r" : " %s"; - param += fmt % kv; - } - } - - formal_params.append(param); - } - - if (show_return_type) - return "%s(%s) -> %s" % make_tuple( - m_name, str(", ").join(formal_params), return_type->basename); - return "%s(%s)" % make_tuple( - m_name, str(", ").join(formal_params)); -} - -object function::signatures(bool show_return_type) const -{ - list result; - for (function const* f = this; f; f = f->m_overloads.get()) { - result.append(f->signature(show_return_type)); - } - return result; -} - -void function::argument_error(PyObject* args, PyObject* /*keywords*/) const -{ - static handle<> exception( - PyErr_NewException(const_cast<char*>("Boost.Python.ArgumentError"), PyExc_TypeError, 0)); - - object message = "Python argument types in\n %s.%s(" - % make_tuple(this->m_namespace, this->m_name); - - list actual_args; - for (ssize_t i = 0; i < PyTuple_Size(args); ++i) - { - char const* name = PyTuple_GetItem(args, i)->ob_type->tp_name; - actual_args.append(str(name)); - } - message += str(", ").join(actual_args); - message += ")\ndid not match C++ signature:\n "; - message += str("\n ").join(signatures()); - -#if BOOST_PYTHON_DEBUG_ERROR_MESSAGES - std::printf("\n--------\n%s\n--------\n", extract<const char*>(message)()); -#endif - PyErr_SetObject(exception.get(), message.ptr()); - throw_error_already_set(); -} - -void function::add_overload(handle<function> const& overload_) -{ - function* parent = this; - - while (parent->m_overloads) - parent = parent->m_overloads.get(); - - parent->m_overloads = overload_; - - // If we have no documentation, get the docs from the overload - if (!m_doc) - m_doc = overload_->m_doc; -} - -namespace -{ - char const* const binary_operator_names[] = - { - "add__", - "and__", - "div__", - "divmod__", - "eq__", - "floordiv__", - "ge__", - "gt__", - "le__", - "lshift__", - "lt__", - "mod__", - "mul__", - "ne__", - "or__", - "pow__", - "radd__", - "rand__", - "rdiv__", - "rdivmod__", - "rfloordiv__", - "rlshift__", - "rmod__", - "rmul__", - "ror__", - "rpow__", - "rrshift__", - "rshift__", - "rsub__", - "rtruediv__", - "rxor__", - "sub__", - "truediv__", - "xor__" - }; - - struct less_cstring - { - bool operator()(char const* x, char const* y) const - { - return BOOST_CSTD_::strcmp(x,y) < 0; - } - }; - - inline bool is_binary_operator(char const* name) - { - return name[0] == '_' - && name[1] == '_' - && std::binary_search( - &binary_operator_names[0] - , binary_operator_names + sizeof(binary_operator_names)/sizeof(*binary_operator_names) - , name + 2 - , less_cstring() - ); - } - - // Something for the end of the chain of binary operators - PyObject* not_implemented(PyObject*, PyObject*) - { - Py_INCREF(Py_NotImplemented); - return Py_NotImplemented; - } - - handle<function> not_implemented_function() - { - - static object keeper( - function_object( - py_function(¬_implemented, mpl::vector1<void>(), 2) - , python::detail::keyword_range()) - ); - return handle<function>(borrowed(downcast<function>(keeper.ptr()))); - } -} - -void function::add_to_namespace( - object const& name_space, char const* name_, object const& attribute) -{ - add_to_namespace(name_space, name_, attribute, 0); -} - -namespace detail -{ - extern char py_signature_tag[]; - extern char cpp_signature_tag[]; -} - -void function::add_to_namespace( - object const& name_space, char const* name_, object const& attribute, char const* doc) -{ - str const name(name_); - PyObject* const ns = name_space.ptr(); - - if (attribute.ptr()->ob_type == &function_type) - { - function* new_func = downcast<function>(attribute.ptr()); - handle<> dict; - -#if PY_VERSION_HEX < 0x03000000 - // Old-style class gone in Python 3 - if (PyClass_Check(ns)) - dict = handle<>(borrowed(((PyClassObject*)ns)->cl_dict)); - else -#endif - if (PyType_Check(ns)) - dict = handle<>(borrowed(((PyTypeObject*)ns)->tp_dict)); - else - dict = handle<>(PyObject_GetAttrString(ns, const_cast<char*>("__dict__"))); - - if (dict == 0) - throw_error_already_set(); - - assert(!PyErr_Occurred()); - handle<> existing(allow_null(::PyObject_GetItem(dict.get(), name.ptr()))); - PyErr_Clear(); - - if (existing) - { - if (existing->ob_type == &function_type) - { - new_func->add_overload( - handle<function>( - borrowed( - downcast<function>(existing.get()) - ) - ) - ); - } - else if (existing->ob_type == &PyStaticMethod_Type) - { - char const* name_space_name = extract<char const*>(name_space.attr("__name__")); - - ::PyErr_Format( - PyExc_RuntimeError - , "Boost.Python - All overloads must be exported " - "before calling \'class_<...>(\"%s\").staticmethod(\"%s\")\'" - , name_space_name - , name_ - ); - throw_error_already_set(); - } - } - else if (is_binary_operator(name_)) - { - // Binary operators need an additional overload which - // returns NotImplemented, so that Python will try the - // __rxxx__ functions on the other operand. We add this - // when no overloads for the operator already exist. - new_func->add_overload(not_implemented_function()); - } - - // A function is named the first time it is added to a namespace. - if (new_func->name().is_none()) - new_func->m_name = name; - - assert(!PyErr_Occurred()); - handle<> name_space_name( - allow_null(::PyObject_GetAttrString(name_space.ptr(), const_cast<char*>("__name__")))); - PyErr_Clear(); - - if (name_space_name) - new_func->m_namespace = object(name_space_name); - } - - if (PyObject_SetAttr(ns, name.ptr(), attribute.ptr()) < 0) - throw_error_already_set(); - - object mutable_attribute(attribute); -/* - if (doc != 0 && docstring_options::show_user_defined_) - { - // Accumulate documentation - - if ( - PyObject_HasAttrString(mutable_attribute.ptr(), "__doc__") - && mutable_attribute.attr("__doc__")) - { - mutable_attribute.attr("__doc__") += "\n\n"; - mutable_attribute.attr("__doc__") += doc; - } - else { - mutable_attribute.attr("__doc__") = doc; - } - } - - if (docstring_options::show_signatures_) - { - if ( PyObject_HasAttrString(mutable_attribute.ptr(), "__doc__") - && mutable_attribute.attr("__doc__")) { - mutable_attribute.attr("__doc__") += ( - mutable_attribute.attr("__doc__")[-1] != "\n" ? "\n\n" : "\n"); - } - else { - mutable_attribute.attr("__doc__") = ""; - } - function* f = downcast<function>(attribute.ptr()); - mutable_attribute.attr("__doc__") += str("\n ").join(make_tuple( - "C++ signature:", f->signature(true))); - } - */ - str _doc; - - if (docstring_options::show_py_signatures_) - { - _doc += str(const_cast<const char*>(detail::py_signature_tag)); - } - if (doc != 0 && docstring_options::show_user_defined_) - _doc += doc; - - if (docstring_options::show_cpp_signatures_) - { - _doc += str(const_cast<const char*>(detail::cpp_signature_tag)); - } - if(_doc) - { - object mutable_attribute(attribute); - mutable_attribute.attr("__doc__")= _doc; - } -} - -BOOST_PYTHON_DECL void add_to_namespace( - object const& name_space, char const* name, object const& attribute) -{ - function::add_to_namespace(name_space, name, attribute, 0); -} - -BOOST_PYTHON_DECL void add_to_namespace( - object const& name_space, char const* name, object const& attribute, char const* doc) -{ - function::add_to_namespace(name_space, name, attribute, doc); -} - - -namespace -{ - struct bind_return - { - bind_return(PyObject*& result, function const* f, PyObject* args, PyObject* keywords) - : m_result(result) - , m_f(f) - , m_args(args) - , m_keywords(keywords) - {} - - void operator()() const - { - m_result = m_f->call(m_args, m_keywords); - } - - private: - PyObject*& m_result; - function const* m_f; - PyObject* m_args; - PyObject* m_keywords; - }; -} - -extern "C" -{ - // Stolen from Python's funcobject.c - static PyObject * - function_descr_get(PyObject *func, PyObject *obj, PyObject *type_) - { -#if PY_VERSION_HEX >= 0x03000000 - // The implement is different in Python 3 because of the removal of unbound method - if (obj == Py_None || obj == NULL) { - Py_INCREF(func); - return func; - } - return PyMethod_New(func, obj); -#else - if (obj == Py_None) - obj = NULL; - return PyMethod_New(func, obj, type_); -#endif - } - - static void - function_dealloc(PyObject* p) - { - delete static_cast<function*>(p); - } - - static PyObject * - function_call(PyObject *func, PyObject *args, PyObject *kw) - { - PyObject* result = 0; - handle_exception(bind_return(result, static_cast<function*>(func), args, kw)); - return result; - } - - // - // Here we're using the function's tp_getset rather than its - // tp_members to set up __doc__ and __name__, because tp_members - // really depends on having a POD object type (it relies on - // offsets). It might make sense to reformulate function as a POD - // at some point, but this is much more expedient. - // - static PyObject* function_get_doc(PyObject* op, void*) - { - function* f = downcast<function>(op); - list signatures = function_doc_signature_generator::function_doc_signatures(f); - if(!signatures) return python::detail::none(); - signatures.reverse(); - return python::incref( str("\n").join(signatures).ptr()); - } - - static int function_set_doc(PyObject* op, PyObject* doc, void*) - { - function* f = downcast<function>(op); - f->doc(doc ? object(python::detail::borrowed_reference(doc)) : object()); - return 0; - } - - static PyObject* function_get_name(PyObject* op, void*) - { - function* f = downcast<function>(op); - if (f->name().is_none()) -#if PY_VERSION_HEX >= 0x03000000 - return PyUnicode_InternFromString("<unnamed Boost.Python function>"); -#else - return PyString_InternFromString("<unnamed Boost.Python function>"); -#endif - else - return python::incref(f->name().ptr()); - } - - // We add a dummy __class__ attribute in order to fool PyDoc into - // treating these as built-in functions and scanning their - // documentation - static PyObject* function_get_class(PyObject* /*op*/, void*) - { - return python::incref(upcast<PyObject>(&PyCFunction_Type)); - } - - static PyObject* function_get_module(PyObject* op, void*) - { - function* f = downcast<function>(op); - object const& ns = f->get_namespace(); - if (!ns.is_none()) { - return python::incref(ns.ptr()); - } - PyErr_SetString( - PyExc_AttributeError, const_cast<char*>( - "Boost.Python function __module__ unknown.")); - return 0; - } -} - -static PyGetSetDef function_getsetlist[] = { - {const_cast<char*>("__name__"), (getter)function_get_name, 0, 0, 0 }, - {const_cast<char*>("func_name"), (getter)function_get_name, 0, 0, 0 }, - {const_cast<char*>("__module__"), (getter)function_get_module, 0, 0, 0 }, - {const_cast<char*>("func_module"), (getter)function_get_module, 0, 0, 0 }, - {const_cast<char*>("__class__"), (getter)function_get_class, 0, 0, 0 }, // see note above - {const_cast<char*>("__doc__"), (getter)function_get_doc, (setter)function_set_doc, 0, 0}, - {const_cast<char*>("func_doc"), (getter)function_get_doc, (setter)function_set_doc, 0, 0}, - {NULL, 0, 0, 0, 0} /* Sentinel */ -}; - -PyTypeObject function_type = { - PyVarObject_HEAD_INIT(NULL, 0) - const_cast<char*>("Boost.Python.function"), - sizeof(function), - 0, - (destructor)function_dealloc, /* tp_dealloc */ - 0, /* tp_print */ - 0, /* tp_getattr */ - 0, /* tp_setattr */ - 0, /* tp_compare */ - 0, //(reprfunc)func_repr, /* tp_repr */ - 0, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - 0, /* tp_hash */ - function_call, /* tp_call */ - 0, /* tp_str */ - 0, // PyObject_GenericGetAttr, /* tp_getattro */ - 0, // PyObject_GenericSetAttr, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT /* | Py_TPFLAGS_HAVE_GC */,/* tp_flags */ - 0, /* tp_doc */ - 0, // (traverseproc)func_traverse, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, //offsetof(PyFunctionObject, func_weakreflist), /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - 0, /* tp_methods */ - 0, // func_memberlist, /* tp_members */ - function_getsetlist, /* tp_getset */ - 0, /* tp_base */ - 0, /* tp_dict */ - function_descr_get, /* tp_descr_get */ - 0, /* tp_descr_set */ - 0, //offsetof(PyFunctionObject, func_dict), /* tp_dictoffset */ - 0, /* tp_init */ - 0, /* tp_alloc */ - 0, /* tp_new */ - 0, /* tp_free */ - 0, /* tp_is_gc */ - 0, /* tp_bases */ - 0, /* tp_mro */ - 0, /* tp_cache */ - 0, /* tp_subclasses */ - 0, /* tp_weaklist */ -#if PYTHON_API_VERSION >= 1012 - 0 /* tp_del */ -#endif -}; - -object function_object( - py_function const& f - , python::detail::keyword_range const& keywords) -{ - return python::object( - python::detail::new_non_null_reference( - new function( - f, keywords.first, keywords.second - keywords.first))); -} - -object function_object(py_function const& f) -{ - return function_object(f, python::detail::keyword_range()); -} - - -handle<> function_handle_impl(py_function const& f) -{ - return python::handle<>( - allow_null( - new function(f, 0, 0))); -} - -} // namespace objects - -namespace detail -{ - object BOOST_PYTHON_DECL make_raw_function(objects::py_function f) - { - static keyword k; - - return objects::function_object( - f - , keyword_range(&k,&k)); - } - void BOOST_PYTHON_DECL pure_virtual_called() - { - PyErr_SetString( - PyExc_RuntimeError, const_cast<char*>("Pure virtual function called")); - throw_error_already_set(); - } -} - -}} // namespace boost::python diff --git a/contrib/restricted/boost/python/src/object/function_doc_signature.cpp b/contrib/restricted/boost/python/src/object/function_doc_signature.cpp deleted file mode 100644 index 41695285ac1..00000000000 --- a/contrib/restricted/boost/python/src/object/function_doc_signature.cpp +++ /dev/null @@ -1,344 +0,0 @@ -// Copyright Nikolay Mladenov 2007. -// 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) - -// boost::python::make_tuple below are for gcc 4.4 -std=c++0x compatibility -// (Intel C++ 10 and 11 with -std=c++0x don't need the full qualification). - -#include <boost/python/converter/registrations.hpp> -#include <boost/python/object/function_doc_signature.hpp> -#include <boost/python/errors.hpp> -#include <boost/python/str.hpp> -#include <boost/python/args.hpp> -#include <boost/python/tuple.hpp> - -#include <boost/python/detail/signature.hpp> - -#include <vector> - -namespace boost { namespace python { namespace objects { - - bool function_doc_signature_generator::arity_cmp( function const *f1, function const *f2 ) - { - return f1->m_fn.max_arity() < f2->m_fn.max_arity(); - } - - bool function_doc_signature_generator::are_seq_overloads( function const *f1, function const *f2 , bool check_docs) - { - py_function const & impl1 = f1->m_fn; - py_function const & impl2 = f2->m_fn; - - //the number of parameters differs by 1 - if (impl2.max_arity()-impl1.max_arity() != 1) - return false; - - // if check docs then f1 shold not have docstring or have the same docstring as f2 - if (check_docs && f2->doc() != f1->doc() && f1->doc()) - return false; - - python::detail::signature_element const* s1 = impl1.signature(); - python::detail::signature_element const* s2 = impl2.signature(); - - unsigned size = impl1.max_arity()+1; - - for (unsigned i = 0; i != size; ++i) - { - //check if the argument types are the same - if (s1[i].basename != s2[i].basename) - return false; - - //return type - if (!i) continue; - - //check if the argument default values are the same - bool f1_has_names = bool(f1->m_arg_names); - bool f2_has_names = bool(f2->m_arg_names); - if ( (f1_has_names && f2_has_names && f2->m_arg_names[i-1]!=f1->m_arg_names[i-1]) - || (f1_has_names && !f2_has_names) - || (!f1_has_names && f2_has_names && f2->m_arg_names[i-1]!=python::object()) - ) - return false; - } - return true; - } - - std::vector<function const*> function_doc_signature_generator::flatten(function const *f) - { - object name = f->name(); - - std::vector<function const*> res; - - while (f) { - - //this if takes out the not_implemented_function - if (f->name() == name) - res.push_back(f); - - f=f->m_overloads.get(); - } - - //std::sort(res.begin(),res.end(), &arity_cmp); - - return res; - } - std::vector<function const*> function_doc_signature_generator::split_seq_overloads( const std::vector<function const *> &funcs, bool split_on_doc_change) - { - std::vector<function const*> res; - - std::vector<function const*>::const_iterator fi = funcs.begin(); - - function const * last = *fi; - - while (++fi != funcs.end()){ - - //check if fi starts a new chain of overloads - if (!are_seq_overloads( last, *fi, split_on_doc_change )) - res.push_back(last); - - last = *fi; - } - - if (last) - res.push_back(last); - - return res; - } - - str function_doc_signature_generator::raw_function_pretty_signature(function const *f, size_t n_overloads, bool cpp_types ) - { - str res("object"); - - res = str("%s %s(%s)" % make_tuple( res, f->m_name, str("tuple args, dict kwds")) ); - - return res; - } - - const char * function_doc_signature_generator::py_type_str(const python::detail::signature_element &s) - { - if (s.basename==std::string("void")){ - static const char * none = "None"; - return none; - } - - PyTypeObject const * py_type = s.pytype_f?s.pytype_f():0; - if ( py_type ) - return py_type->tp_name; - else{ - static const char * object = "object"; - return object; - } - } - - str function_doc_signature_generator::parameter_string(py_function const &f, size_t n, object arg_names, bool cpp_types) - { - str param; - - python::detail::signature_element const * s = f.signature(); - if (cpp_types) - { - if(!n) - s = &f.get_return_type(); - if (s[n].basename == 0) - { - return str("..."); - } - - param = str(s[n].basename); - - if (s[n].lvalue) - param += " {lvalue}"; - - } - else - { - if (n) //we are processing an argument and trying to come up with a name for it - { - object kv; - if ( arg_names && (kv = arg_names[n-1]) ) - param = str( " (%s)%s" % make_tuple(py_type_str(s[n]),kv[0]) ); - else - param = str(" (%s)%s%d" % make_tuple(py_type_str(s[n]),"arg", n) ); - } - else //we are processing the return type - param = py_type_str(f.get_return_type()); - } - - //an argument - check for default value and append it - if(n && arg_names) - { - object kv(arg_names[n-1]); - if (kv && len(kv) == 2) - { - param = str("%s=%r" % make_tuple(param, kv[1])); - } - } - return param; - } - - str function_doc_signature_generator::pretty_signature(function const *f, size_t n_overloads, bool cpp_types ) - { - py_function - const& impl = f->m_fn; - ; - - - unsigned arity = impl.max_arity(); - - if(arity == unsigned(-1))// is this the proper raw function test? - { - return raw_function_pretty_signature(f,n_overloads,cpp_types); - } - - list formal_params; - - size_t n_extra_default_args=0; - - for (unsigned n = 0; n <= arity; ++n) - { - str param; - - formal_params.append( - parameter_string(impl, n, f->m_arg_names, cpp_types) - ); - - // find all the arguments with default values preceeding the arity-n_overloads - if (n && f->m_arg_names) - { - object kv(f->m_arg_names[n-1]); - - if (kv && len(kv) == 2) - { - //default argument preceeding the arity-n_overloads - if( n <= arity-n_overloads) - ++n_extra_default_args; - } - else - //argument without default, preceeding the arity-n_overloads - if( n <= arity-n_overloads) - n_extra_default_args = 0; - } - } - - n_overloads+=n_extra_default_args; - - if (!arity && cpp_types) - formal_params.append("void"); - - str ret_type (formal_params.pop(0)); - if (cpp_types ) - { - return str( - "%s %s(%s%s%s%s)" - % boost::python::make_tuple // workaround, see top - ( ret_type - , f->m_name - , str(",").join(formal_params.slice(0,arity-n_overloads)) - , n_overloads ? (n_overloads!=arity?str(" [,"):str("[ ")) : str() - , str(" [,").join(formal_params.slice(arity-n_overloads,arity)) - , std::string(n_overloads,']') - )); - }else{ - return str( - "%s(%s%s%s%s) -> %s" - % boost::python::make_tuple // workaround, see top - ( f->m_name - , str(",").join(formal_params.slice(0,arity-n_overloads)) - , n_overloads ? (n_overloads!=arity?str(" [,"):str("[ ")) : str() - , str(" [,").join(formal_params.slice(arity-n_overloads,arity)) - , std::string(n_overloads,']') - , ret_type - )); - } - - return str( - "%s %s(%s%s%s%s) %s" - % boost::python::make_tuple // workaround, see top - ( cpp_types?ret_type:str("") - , f->m_name - , str(",").join(formal_params.slice(0,arity-n_overloads)) - , n_overloads ? (n_overloads!=arity?str(" [,"):str("[ ")) : str() - , str(" [,").join(formal_params.slice(arity-n_overloads,arity)) - , std::string(n_overloads,']') - , cpp_types?str(""):ret_type - )); - - } - - namespace detail { - char py_signature_tag[] = "PY signature :"; - char cpp_signature_tag[] = "C++ signature :"; - } - - list function_doc_signature_generator::function_doc_signatures( function const * f) - { - list signatures; - std::vector<function const*> funcs = flatten( f); - std::vector<function const*> split_funcs = split_seq_overloads( funcs, true); - std::vector<function const*>::const_iterator sfi=split_funcs.begin(), fi; - size_t n_overloads=0; - for (fi=funcs.begin(); fi!=funcs.end(); ++fi) - { - if(*sfi == *fi){ - if((*fi)->doc()) - { - str func_doc = str((*fi)->doc()); - - int doc_len = len(func_doc); - - bool show_py_signature = doc_len >= int(sizeof(detail::py_signature_tag)/sizeof(char)-1) - && str(detail::py_signature_tag) == func_doc.slice(0, int(sizeof(detail::py_signature_tag)/sizeof(char))-1); - if(show_py_signature) - { - func_doc = str(func_doc.slice(int(sizeof(detail::py_signature_tag)/sizeof(char))-1, _)); - doc_len = len(func_doc); - } - - bool show_cpp_signature = doc_len >= int(sizeof(detail::cpp_signature_tag)/sizeof(char)-1) - && str(detail::cpp_signature_tag) == func_doc.slice( 1-int(sizeof(detail::cpp_signature_tag)/sizeof(char)), _); - - if(show_cpp_signature) - { - func_doc = str(func_doc.slice(_, 1-int(sizeof(detail::cpp_signature_tag)/sizeof(char)))); - doc_len = len(func_doc); - } - - str res="\n"; - str pad = "\n"; - - if(show_py_signature) - { - str sig = pretty_signature(*fi, n_overloads,false); - res+=sig; - if(doc_len || show_cpp_signature )res+=" :"; - pad+= str(" "); - } - - if(doc_len) - { - if(show_py_signature) - res+=pad; - res+= pad.join(func_doc.split("\n")); - } - - if( show_cpp_signature) - { - if(len(res)>1) - res+="\n"+pad; - res+=detail::cpp_signature_tag+pad+" "+pretty_signature(*fi, n_overloads,true); - } - - signatures.append(res); - } - ++sfi; - n_overloads = 0; - }else - ++n_overloads ; - } - - return signatures; - } - - -}}} - diff --git a/contrib/restricted/boost/python/src/object/inheritance.cpp b/contrib/restricted/boost/python/src/object/inheritance.cpp deleted file mode 100644 index a7b3156e414..00000000000 --- a/contrib/restricted/boost/python/src/object/inheritance.cpp +++ /dev/null @@ -1,496 +0,0 @@ -// 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) -#include <boost/python/object/inheritance.hpp> -#include <boost/python/type_id.hpp> -#include <boost/graph/breadth_first_search.hpp> -#if _MSC_FULL_VER >= 13102171 && _MSC_FULL_VER <= 13102179 -# include <boost/graph/reverse_graph.hpp> -#endif -#include <boost/graph/adjacency_list.hpp> -#include <boost/graph/reverse_graph.hpp> -#include <boost/property_map/property_map.hpp> -#include <boost/bind/bind.hpp> -#include <boost/integer_traits.hpp> -#include <boost/tuple/tuple.hpp> -#include <boost/tuple/tuple_comparison.hpp> -#include <queue> -#include <vector> -#include <functional> - -// -// Procedure: -// -// The search is a BFS over the space of (type,address) pairs -// guided by the edges of the casting graph whose nodes -// correspond to classes, and whose edges are traversed by -// applying associated cast functions to an address. We use -// vertex distance to the goal node in the cast_graph to rate the -// paths. The vertex distance to any goal node is calculated on -// demand and outdated by the addition of edges to the graph. - -namespace boost { -namespace -{ - enum edge_cast_t { edge_cast = 8010 }; - template <class T> inline void unused_variable(const T&) { } -} - -// Install properties -BOOST_INSTALL_PROPERTY(edge, cast); - -namespace -{ - typedef void*(*cast_function)(void*); - - // - // Here we put together the low-level data structures of the - // casting graph representation. - // - typedef python::type_info class_id; - - // represents a graph of available casts - -#if 0 - struct cast_graph - : -#else - typedef -#endif - adjacency_list<vecS,vecS, bidirectionalS, no_property - - // edge index property allows us to look up edges in the connectivity matrix - , property<edge_index_t,std::size_t - - // The function which casts a void* from the edge's source type - // to its destination type. - , property<edge_cast_t,cast_function> > > -#if 0 - {}; -#else - cast_graph; -#endif - - typedef cast_graph::vertex_descriptor vertex_t; - typedef cast_graph::edge_descriptor edge_t; - - struct smart_graph - { - typedef std::vector<std::size_t>::const_iterator node_distance_map; - - typedef std::pair<cast_graph::out_edge_iterator - , cast_graph::out_edge_iterator> out_edges_t; - - // Return a map of the distances from any node to the given - // target node - node_distance_map distances_to(vertex_t target) const - { - std::size_t n = num_vertices(m_topology); - if (m_distances.size() != n * n) - { - m_distances.clear(); - m_distances.resize(n * n, (std::numeric_limits<std::size_t>::max)()); - m_known_vertices = n; - } - - std::vector<std::size_t>::iterator to_target = m_distances.begin() + n * target; - - // this node hasn't been used as a target yet - if (to_target[target] != 0) - { - typedef reverse_graph<cast_graph> reverse_cast_graph; - reverse_cast_graph reverse_topology(m_topology); - - to_target[target] = 0; - - breadth_first_search( - reverse_topology, target - , visitor( - make_bfs_visitor( - record_distances( - make_iterator_property_map( - to_target - , get(vertex_index, reverse_topology) -# ifdef BOOST_NO_STD_ITERATOR_TRAITS - , *to_target -# endif - ) - , on_tree_edge() - )))); - } - - return to_target; - } - - cast_graph& topology() { return m_topology; } - cast_graph const& topology() const { return m_topology; } - - smart_graph() - : m_known_vertices(0) - {} - - private: - cast_graph m_topology; - mutable std::vector<std::size_t> m_distances; - mutable std::size_t m_known_vertices; - }; - - smart_graph& full_graph() - { - static smart_graph x; - return x; - } - - smart_graph& up_graph() - { - static smart_graph x; - return x; - } - - // - // Our index of class types - // - using boost::python::objects::dynamic_id_function; - typedef tuples::tuple< - class_id // static type - , vertex_t // corresponding vertex - , dynamic_id_function // dynamic_id if polymorphic, or 0 - > - index_entry_interface; - typedef index_entry_interface::inherited index_entry; - enum { ksrc_static_t, kvertex, kdynamic_id }; - - typedef std::vector<index_entry> type_index_t; - - - type_index_t& type_index() - { - static type_index_t x; - return x; - } - - template <class Tuple> - struct select1st - { - typedef typename tuples::element<0, Tuple>::type result_type; - - result_type const& operator()(Tuple const& x) const - { - return tuples::get<0>(x); - } - }; - - // map a type to a position in the index - inline type_index_t::iterator type_position(class_id type) - { - using namespace boost::placeholders; - typedef index_entry entry; - - return std::lower_bound( - type_index().begin(), type_index().end() - , boost::make_tuple(type, vertex_t(), dynamic_id_function(0)) - , boost::bind<bool>(std::less<class_id>() - , boost::bind<class_id>(select1st<entry>(), _1) - , boost::bind<class_id>(select1st<entry>(), _2))); - } - - inline index_entry* seek_type(class_id type) - { - type_index_t::iterator p = type_position(type); - if (p == type_index().end() || tuples::get<ksrc_static_t>(*p) != type) - return 0; - else - return &*p; - } - - // Get the entry for a type, inserting if necessary - inline type_index_t::iterator demand_type(class_id type) - { - type_index_t::iterator p = type_position(type); - - if (p != type_index().end() && tuples::get<ksrc_static_t>(*p) == type) - return p; - - vertex_t v = add_vertex(full_graph().topology()); - vertex_t v2 = add_vertex(up_graph().topology()); - unused_variable(v2); - assert(v == v2); - return type_index().insert(p, boost::make_tuple(type, v, dynamic_id_function(0))); - } - - // Map a two types to a vertex in the graph, inserting if necessary - typedef std::pair<type_index_t::iterator, type_index_t::iterator> - type_index_iterator_pair; - - inline type_index_iterator_pair - demand_types(class_id t1, class_id t2) - { - // be sure there will be no reallocation - type_index().reserve(type_index().size() + 2); - type_index_t::iterator first = demand_type(t1); - type_index_t::iterator second = demand_type(t2); - if (first == second) - ++first; - return std::make_pair(first, second); - } - - struct q_elt - { - q_elt(std::size_t distance - , void* src_address - , vertex_t target - , cast_function cast - ) - : distance(distance) - , src_address(src_address) - , target(target) - , cast(cast) - {} - - std::size_t distance; - void* src_address; - vertex_t target; - cast_function cast; - - bool operator<(q_elt const& rhs) const - { - return distance < rhs.distance; - } - }; - - // Optimization: - // - // Given p, src_t, dst_t - // - // Get a pointer pd to the most-derived object - // if it's polymorphic, dynamic_cast to void* - // otherwise pd = p - // - // Get the most-derived typeid src_td - // - // ptrdiff_t offset = p - pd - // - // Now we can keep a cache, for [src_t, offset, src_td, dst_t] of - // the cast transformation function to use on p and the next src_t - // in the chain. src_td, dst_t don't change throughout this - // process. In order to represent unreachability, when a pair is - // found to be unreachable, we stick a 0-returning "dead-cast" - // function in the cache. - - // This is needed in a few places below - inline void* identity_cast(void* p) - { - return p; - } - - void* search(smart_graph const& g, void* p, vertex_t src, vertex_t dst) - { - // I think this test was thoroughly bogus -- dwa - // If we know there's no path; bail now. - // if (src > g.known_vertices() || dst > g.known_vertices()) - // return 0; - - smart_graph::node_distance_map d(g.distances_to(dst)); - - if (d[src] == (std::numeric_limits<std::size_t>::max)()) - return 0; - - typedef property_map<cast_graph,edge_cast_t>::const_type cast_map; - cast_map casts = get(edge_cast, g.topology()); - - typedef std::pair<vertex_t,void*> search_state; - typedef std::vector<search_state> visited_t; - visited_t visited; - std::priority_queue<q_elt> q; - - q.push(q_elt(d[src], p, src, identity_cast)); - while (!q.empty()) - { - q_elt top = q.top(); - q.pop(); - - // Check to see if we have a real state - void* dst_address = top.cast(top.src_address); - if (dst_address == 0) - continue; - - if (top.target == dst) - return dst_address; - - search_state s(top.target,dst_address); - - visited_t::iterator pos = std::lower_bound( - visited.begin(), visited.end(), s); - - // If already visited, continue - if (pos != visited.end() && *pos == s) - continue; - - visited.insert(pos, s); // mark it - - // expand it: - smart_graph::out_edges_t edges = out_edges(s.first, g.topology()); - for (cast_graph::out_edge_iterator p = edges.first - , finish = edges.second - ; p != finish - ; ++p - ) - { - edge_t e = *p; - q.push(q_elt( - d[target(e, g.topology())] - , dst_address - , target(e, g.topology()) - , boost::get(casts, e))); - } - } - return 0; - } - - struct cache_element - { - typedef tuples::tuple< - class_id // source static type - , class_id // target type - , std::ptrdiff_t // offset within source object - , class_id // source dynamic type - >::inherited key_type; - - cache_element(key_type const& k) - : key(k) - , offset(0) - {} - - key_type key; - std::ptrdiff_t offset; - - BOOST_STATIC_CONSTANT( - std::ptrdiff_t, not_found = integer_traits<std::ptrdiff_t>::const_min); - - bool operator<(cache_element const& rhs) const - { - return this->key < rhs.key; - } - - bool unreachable() const - { - return offset == not_found; - } - }; - - enum { kdst_t = ksrc_static_t + 1, koffset, ksrc_dynamic_t }; - typedef std::vector<cache_element> cache_t; - - cache_t& cache() - { - static cache_t x; - return x; - } - - inline void* convert_type(void* const p, class_id src_t, class_id dst_t, bool polymorphic) - { - // Quickly rule out unregistered types - index_entry* src_p = seek_type(src_t); - if (src_p == 0) - return 0; - - index_entry* dst_p = seek_type(dst_t); - if (dst_p == 0) - return 0; - - // Look up the dynamic_id function and call it to get the dynamic - // info - boost::python::objects::dynamic_id_t dynamic_id = polymorphic - ? tuples::get<kdynamic_id>(*src_p)(p) - : std::make_pair(p, src_t); - - // Look in the cache first for a quickie address translation - std::ptrdiff_t offset = (char*)p - (char*)dynamic_id.first; - - cache_element seek(boost::make_tuple(src_t, dst_t, offset, dynamic_id.second)); - cache_t& c = cache(); - cache_t::iterator const cache_pos - = std::lower_bound(c.begin(), c.end(), seek); - - - // if found in the cache, we're done - if (cache_pos != c.end() && cache_pos->key == seek.key) - { - return cache_pos->offset == cache_element::not_found - ? 0 : (char*)p + cache_pos->offset; - } - - // If we are starting at the most-derived type, only look in the up graph - smart_graph const& g = polymorphic && dynamic_id.second != src_t - ? full_graph() : up_graph(); - - void* result = search( - g, p, tuples::get<kvertex>(*src_p) - , tuples::get<kvertex>(*dst_p)); - - // update the cache - c.insert(cache_pos, seek)->offset - = (result == 0) ? cache_element::not_found : (char*)result - (char*)p; - - return result; - } -} - -namespace python { namespace objects { - -BOOST_PYTHON_DECL void* find_dynamic_type(void* p, class_id src_t, class_id dst_t) -{ - return convert_type(p, src_t, dst_t, true); -} - -BOOST_PYTHON_DECL void* find_static_type(void* p, class_id src_t, class_id dst_t) -{ - return convert_type(p, src_t, dst_t, false); -} - -BOOST_PYTHON_DECL void add_cast( - class_id src_t, class_id dst_t, cast_function cast, bool is_downcast) -{ - // adding an edge will invalidate any record of unreachability in - // the cache. - static std::size_t expected_cache_len = 0; - cache_t& c = cache(); - if (c.size() > expected_cache_len) - { - c.erase(std::remove_if( - c.begin(), c.end(), - mem_fn(&cache_element::unreachable)) - , c.end()); - - // If any new cache entries get added, we'll have to do this - // again when the next edge is added - expected_cache_len = c.size(); - } - - type_index_iterator_pair types = demand_types(src_t, dst_t); - vertex_t src = tuples::get<kvertex>(*types.first); - vertex_t dst = tuples::get<kvertex>(*types.second); - - cast_graph* const g[2] = { &up_graph().topology(), &full_graph().topology() }; - - for (cast_graph*const* p = g + (is_downcast ? 1 : 0); p < g + 2; ++p) - { - edge_t e; - bool added; - - tie(e, added) = add_edge(src, dst, **p); - assert(added); - - put(get(edge_cast, **p), e, cast); - put(get(edge_index, **p), e, num_edges(full_graph().topology()) - 1); - } -} - -BOOST_PYTHON_DECL void register_dynamic_id_aux( - class_id static_id, dynamic_id_function get_dynamic_id) -{ - tuples::get<kdynamic_id>(*demand_type(static_id)) = get_dynamic_id; -} - -}}} // namespace boost::python::objects diff --git a/contrib/restricted/boost/python/src/object/iterator.cpp b/contrib/restricted/boost/python/src/object/iterator.cpp deleted file mode 100644 index 6b885a982c4..00000000000 --- a/contrib/restricted/boost/python/src/object/iterator.cpp +++ /dev/null @@ -1,39 +0,0 @@ -// 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) - -#include <boost/python/object/iterator_core.hpp> -#include <boost/python/object/function_object.hpp> -#include <boost/bind/bind.hpp> -#include <boost/mpl/vector/vector10.hpp> - -namespace boost { namespace python { namespace objects { - -namespace -{ - PyObject* identity(PyObject* args_, PyObject*) - { - PyObject* x = PyTuple_GET_ITEM(args_,0); - Py_INCREF(x); - return x; - } -} - -BOOST_PYTHON_DECL object const& identity_function() -{ - static object result( - function_object( - py_function(&identity, mpl::vector2<PyObject*,PyObject*>()) - ) - ); - return result; -} - -void stop_iteration_error() -{ - PyErr_SetObject(PyExc_StopIteration, Py_None); - throw_error_already_set(); -} - -}}} // namespace boost::python::objects diff --git a/contrib/restricted/boost/python/src/object/life_support.cpp b/contrib/restricted/boost/python/src/object/life_support.cpp deleted file mode 100644 index 281c3bffc5b..00000000000 --- a/contrib/restricted/boost/python/src/object/life_support.cpp +++ /dev/null @@ -1,121 +0,0 @@ -// 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) -#include <boost/python/object/life_support.hpp> -#include <boost/python/detail/none.hpp> -#include <boost/python/refcount.hpp> - -namespace boost { namespace python { namespace objects { - -struct life_support -{ - PyObject_HEAD - PyObject* patient; -}; - -extern "C" -{ - static void - life_support_dealloc(PyObject* self) - { - Py_XDECREF(((life_support*)self)->patient); - self->ob_type->tp_free(self); - } - - static PyObject * - life_support_call(PyObject *self, PyObject *arg, PyObject * /*kw*/) - { - // Let the patient die now - Py_XDECREF(((life_support*)self)->patient); - ((life_support*)self)->patient = 0; - // Let the weak reference die. This probably kills us. - Py_XDECREF(PyTuple_GET_ITEM(arg, 0)); - return ::boost::python::detail::none(); - } -} - -PyTypeObject life_support_type = { - PyVarObject_HEAD_INIT(NULL, 0)//(&PyType_Type) - const_cast<char*>("Boost.Python.life_support"), - sizeof(life_support), - 0, - life_support_dealloc, /* tp_dealloc */ - 0, /* tp_print */ - 0, /* tp_getattr */ - 0, /* tp_setattr */ - 0, /* tp_compare */ - 0, //(reprfunc)func_repr, /* tp_repr */ - 0, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - 0, /* tp_hash */ - life_support_call, /* tp_call */ - 0, /* tp_str */ - 0, // PyObject_GenericGetAttr, /* tp_getattro */ - 0, // PyObject_GenericSetAttr, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT /* | Py_TPFLAGS_HAVE_GC */,/* tp_flags */ - 0, /* tp_doc */ - 0, // (traverseproc)func_traverse, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, //offsetof(PyLife_SupportObject, func_weakreflist), /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - 0, /* tp_methods */ - 0, // func_memberlist, /* tp_members */ - 0, //func_getsetlist, /* tp_getset */ - 0, /* tp_base */ - 0, /* tp_dict */ - 0, /* tp_descr_get */ - 0, /* tp_descr_set */ - 0, //offsetof(PyLife_SupportObject, func_dict), /* tp_dictoffset */ - 0, /* tp_init */ - 0, /* tp_alloc */ - 0, /* tp_new */ - 0, /* tp_free */ - 0, /* tp_is_gc */ - 0, /* tp_bases */ - 0, /* tp_mro */ - 0, /* tp_cache */ - 0, /* tp_subclasses */ - 0, /* tp_weaklist */ -#if PYTHON_API_VERSION >= 1012 - 0 /* tp_del */ -#endif -}; - -PyObject* make_nurse_and_patient(PyObject* nurse, PyObject* patient) -{ - if (nurse == Py_None || nurse == patient) - return nurse; - - if (Py_TYPE(&life_support_type) == 0) - { - Py_SET_TYPE(&life_support_type, &PyType_Type); - PyType_Ready(&life_support_type); - } - - life_support* system = PyObject_New(life_support, &life_support_type); - if (!system) - return 0; - - system->patient = 0; - - // We're going to leak this reference, but don't worry; the - // life_support system decrements it when the nurse dies. - PyObject* weakref = PyWeakref_NewRef(nurse, (PyObject*)system); - - // weakref has either taken ownership, or we have to release it - // anyway - Py_DECREF(system); - if (!weakref) - return 0; - - system->patient = patient; - Py_XINCREF(patient); // hang on to the patient until death - return weakref; -} - -}}} // namespace boost::python::objects diff --git a/contrib/restricted/boost/python/src/object/pickle_support.cpp b/contrib/restricted/boost/python/src/object/pickle_support.cpp deleted file mode 100644 index 428c07b6ca5..00000000000 --- a/contrib/restricted/boost/python/src/object/pickle_support.cpp +++ /dev/null @@ -1,78 +0,0 @@ -// (C) Copyright R.W. Grosse-Kunstleve 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) - -#include <boost/python/make_function.hpp> -#include <boost/python/object/class.hpp> -#include <boost/python/tuple.hpp> -#include <boost/python/list.hpp> -#include <boost/python/dict.hpp> -#include <boost/python/str.hpp> - -namespace boost { namespace python { - -namespace { - - tuple instance_reduce(object instance_obj) - { - list result; - object instance_class(instance_obj.attr("__class__")); - result.append(instance_class); - object none; - if (!getattr(instance_obj, "__safe_for_unpickling__", none)) - { - str type_name(getattr(instance_class, "__name__")); - str module_name(getattr(instance_class, "__module__", object(""))); - if (module_name) - module_name += "."; - - PyErr_SetObject( - PyExc_RuntimeError, - ( "Pickling of \"%s\" instances is not enabled" - " (http://www.boost.org/libs/python/doc/v2/pickle.html)" - % (module_name+type_name)).ptr() - ); - - throw_error_already_set(); - } - object getinitargs = getattr(instance_obj, "__getinitargs__", none); - tuple initargs; - if (!getinitargs.is_none()) { - initargs = tuple(getinitargs()); - } - result.append(initargs); - object getstate = getattr(instance_obj, "__getstate__", none); - object instance_dict = getattr(instance_obj, "__dict__", none); - long len_instance_dict = 0; - if (!instance_dict.is_none()) { - len_instance_dict = len(instance_dict); - } - if (!getstate.is_none()) { - if (len_instance_dict > 0) { - object getstate_manages_dict = getattr( - instance_obj, "__getstate_manages_dict__", none); - if (getstate_manages_dict.is_none()) { - PyErr_SetString(PyExc_RuntimeError, - "Incomplete pickle support" - " (__getstate_manages_dict__ not set)"); - throw_error_already_set(); - } - } - result.append(getstate()); - } - else if (len_instance_dict > 0) { - result.append(instance_dict); - } - return tuple(result); - } - -} // namespace - -object const& make_instance_reduce_function() -{ - static object result(&instance_reduce); - return result; -} - -}} // namespace boost::python diff --git a/contrib/restricted/boost/python/src/object/stl_iterator.cpp b/contrib/restricted/boost/python/src/object/stl_iterator.cpp deleted file mode 100644 index e32d3214521..00000000000 --- a/contrib/restricted/boost/python/src/object/stl_iterator.cpp +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright Eric Niebler 2005. -// 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) -// -// Credits: -// Andreas Kl\:ockner for fixing increment() to handle -// error conditions. - -#include <boost/python/object.hpp> -#include <boost/python/handle.hpp> -#include <boost/python/object/stl_iterator_core.hpp> - -namespace boost { namespace python { namespace objects -{ - -stl_input_iterator_impl::stl_input_iterator_impl() - : it_() - , ob_() -{ -} - -stl_input_iterator_impl::stl_input_iterator_impl(boost::python::object const &ob) - : it_(ob.attr("__iter__")()) - , ob_() -{ - this->increment(); -} - -void stl_input_iterator_impl::increment() -{ - this->ob_ = boost::python::handle<>( - boost::python::allow_null(PyIter_Next(this->it_.ptr()))); - if (PyErr_Occurred()) - throw boost::python::error_already_set(); -} - -bool stl_input_iterator_impl::equal(stl_input_iterator_impl const &that) const -{ - return !this->ob_ == !that.ob_; -} - -boost::python::handle<> const &stl_input_iterator_impl::current() const -{ - return this->ob_; -} - -}}} // namespace boost::python::objects diff --git a/contrib/restricted/boost/python/src/object_operators.cpp b/contrib/restricted/boost/python/src/object_operators.cpp deleted file mode 100644 index b993245fe96..00000000000 --- a/contrib/restricted/boost/python/src/object_operators.cpp +++ /dev/null @@ -1,85 +0,0 @@ -// 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) - -#include <boost/python/object_operators.hpp> -#include <boost/python/detail/raw_pyobject.hpp> - -namespace boost { namespace python { namespace api { - -# define BOOST_PYTHON_COMPARE_OP(op, opid) \ -BOOST_PYTHON_DECL object operator op(object const& l, object const& r) \ -{ \ - return object( \ - detail::new_reference( \ - PyObject_RichCompare( \ - l.ptr(), 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, name) \ -BOOST_PYTHON_DECL object operator op(object const& l, object const& r) \ -{ \ - return object( \ - detail::new_reference( \ - PyNumber_##name(l.ptr(), r.ptr())) \ - ); \ -} - -BOOST_PYTHON_BINARY_OPERATOR(+, Add) -BOOST_PYTHON_BINARY_OPERATOR(-, Subtract) -BOOST_PYTHON_BINARY_OPERATOR(*, Multiply) -#if PY_VERSION_HEX >= 0x03000000 -// We choose FloorDivide instead of TrueDivide to keep the semantic -// conform with C/C++'s '/' operator -BOOST_PYTHON_BINARY_OPERATOR(/, FloorDivide) -#else -BOOST_PYTHON_BINARY_OPERATOR(/, Divide) -#endif -BOOST_PYTHON_BINARY_OPERATOR(%, Remainder) -BOOST_PYTHON_BINARY_OPERATOR(<<, Lshift) -BOOST_PYTHON_BINARY_OPERATOR(>>, Rshift) -BOOST_PYTHON_BINARY_OPERATOR(&, And) -BOOST_PYTHON_BINARY_OPERATOR(^, Xor) -BOOST_PYTHON_BINARY_OPERATOR(|, Or) -#undef BOOST_PYTHON_BINARY_OPERATOR - -#define BOOST_PYTHON_INPLACE_OPERATOR(op, name) \ -BOOST_PYTHON_DECL object& operator op##=(object& l, object const& r) \ -{ \ - return l = object( \ - (detail::new_reference) \ - PyNumber_InPlace##name(l.ptr(), r.ptr())); \ -} - -BOOST_PYTHON_INPLACE_OPERATOR(+, Add) -BOOST_PYTHON_INPLACE_OPERATOR(-, Subtract) -BOOST_PYTHON_INPLACE_OPERATOR(*, Multiply) -#if PY_VERSION_HEX >= 0x03000000 -// Same reason as above for choosing FloorDivide instead of TrueDivide -BOOST_PYTHON_INPLACE_OPERATOR(/, FloorDivide) -#else -BOOST_PYTHON_INPLACE_OPERATOR(/, Divide) -#endif -BOOST_PYTHON_INPLACE_OPERATOR(%, Remainder) -BOOST_PYTHON_INPLACE_OPERATOR(<<, Lshift) -BOOST_PYTHON_INPLACE_OPERATOR(>>, Rshift) -BOOST_PYTHON_INPLACE_OPERATOR(&, And) -BOOST_PYTHON_INPLACE_OPERATOR(^, Xor) -BOOST_PYTHON_INPLACE_OPERATOR(|, Or) -#undef BOOST_PYTHON_INPLACE_OPERATOR - -object::object(handle<> const& x) - : object_base(python::incref(python::expect_non_null(x.get()))) -{} - -}}} // namespace boost::python diff --git a/contrib/restricted/boost/python/src/object_protocol.cpp b/contrib/restricted/boost/python/src/object_protocol.cpp deleted file mode 100644 index 95c8c73ee66..00000000000 --- a/contrib/restricted/boost/python/src/object_protocol.cpp +++ /dev/null @@ -1,197 +0,0 @@ -// 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) - -#include <boost/python/object_protocol.hpp> -#include <boost/python/errors.hpp> -#include <boost/python/object.hpp> -#include <boost/python/ssize_t.hpp> - -namespace boost { namespace python { namespace api { - -BOOST_PYTHON_DECL object getattr(object const& target, object const& key) -{ - return object(detail::new_reference(PyObject_GetAttr(target.ptr(), key.ptr()))); -} - -BOOST_PYTHON_DECL object getattr(object const& target, object const& key, object const& default_) -{ - PyObject* result = PyObject_GetAttr(target.ptr(), key.ptr()); - if (result == NULL && PyErr_ExceptionMatches(PyExc_AttributeError)) - { - PyErr_Clear(); - return default_; - } - return object(detail::new_reference(result)); -} - -BOOST_PYTHON_DECL void setattr(object const& target, object const& key, object const& value) -{ - if (PyObject_SetAttr(target.ptr(), key.ptr(), value.ptr()) == -1) - throw_error_already_set(); -} - -BOOST_PYTHON_DECL void delattr(object const& target, object const& key) -{ - if (PyObject_DelAttr(target.ptr(), key.ptr()) == -1) - throw_error_already_set(); -} - -BOOST_PYTHON_DECL object getattr(object const& target, char const* key) -{ - return object( - detail::new_reference( - PyObject_GetAttrString(target.ptr(), const_cast<char*>(key)) - )); -} - -BOOST_PYTHON_DECL object getattr(object const& target, char const* key, object const& default_) -{ - PyObject* result = PyObject_GetAttrString(target.ptr(), const_cast<char*>(key)); - if (result == NULL && PyErr_ExceptionMatches(PyExc_AttributeError)) - { - PyErr_Clear(); - return default_; - } - return object(detail::new_reference(result)); - -} -BOOST_PYTHON_DECL void setattr(object const& target, char const* key, object const& value) -{ - if (PyObject_SetAttrString( - target.ptr(), const_cast<char*>(key), value.ptr()) == -1 - ) - { - throw_error_already_set(); - } -} - -BOOST_PYTHON_DECL void delattr(object const& target, char const* key) -{ - if (PyObject_DelAttrString( - target.ptr(), const_cast<char*>(key)) == -1 - ) - { - throw_error_already_set(); - } -} - -BOOST_PYTHON_DECL object getitem(object const& target, object const& key) -{ - return object(detail::new_reference( - PyObject_GetItem(target.ptr(), key.ptr()))); -} - -BOOST_PYTHON_DECL void setitem(object const& target, object const& key, object const& value) -{ - if (PyObject_SetItem(target.ptr(), key.ptr(), value.ptr()) == -1) - throw_error_already_set(); -} - -BOOST_PYTHON_DECL void delitem(object const& target, object const& key) -{ - if (PyObject_DelItem(target.ptr(), key.ptr()) == -1) - throw_error_already_set(); -} - -namespace // slicing code copied directly out of the Python implementation -{ - #undef ISINT - #define ISINT(x) ((x) == NULL || PyInt_Check(x) || PyLong_Check(x)) - - static PyObject * - apply_slice(PyObject *u, PyObject *v, PyObject *w) /* return u[v:w] */ - { -#if PY_VERSION_HEX < 0x03000000 - PyTypeObject *tp = u->ob_type; - PySequenceMethods *sq = tp->tp_as_sequence; - - if (sq && sq->sq_slice && ISINT(v) && ISINT(w)) { - ssize_t ilow = 0, ihigh = ssize_t_max; - if (!_PyEval_SliceIndex(v, &ilow)) - return NULL; - if (!_PyEval_SliceIndex(w, &ihigh)) - return NULL; - return PySequence_GetSlice(u, ilow, ihigh); - } - else -#endif - { - PyObject *slice = PySlice_New(v, w, NULL); - if (slice != NULL) { - PyObject *res = PyObject_GetItem(u, slice); - Py_DECREF(slice); - return res; - } - else - return NULL; - } - } - - static int - assign_slice(PyObject *u, PyObject *v, PyObject *w, PyObject *x) - /* u[v:w] = x */ - { -#if PY_VERSION_HEX < 0x03000000 - PyTypeObject *tp = u->ob_type; - PySequenceMethods *sq = tp->tp_as_sequence; - - if (sq && sq->sq_slice && ISINT(v) && ISINT(w)) { - ssize_t ilow = 0, ihigh = ssize_t_max; - if (!_PyEval_SliceIndex(v, &ilow)) - return -1; - if (!_PyEval_SliceIndex(w, &ihigh)) - return -1; - if (x == NULL) - return PySequence_DelSlice(u, ilow, ihigh); - else - return PySequence_SetSlice(u, ilow, ihigh, x); - } - else -#endif - { - PyObject *slice = PySlice_New(v, w, NULL); - if (slice != NULL) { - int res; - if (x != NULL) - res = PyObject_SetItem(u, slice, x); - else - res = PyObject_DelItem(u, slice); - Py_DECREF(slice); - return res; - } - else - return -1; - } - } -} - -BOOST_PYTHON_DECL object getslice(object const& target, handle<> const& begin, handle<> const& end) -{ - return object( - detail::new_reference( - apply_slice(target.ptr(), begin.get(), end.get()))); -} - -BOOST_PYTHON_DECL void setslice(object const& target, handle<> const& begin, handle<> const& end, object const& value) -{ - if (assign_slice( - target.ptr(), begin.get(), end.get(), value.ptr()) == -1 - ) - { - throw_error_already_set(); - } -} - -BOOST_PYTHON_DECL void delslice(object const& target, handle<> const& begin, handle<> const& end) -{ - if (assign_slice( - target.ptr(), begin.get(), end.get(), 0) == -1 - ) - { - throw_error_already_set(); - } -} - -}}} // namespace boost::python::api diff --git a/contrib/restricted/boost/python/src/slice.cpp b/contrib/restricted/boost/python/src/slice.cpp deleted file mode 100644 index ee55f948461..00000000000 --- a/contrib/restricted/boost/python/src/slice.cpp +++ /dev/null @@ -1,37 +0,0 @@ -#include "boost/python/slice.hpp" - -// Copyright (c) 2004 Jonathan Brandmeyer -// Use, modification and distribution are subject to 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) - - -namespace boost { namespace python { namespace detail { - -slice_base::slice_base(PyObject* start, PyObject* stop, PyObject* step) - : object(detail::new_reference( PySlice_New(start, stop, step))) -{ -} - -object -slice_base::start() const -{ - return object( detail::borrowed_reference( - ((PySliceObject*)this->ptr())->start)); -} - -object -slice_base::stop() const -{ - return object( detail::borrowed_reference( - ((PySliceObject*)this->ptr())->stop)); -} - -object -slice_base::step() const -{ - return object( detail::borrowed_reference( - ((PySliceObject*)this->ptr())->step)); -} - -} } } // !namespace boost::python::detail diff --git a/contrib/restricted/boost/python/src/str.cpp b/contrib/restricted/boost/python/src/str.cpp deleted file mode 100644 index 5122f7f57f4..00000000000 --- a/contrib/restricted/boost/python/src/str.cpp +++ /dev/null @@ -1,419 +0,0 @@ -// Copyright David Abrahams 2004. 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) -#include <boost/python/str.hpp> -#include <boost/python/extract.hpp> -#include <boost/python/ssize_t.hpp> - -namespace boost { namespace python { namespace detail { - -detail::new_reference str_base::call(object const& arg_) -{ - return (detail::new_reference)PyObject_CallFunction( -#if PY_VERSION_HEX >= 0x03000000 - (PyObject*)&PyUnicode_Type, -#else - (PyObject*)&PyString_Type, -#endif - const_cast<char*>("(O)"), - arg_.ptr()); -} - -str_base::str_base() - : object(detail::new_reference( -#if PY_VERSION_HEX >= 0x03000000 - ::PyUnicode_FromString("") -#else - ::PyString_FromString("") -#endif - )) -{} - -str_base::str_base(const char* s) - : object(detail::new_reference( -#if PY_VERSION_HEX >= 0x03000000 - ::PyUnicode_FromString(s) -#else - ::PyString_FromString(s) -#endif - )) -{} - -namespace { - - ssize_t str_size_as_py_ssize_t(std::size_t n) - { - if (n > static_cast<std::size_t>(ssize_t_max)) - { - throw std::range_error("str size > ssize_t_max"); - } - return static_cast<ssize_t>(n); - } - -} // namespace <anonymous> - -str_base::str_base(char const* start, char const* finish) - : object( - detail::new_reference( -#if PY_VERSION_HEX >= 0x03000000 - ::PyUnicode_FromStringAndSize -#else - ::PyString_FromStringAndSize -#endif - (start, str_size_as_py_ssize_t(finish - start)) - ) - ) -{} - -str_base::str_base(char const* start, std::size_t length) // new str - : object( - detail::new_reference( -#if PY_VERSION_HEX >= 0x03000000 - ::PyUnicode_FromStringAndSize -#else - ::PyString_FromStringAndSize -#endif - ( start, str_size_as_py_ssize_t(length) ) - ) - ) -{} - -str_base::str_base(object_cref other) - : object(str_base::call(other)) -{} - -#define BOOST_PYTHON_FORMAT_OBJECT(z, n, data) "O" -#define BOOST_PYTHON_OBJECT_PTR(z, n, data) , x##n .ptr() - -#define BOOST_PYTHON_DEFINE_STR_METHOD(name, arity) \ -str str_base:: name ( BOOST_PP_ENUM_PARAMS(arity, object_cref x) ) const \ -{ \ - return str(new_reference( \ - expect_non_null( \ - PyObject_CallMethod( \ - this->ptr(), const_cast<char*>( #name ), \ - const_cast<char*>( \ - "(" BOOST_PP_REPEAT(arity, BOOST_PYTHON_FORMAT_OBJECT, _) ")") \ - BOOST_PP_REPEAT_1(arity, BOOST_PYTHON_OBJECT_PTR, _))))); \ -} - -BOOST_PYTHON_DEFINE_STR_METHOD(capitalize, 0) -BOOST_PYTHON_DEFINE_STR_METHOD(center, 1) - -long str_base::count(object_cref sub) const -{ - return extract<long>(this->attr("count")(sub)); -} - -long str_base::count(object_cref sub, object_cref start) const -{ - return extract<long>(this->attr("count")(sub,start)); -} - -long str_base::count(object_cref sub, object_cref start, object_cref end) const -{ - return extract<long>(this->attr("count")(sub,start,end)); -} - -#if PY_VERSION_HEX < 0x03000000 -object str_base::decode() const -{ - return this->attr("decode")(); -} - -object str_base::decode(object_cref encoding) const -{ - return this->attr("decode")(encoding); -} - -object str_base::decode(object_cref encoding, object_cref errors) const -{ - return this->attr("decode")(encoding,errors); -} -#endif - -object str_base::encode() const -{ - return this->attr("encode")(); -} - -object str_base::encode(object_cref encoding) const -{ - return this->attr("encode")(encoding); -} - -object str_base::encode(object_cref encoding, object_cref errors) const -{ - return this->attr("encode")(encoding,errors); -} - - -#if PY_VERSION_HEX >= 0x03000000 - #define _BOOST_PYTHON_ASLONG PyLong_AsLong -#else - #define _BOOST_PYTHON_ASLONG PyInt_AsLong -#endif - -bool str_base::endswith(object_cref suffix) const -{ - bool result = _BOOST_PYTHON_ASLONG(this->attr("endswith")(suffix).ptr()); - if (PyErr_Occurred()) - throw_error_already_set(); - return result; -} - -bool str_base::endswith(object_cref suffix, object_cref start) const -{ - bool result = _BOOST_PYTHON_ASLONG(this->attr("endswith")(suffix,start).ptr()); - if (PyErr_Occurred()) - throw_error_already_set(); - return result; -} - -bool str_base::endswith(object_cref suffix, object_cref start, object_cref end) const -{ - bool result = _BOOST_PYTHON_ASLONG(this->attr("endswith")(suffix,start,end).ptr()); - if (PyErr_Occurred()) - throw_error_already_set(); - return result; -} - -BOOST_PYTHON_DEFINE_STR_METHOD(expandtabs, 0) -BOOST_PYTHON_DEFINE_STR_METHOD(expandtabs, 1) - -long str_base::find(object_cref sub) const -{ - long result = _BOOST_PYTHON_ASLONG(this->attr("find")(sub).ptr()); - if (PyErr_Occurred()) - throw_error_already_set(); - return result; -} - -long str_base::find(object_cref sub, object_cref start) const -{ - long result = _BOOST_PYTHON_ASLONG(this->attr("find")(sub,start).ptr()); - if (PyErr_Occurred()) - throw_error_already_set(); - return result; -} - -long str_base::find(object_cref sub, object_cref start, object_cref end) const -{ - long result = _BOOST_PYTHON_ASLONG(this->attr("find")(sub,start,end).ptr()); - if (PyErr_Occurred()) - throw_error_already_set(); - return result; -} - -long str_base::index(object_cref sub) const -{ - long result = _BOOST_PYTHON_ASLONG(this->attr("index")(sub).ptr()); - if (PyErr_Occurred()) - throw_error_already_set(); - return result; -} - -long str_base::index(object_cref sub, object_cref start) const -{ - long result = _BOOST_PYTHON_ASLONG(this->attr("index")(sub,start).ptr()); - if (PyErr_Occurred()) - throw_error_already_set(); - return result; -} - -long str_base::index(object_cref sub, object_cref start, object_cref end) const -{ - long result = _BOOST_PYTHON_ASLONG(this->attr("index")(sub,start,end).ptr()); - if (PyErr_Occurred()) - throw_error_already_set(); - return result; -} - -bool str_base::isalnum() const -{ - bool result = _BOOST_PYTHON_ASLONG(this->attr("isalnum")().ptr()); - if (PyErr_Occurred()) - throw_error_already_set(); - return result; -} - -bool str_base::isalpha() const -{ - bool result = _BOOST_PYTHON_ASLONG(this->attr("isalpha")().ptr()); - if (PyErr_Occurred()) - throw_error_already_set(); - return result; -} - -bool str_base::isdigit() const -{ - bool result = _BOOST_PYTHON_ASLONG(this->attr("isdigit")().ptr()); - if (PyErr_Occurred()) - throw_error_already_set(); - return result; -} - -bool str_base::islower() const -{ - bool result = _BOOST_PYTHON_ASLONG(this->attr("islower")().ptr()); - if (PyErr_Occurred()) - throw_error_already_set(); - return result; -} - -bool str_base::isspace() const -{ - bool result = _BOOST_PYTHON_ASLONG(this->attr("isspace")().ptr()); - if (PyErr_Occurred()) - throw_error_already_set(); - return result; -} - -bool str_base::istitle() const -{ - bool result = _BOOST_PYTHON_ASLONG(this->attr("istitle")().ptr()); - if (PyErr_Occurred()) - throw_error_already_set(); - return result; -} - -bool str_base::isupper() const -{ - bool result = _BOOST_PYTHON_ASLONG(this->attr("isupper")().ptr()); - if (PyErr_Occurred()) - throw_error_already_set(); - return result; -} - -BOOST_PYTHON_DEFINE_STR_METHOD(join, 1) -BOOST_PYTHON_DEFINE_STR_METHOD(ljust, 1) -BOOST_PYTHON_DEFINE_STR_METHOD(lower, 0) -BOOST_PYTHON_DEFINE_STR_METHOD(lstrip, 0) -BOOST_PYTHON_DEFINE_STR_METHOD(replace, 2) -BOOST_PYTHON_DEFINE_STR_METHOD(replace, 3) - -long str_base::rfind(object_cref sub) const -{ - long result = _BOOST_PYTHON_ASLONG(this->attr("rfind")(sub).ptr()); - if (PyErr_Occurred()) - throw_error_already_set(); - return result; -} - -long str_base::rfind(object_cref sub, object_cref start) const -{ - long result = _BOOST_PYTHON_ASLONG(this->attr("rfind")(sub,start).ptr()); - if (PyErr_Occurred()) - throw_error_already_set(); - return result; -} - -long str_base::rfind(object_cref sub, object_cref start, object_cref end) const -{ - long result = _BOOST_PYTHON_ASLONG(this->attr("rfind")(sub,start,end).ptr()); - if (PyErr_Occurred()) - throw_error_already_set(); - return result; -} - -long str_base::rindex(object_cref sub) const -{ - long result = _BOOST_PYTHON_ASLONG(this->attr("rindex")(sub).ptr()); - if (PyErr_Occurred()) - throw_error_already_set(); - return result; -} - -long str_base::rindex(object_cref sub, object_cref start) const -{ - long result = _BOOST_PYTHON_ASLONG(this->attr("rindex")(sub,start).ptr()); - if (PyErr_Occurred()) - throw_error_already_set(); - return result; -} - -long str_base::rindex(object_cref sub, object_cref start, object_cref end) const -{ - long result = _BOOST_PYTHON_ASLONG(this->attr("rindex")(sub,start,end).ptr()); - if (PyErr_Occurred()) - throw_error_already_set(); - return result; -} - -BOOST_PYTHON_DEFINE_STR_METHOD(rjust, 1) -BOOST_PYTHON_DEFINE_STR_METHOD(rstrip, 0) - -list str_base::split() const -{ - return list(this->attr("split")()); -} - -list str_base::split(object_cref sep) const -{ - return list(this->attr("split")(sep)); -} - -list str_base::split(object_cref sep, object_cref maxsplit) const -{ - return list(this->attr("split")(sep,maxsplit)); -} - -list str_base::splitlines() const -{ - return list(this->attr("splitlines")()); -} - -list str_base::splitlines(object_cref keepends) const -{ - return list(this->attr("splitlines")(keepends)); -} - -bool str_base::startswith(object_cref prefix) const -{ - bool result = _BOOST_PYTHON_ASLONG(this->attr("startswith")(prefix).ptr()); - if (PyErr_Occurred()) - throw_error_already_set(); - return result; -} - -bool str_base::startswith(object_cref prefix, object_cref start) const -{ - bool result = _BOOST_PYTHON_ASLONG(this->attr("startswith")(prefix,start).ptr()); - if (PyErr_Occurred()) - throw_error_already_set(); - return result; -} - -bool str_base::startswith(object_cref prefix, object_cref start, object_cref end) const -{ - bool result = _BOOST_PYTHON_ASLONG(this->attr("startswith")(prefix,start,end).ptr()); - if (PyErr_Occurred()) - throw_error_already_set(); - return result; -} - -#undef _BOOST_PYTHON_ASLONG - -BOOST_PYTHON_DEFINE_STR_METHOD(strip, 0) -BOOST_PYTHON_DEFINE_STR_METHOD(swapcase, 0) -BOOST_PYTHON_DEFINE_STR_METHOD(title, 0) -BOOST_PYTHON_DEFINE_STR_METHOD(translate, 1) -BOOST_PYTHON_DEFINE_STR_METHOD(translate, 2) -BOOST_PYTHON_DEFINE_STR_METHOD(upper, 0) - -static struct register_str_pytype_ptr -{ - register_str_pytype_ptr() - { - const_cast<converter::registration &>( - converter::registry::lookup(boost::python::type_id<boost::python::str>()) - ) -#if PY_VERSION_HEX >= 0x03000000 - .m_class_object = &PyUnicode_Type; -#else - .m_class_object = &PyString_Type; -#endif - } -}register_str_pytype_ptr_; - -}}} // namespace boost::python diff --git a/contrib/restricted/boost/python/src/tuple.cpp b/contrib/restricted/boost/python/src/tuple.cpp deleted file mode 100644 index 6719713b73b..00000000000 --- a/contrib/restricted/boost/python/src/tuple.cpp +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright David Abrahams 2004. -// 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) -#include <boost/python/tuple.hpp> - -namespace boost { namespace python { namespace detail { - -detail::new_reference tuple_base::call(object const& arg_) -{ - return (detail::new_reference)PyObject_CallFunction( - (PyObject*)&PyTuple_Type, const_cast<char*>("(O)"), - arg_.ptr()); -} - -tuple_base::tuple_base() - : object(detail::new_reference(PyTuple_New(0))) -{} - -tuple_base::tuple_base(object_cref sequence) - : object(call(sequence)) -{} - -static struct register_tuple_pytype_ptr -{ - register_tuple_pytype_ptr() - { - const_cast<converter::registration &>( - converter::registry::lookup(boost::python::type_id<boost::python::tuple>()) - ).m_class_object = &PyTuple_Type; - } -}register_tuple_pytype_ptr_; - - -}}} // namespace boost::python diff --git a/contrib/restricted/boost/python/src/wrapper.cpp b/contrib/restricted/boost/python/src/wrapper.cpp deleted file mode 100644 index 8b1b8847695..00000000000 --- a/contrib/restricted/boost/python/src/wrapper.cpp +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright David Abrahams 2004. 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) - -#include <boost/python/wrapper.hpp> - -namespace boost { namespace python { - -namespace detail -{ - override wrapper_base::get_override( - char const* name - , PyTypeObject* class_object - ) const - { - if (this->m_self) - { - if (handle<> m = handle<>( - python::allow_null( - ::PyObject_GetAttrString( - this->m_self, const_cast<char*>(name)))) - ) - { - PyObject* borrowed_f = 0; - - if ( - PyMethod_Check(m.get()) - && PyMethod_GET_SELF(m.get()) == this->m_self - && class_object->tp_dict != 0 - ) - { - borrowed_f = ::PyDict_GetItemString( - class_object->tp_dict, const_cast<char*>(name)); - - - } - if (borrowed_f != PyMethod_GET_FUNCTION(m.get())) - return override(m); - } - } - return override(handle<>(detail::none())); - } -} - -#if 0 -namespace converter -{ - PyObject* BOOST_PYTHON_DECL do_polymorphic_ref_to_python( - python::detail::wrapper_base const volatile* x, type_info src - ) - { - if (x == 0) - { - ::PyErr_Format( - PyExc_TypeError - , "Attempting to returning pointer or reference to instance of %s\n" - "for which no corresponding Python object exists. Wrap this function" - "with a return return value policy" - ) - } - } - -} -#endif - -}} // namespace boost::python::detail |
