-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
python: Initial import of boost::python from boost 1.85.0
This change just brings boost::python into the tree as a starting point for the pxr_boost::python implementation. The src/ and test/ directories are placed next to the public headers since we don't have separate public/private directory hierarchies like boost, but the code itself is unchanged and not included in the build. We use boost 1.85.0 as the starting point even though we're currently on VFX Reference Platform 2022, which specifies boost 1.76.0. This is because later versions of boost are needed for other platforms and versions of Python that OpenUSD supports. For example Python 3.11 requires boost 1.82.0+. (Internal change: 2334040) (Internal change: 2336880)
- Loading branch information
Showing
443 changed files
with
41,854 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
// 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) | ||
|
||
// See http://www.boost.org/libs/python for documentation. | ||
|
||
#ifndef PYTHON_DWA2002810_HPP | ||
# define PYTHON_DWA2002810_HPP | ||
|
||
# include <boost/python/args.hpp> | ||
# include <boost/python/args_fwd.hpp> | ||
# include <boost/python/back_reference.hpp> | ||
# include <boost/python/bases.hpp> | ||
# include <boost/python/borrowed.hpp> | ||
# include <boost/python/call.hpp> | ||
# include <boost/python/call_method.hpp> | ||
# include <boost/python/class.hpp> | ||
# include <boost/python/copy_const_reference.hpp> | ||
# include <boost/python/copy_non_const_reference.hpp> | ||
# include <boost/python/data_members.hpp> | ||
# include <boost/python/def.hpp> | ||
# include <boost/python/default_call_policies.hpp> | ||
# include <boost/python/dict.hpp> | ||
# include <boost/python/docstring_options.hpp> | ||
# include <boost/python/enum.hpp> | ||
# include <boost/python/errors.hpp> | ||
# include <boost/python/exception_translator.hpp> | ||
# include <boost/python/exec.hpp> | ||
# include <boost/python/extract.hpp> | ||
# include <boost/python/handle.hpp> | ||
# include <boost/python/has_back_reference.hpp> | ||
# include <boost/python/implicit.hpp> | ||
# include <boost/python/init.hpp> | ||
# include <boost/python/import.hpp> | ||
# include <boost/python/instance_holder.hpp> | ||
# include <boost/python/iterator.hpp> | ||
# include <boost/python/list.hpp> | ||
# include <boost/python/long.hpp> | ||
# include <boost/python/lvalue_from_pytype.hpp> | ||
# include <boost/python/make_constructor.hpp> | ||
# include <boost/python/make_function.hpp> | ||
# include <boost/python/manage_new_object.hpp> | ||
# include <boost/python/module.hpp> | ||
# include <boost/python/object.hpp> | ||
# include <boost/python/object_protocol.hpp> | ||
# include <boost/python/object_protocol_core.hpp> | ||
# include <boost/python/opaque_pointer_converter.hpp> | ||
# include <boost/python/operators.hpp> | ||
# include <boost/python/other.hpp> | ||
# include <boost/python/overloads.hpp> | ||
# include <boost/python/pointee.hpp> | ||
# include <boost/python/pure_virtual.hpp> | ||
# include <boost/python/ptr.hpp> | ||
# include <boost/python/raw_function.hpp> | ||
# include <boost/python/reference_existing_object.hpp> | ||
# include <boost/python/register_ptr_to_python.hpp> | ||
# include <boost/python/return_arg.hpp> | ||
# include <boost/python/return_internal_reference.hpp> | ||
# include <boost/python/return_opaque_pointer.hpp> | ||
# include <boost/python/return_value_policy.hpp> | ||
# include <boost/python/scope.hpp> | ||
# include <boost/python/self.hpp> | ||
# include <boost/python/slice.hpp> | ||
# include <boost/python/slice_nil.hpp> | ||
# include <boost/python/stl_iterator.hpp> | ||
# include <boost/python/str.hpp> | ||
# include <boost/python/to_python_converter.hpp> | ||
# include <boost/python/to_python_indirect.hpp> | ||
# include <boost/python/to_python_value.hpp> | ||
# include <boost/python/tuple.hpp> | ||
# include <boost/python/type_id.hpp> | ||
# include <boost/python/with_custodian_and_ward.hpp> | ||
|
||
#endif // PYTHON_DWA2002810_HPP |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
// 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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,146 @@ | ||
// 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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
// 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 |
Oops, something went wrong.