#include "pytypes.h"
#include "detail/typeid.h"
#include "detail/descr.h"
#include "detail/internals.h"
#include <array>
#include <limits>
#include <tuple>
#include <type_traits>
Go to the source code of this file.
Namespaces | |
literals | |
Macros | |
#define | PYBIND11_TYPE_CASTER(type, py_name) |
#define | PYBIND11_DECLARE_HOLDER_TYPE(type, holder_type, ...) |
Create a specialization for custom holder types (silently ignores std::shared_ptr) More... | |
#define | PYBIND11_MAKE_OPAQUE(...) |
#define | PYBIND11_TYPE(...) __VA_ARGS__ |
Lets you pass a type containing a , through a macro parameter without needing a separate typedef, e.g. More... | |
Typedefs | |
template<typename T > | |
using | cast_op_type = conditional_t< std::is_pointer< remove_reference_t< T > >::value, typename std::add_pointer< intrinsic_t< T > >::type, typename std::add_lvalue_reference< intrinsic_t< T > >::type > |
Determine suitable casting operator for pointer-or-lvalue-casting type casters. More... | |
template<typename T > | |
using | movable_cast_op_type = conditional_t< std::is_pointer< typename std::remove_reference< T >::type >::value, typename std::add_pointer< intrinsic_t< T > >::type, conditional_t< std::is_rvalue_reference< T >::value, typename std::add_rvalue_reference< intrinsic_t< T > >::type, typename std::add_lvalue_reference< intrinsic_t< T > >::type > > |
Determine suitable casting operator for a type caster with a movable value. More... | |
template<typename type > | |
using | make_caster = type_caster< intrinsic_t< type > > |
template<typename CharT > | |
using | is_std_char_type = any_of< std::is_same< CharT, char >, std::is_same< CharT, char16_t >, std::is_same< CharT, char32_t >, std::is_same< CharT, wchar_t > > |
template<typename type , typename holder_type > | |
using | type_caster_holder = conditional_t< is_copy_constructible< holder_type >::value, copyable_holder_caster< type, holder_type >, move_only_holder_caster< type, holder_type > > |
template<typename T > | |
using | move_is_plain_type = satisfies_none_of< T, std::is_void, std::is_pointer, std::is_reference, std::is_const > |
template<typename T > | |
using | move_never = none_of< move_always< T >, move_if_unreferenced< T > > |
template<typename type > | |
using | cast_is_temporary_value_reference = bool_constant<(std::is_reference< type >::value||std::is_pointer< type >::value) &&!std::is_base_of< type_caster_generic, make_caster< type > >::value &&!std::is_same< intrinsic_t< type >, void >::value > |
template<typename ret_type > | |
using | override_caster_t = conditional_t< cast_is_temporary_value_reference< ret_type >::value, make_caster< ret_type >, override_unused > |
template<typename > | |
using | arg_t = arg_v |
Alias for backward compatibility – to be removed in version 2.0. More... | |
Functions | |
std::pair< decltype(internals::registered_types_py)::iterator, bool > | all_type_info_get_cache (PyTypeObject *type) |
PYBIND11_NOINLINE void | all_type_info_populate (PyTypeObject *t, std::vector< type_info * > &bases) |
const std::vector< detail::type_info * > & | all_type_info (PyTypeObject *type) |
Extracts vector of type_info pointers of pybind-registered roots of the given Python type. More... | |
PYBIND11_NOINLINE detail::type_info * | get_type_info (PyTypeObject *type) |
Gets a single pybind11 type info for a python type. More... | |
detail::type_info * | get_local_type_info (const std::type_index &tp) |
detail::type_info * | get_global_type_info (const std::type_index &tp) |
PYBIND11_NOINLINE detail::type_info * | get_type_info (const std::type_index &tp, bool throw_if_missing=false) |
Return the type info for a given C++ type; on lookup failure can either throw or return nullptr. More... | |
PYBIND11_NOINLINE handle | get_type_handle (const std::type_info &tp, bool throw_if_missing) |
PYBIND11_NOINLINE bool | isinstance_generic (handle obj, const std::type_info &tp) |
PYBIND11_NOINLINE std::string | error_string () |
PYBIND11_NOINLINE handle | get_object_handle (const void *ptr, const detail::type_info *type) |
PyThreadState * | get_thread_state_unchecked () |
void | keep_alive_impl (handle nurse, handle patient) |
PyObject * | make_new_instance (PyTypeObject *type) |
Instance creation function for all pybind11 types. More... | |
template<typename T > | |
make_caster< T >::template cast_op_type< T > | cast_op (make_caster< T > &caster) |
template<typename T > | |
make_caster< T >::template cast_op_type< typename std::add_rvalue_reference< T >::type > | cast_op (make_caster< T > &&caster) |
template<typename T , typename SFINAE > | |
type_caster< T, SFINAE > & | load_type (type_caster< T, SFINAE > &conv, const handle &handle) |
template<typename T > | |
make_caster< T > | load_type (const handle &handle) |
template<typename T , detail::enable_if_t<!detail::is_pyobject< T >::value, int > = 0> | |
T | cast (const handle &handle) |
template<typename T , detail::enable_if_t<!detail::is_pyobject< T >::value, int > = 0> | |
object | cast (T &&value, return_value_policy policy=return_value_policy::automatic_reference, handle parent=handle()) |
template<typename T > | |
detail::enable_if_t<!detail::move_never< T >::value, T > | move (object &&obj) |
template<typename T > | |
detail::enable_if_t< detail::move_always< T >::value, T > | cast (object &&object) |
template<typename T > | |
detail::enable_if_t< detail::move_if_unreferenced< T >::value, T > | cast (object &&object) |
template<typename T > | |
detail::enable_if_t< detail::move_never< T >::value, T > | cast (object &&object) |
template<typename T , enable_if_t<!is_pyobject< T >::value, int > > | |
object | object_or_cast (T &&o) |
template<typename T > | |
enable_if_t< cast_is_temporary_value_reference< T >::value, T > | cast_ref (object &&o, make_caster< T > &caster) |
template<typename T > | |
enable_if_t<!cast_is_temporary_value_reference< T >::value, T > | cast_ref (object &&, override_unused &) |
template<typename T > | |
enable_if_t<!cast_is_temporary_value_reference< T >::value, T > | cast_safe (object &&o) |
template<typename T > | |
enable_if_t< cast_is_temporary_value_reference< T >::value, T > | cast_safe (object &&) |
template<> | |
void | cast_safe< void > (object &&) |
template<return_value_policy policy = return_value_policy::automatic_reference> | |
tuple | make_tuple () |
template<return_value_policy policy = return_value_policy::automatic_reference, typename... Args> | |
tuple | make_tuple (Args &&... args_) |
constexpr arg | literals::operator""_a (const char *name, size_t) |
\rst String literal version of arg \endrst More... | |
template<return_value_policy policy, typename... Args, typename = enable_if_t<all_of<is_positional<Args>...>::value>> | |
simple_collector< policy > | collect_arguments (Args &&...args) |
Collect only positional arguments for a Python function call. More... | |
template<return_value_policy policy, typename... Args, typename = enable_if_t<!all_of<is_positional<Args>...>::value>> | |
unpacking_collector< policy > | collect_arguments (Args &&...args) |
Collect all arguments, including keywords and unpacking (only instantiated when needed) More... | |
#define PYBIND11_DECLARE_HOLDER_TYPE | ( | type, | |
holder_type, | |||
... | |||
) |
Create a specialization for custom holder types (silently ignores std::shared_ptr)
#define PYBIND11_MAKE_OPAQUE | ( | ... | ) |
#define PYBIND11_TYPE | ( | ... | ) | __VA_ARGS__ |
#define PYBIND11_TYPE_CASTER | ( | type, | |
py_name | |||
) |
using cast_is_temporary_value_reference = bool_constant< (std::is_reference<type>::value || std::is_pointer<type>::value) && !std::is_base_of<type_caster_generic, make_caster<type> >::value && !std::is_same<intrinsic_t<type>, void>::value > |
using cast_op_type = conditional_t<std::is_pointer<remove_reference_t<T> >::value, typename std::add_pointer<intrinsic_t<T> >::type, typename std::add_lvalue_reference<intrinsic_t<T> >::type> |
Determine suitable casting operator for pointer-or-lvalue-casting type casters.
The type caster needs to provide operator T*()
and operator T&()
operators.
If the type supports moving the value away via an operator T&&() &&
method, it should use movable_cast_op_type
instead.
using is_std_char_type = any_of< std::is_same<CharT, char>, std::is_same<CharT, char16_t>, std::is_same<CharT, char32_t>, std::is_same<CharT, wchar_t> > |
using make_caster = type_caster<intrinsic_t<type> > |
using movable_cast_op_type = conditional_t<std::is_pointer<typename std::remove_reference<T>::type>::value, typename std::add_pointer<intrinsic_t<T> >::type, conditional_t<std::is_rvalue_reference<T>::value, typename std::add_rvalue_reference<intrinsic_t<T> >::type, typename std::add_lvalue_reference<intrinsic_t<T> >::type> > |
Determine suitable casting operator for a type caster with a movable value.
Such a type caster needs to provide operator T*()
, operator T&()
, and operator T&&() &&
. The latter will be called in appropriate contexts where the value can be moved rather than copied.
These operator are automatically provided when using the PYBIND11_TYPE_CASTER macro.
using move_is_plain_type = satisfies_none_of<T, std::is_void, std::is_pointer, std::is_reference, std::is_const > |
using move_never = none_of<move_always<T>, move_if_unreferenced<T> > |
using override_caster_t = conditional_t< cast_is_temporary_value_reference<ret_type>::value, make_caster<ret_type>, override_unused> |
using type_caster_holder = conditional_t<is_copy_constructible<holder_type>::value, copyable_holder_caster<type, holder_type>, move_only_holder_caster<type, holder_type> > |
|
inline |
Extracts vector of type_info pointers of pybind-registered roots of the given Python type.
Will be just 1 pybind type for the Python type of a pybind-registered class, or for any Python-side derived class that uses single inheritance. Will contain as many types as required for a Python class that uses multiple inheritance to inherit (directly or indirectly) from multiple pybind-registered classes. Will be empty if neither the type nor any base classes are pybind-registered.
The value is cached for the lifetime of the Python type.
Definition at line 150 of file cast.h.
References all_type_info_get_cache(), and all_type_info_populate().
Referenced by instance::allocate_layout(), type_caster_generic::cast(), get_type_info(), keep_alive_impl(), type_caster< void >::load(), and type_caster_generic::load_impl().
|
inline |
Definition at line 1810 of file pybind11.h.
References cpp_function::cpp_function(), handle::dec_ref(), get_internals(), internals::registered_types_py, and object::release().
Referenced by all_type_info().
|
inline |
Definition at line 95 of file cast.h.
References get_internals(), test_multiple_inheritance::i, and internals::registered_types_py.
Referenced by all_type_info().
T cast | ( | const handle & | handle | ) |
Definition at line 1718 of file cast.h.
Referenced by type_caster< MoveOnlyInt >::cast(), type_caster< MoveOrCopyInt >::cast(), type_caster< CopyOnlyInt >::cast(), type_caster< std::reference_wrapper< type > >::cast(), type_caster< CharT, enable_if_t< is_std_char_type< CharT >::value > >::cast(), cast(), cpp_function::initialize(), make_tuple(), object_or_cast(), unpacking_collector< policy >::process(), vectorize_helper< Func, Return, Args >::run(), TEST_SUBMODULE(), enum_< Type >::value(), and ConstructorStats::values().
detail::enable_if_t<detail::move_always<T>::value, T> cast | ( | object && | object | ) |
detail::enable_if_t<detail::move_if_unreferenced<T>::value, T> cast | ( | object && | object | ) |
detail::enable_if_t<detail::move_never<T>::value, T> cast | ( | object && | object | ) |
object cast | ( | T && | value, |
return_value_policy | policy = return_value_policy::automatic_reference , |
||
handle | parent = handle() |
||
) |
Definition at line 1731 of file cast.h.
References automatic, automatic_reference, cast(), copy, move, reference, take_ownership, and test_callbacks::value.
make_caster<T>::template cast_op_type<typename std::add_rvalue_reference<T>::type> cast_op | ( | make_caster< T > && | caster | ) |
make_caster<T>::template cast_op_type<T> cast_op | ( | make_caster< T > & | caster | ) |
enable_if_t<!cast_is_temporary_value_reference<T>::value, T> cast_ref | ( | object && | , |
override_unused & | |||
) |
Definition at line 1800 of file cast.h.
References pybind11_fail().
enable_if_t<cast_is_temporary_value_reference<T>::value, T> cast_ref | ( | object && | o, |
make_caster< T > & | caster | ||
) |
Definition at line 1797 of file cast.h.
References load_type().
enable_if_t<cast_is_temporary_value_reference<T>::value, T> cast_safe | ( | object && | ) |
Definition at line 1808 of file cast.h.
References pybind11_fail().
enable_if_t<!cast_is_temporary_value_reference<T>::value, T> cast_safe | ( | object && | o | ) |
simple_collector<policy> collect_arguments | ( | Args &&... | args | ) |
unpacking_collector<policy> collect_arguments | ( | Args &&... | args | ) |
|
inline |
Definition at line 410 of file cast.h.
References handle::cast(), test_numpy_dtypes::scope, and scope::value.
Referenced by make_new_python_type(), and make_object_base_type().
|
inline |
Definition at line 181 of file cast.h.
References get_internals(), and internals::registered_types_cpp.
Referenced by get_type_info(), generic_type::initialize(), and type_caster_generic::load_impl().
|
inline |
Definition at line 173 of file cast.h.
References registered_local_types_cpp().
Referenced by get_type_info(), and generic_type::initialize().
|
inline |
Definition at line 457 of file cast.h.
References get_internals(), internals::registered_instances, and values_and_holders::values_and_holders().
Referenced by get_type_override().
|
inline |
Definition at line 469 of file cast.h.
Referenced by TEST_SUBMODULE().
|
inline |
Definition at line 205 of file cast.h.
References get_type_info(), and type_info::type.
Referenced by type::handle_of(), and isinstance_generic().
|
inline |
Return the type info for a given C++ type; on lookup failure can either throw or return nullptr.
Definition at line 190 of file cast.h.
References clean_type_id(), get_global_type_info(), get_local_type_info(), and pybind11_fail().
|
inline |
Gets a single pybind11 type info for a python type.
Returns nullptr if neither the type nor any ancestors are pybind11-registered. Throws an exception if there are multiple bases–use all_type_info
instead if you want to support multiple bases.
Definition at line 164 of file cast.h.
References all_type_info(), and pybind11_fail().
Referenced by type_record::add_base(), bind_map(), bind_vector(), cpp_function::dispatcher(), get_override(), get_type_handle(), implicitly_convertible(), class_< Type >::init_instance(), generic_type::initialize(), cpp_function::initialize_generic(), generic_type::install_buffer_funcs(), make_iterator(), make_key_iterator(), generic_type::mark_parents_nonsimple(), pybind11_getbuffer(), type_caster_generic::src_and_type(), type_caster_base< T >::src_and_type(), and traverse_offset_bases().
|
inline |
Definition at line 403 of file cast.h.
References get_type_handle(), and isinstance().
Definition at line 1769 of file pybind11.h.
References add_patient(), all_type_info(), handle::dec_ref(), and pybind11_fail().
Referenced by type_caster_generic::cast(), and keep_alive_impl().
make_caster<T> load_type | ( | const handle & | handle | ) |
Definition at line 1708 of file cast.h.
References load_type().
type_caster<T, SFINAE>& load_type | ( | type_caster< T, SFINAE > & | conv, |
const handle & | handle | ||
) |
Definition at line 1696 of file cast.h.
References type::handle_of(), and type_caster_generic::load().
Referenced by cast_ref(), and load_type().
|
inline |
Instance creation function for all pybind11 types.
It allocates the internal instance layout for holding C++ objects and holders. Allocation is done lazily (the first time the instance is cast to a reference or pointer), and initialization is done by an __init__
function.
Definition at line 329 of file class.h.
References instance::allocate_layout().
Referenced by type_caster_generic::cast(), and pybind11_object_new().
tuple make_tuple | ( | ) |
Definition at line 1815 of file cast.h.
Referenced by type_caster< Type, enable_if_t< is_eigen_sparse< Type >::value > >::cast(), npy_format_descriptor< T, enable_if_t< array_info< T >::is_array > >::dtype(), main(), and TEST_SUBMODULE().
tuple make_tuple | ( | Args &&... | args_ | ) |
Definition at line 1818 of file cast.h.
References cast(), test_multiple_inheritance::i, handle::ptr(), benchmark::size, and tuple::size().
detail::enable_if_t<!detail::move_never<T>::value, T> move | ( | object && | obj | ) |
Definition at line 1747 of file cast.h.
References type::handle_of().
Referenced by TEST_SUBMODULE().