void* pointer_holder<Pointer, Value>::holds(type_info dst_t, bool null_ptr_only) { typedef typename boost::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); }
void* pointer_holder<Pointer, Value>::holds(type_info dst_t) { if (dst_t == python::type_id<Pointer>()) return &this->m_p; Value* p = get_pointer(this->m_p); if (p == 0) return 0; if (void* wrapped = holds_wrapped(dst_t, p, p)) return wrapped; type_info src_t = python::type_id<Value>(); return src_t == dst_t ? p : find_dynamic_type(p, src_t, dst_t); }
void* pointer_holder_back_reference<Pointer, Value>::holds(type_info dst_t) { if (dst_t == python::type_id<Pointer>()) 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); }