19#if defined(ARMNN_POLYMORPHIC_CAST_TESTABLE)
20# define ARMNN_POLYMORPHIC_CAST_CHECK_METHOD(cond) ConditionalThrow<std::bad_cast>(cond)
22# define ARMNN_POLYMORPHIC_CAST_CHECK_METHOD(cond) ARMNN_ASSERT(cond)
26#if !defined(NDEBUG) || defined(ARMNN_POLYMORPHIC_CAST_TESTABLE)
27# define ARMNN_POLYMORPHIC_CAST_CHECK(cond) ARMNN_POLYMORPHIC_CAST_CHECK_METHOD(cond)
29# define ARMNN_POLYMORPHIC_CAST_CHECK(cond)
36template <
class T1,
class T2>
39 return std::static_pointer_cast<T1>(sp);
43template <
class T1,
class T2>
46 return std::dynamic_pointer_cast<T1>(sp);
50template<
class T1,
class T2>
53 return static_cast<T1*
>(ptr);
57template<
class T1,
class T2>
60 return dynamic_cast<T1*
>(ptr);
73template<
typename DestType,
typename SourceType>
76 static_assert(std::is_pointer<DestType>::value,
77 "PolymorphicDowncast only works with pointer types.");
80 return static_cast<DestType
>(value);
92template<
typename DestType,
typename SourceType>
#define ARMNN_POLYMORPHIC_CAST_CHECK(cond)
std::shared_ptr< T1 > DynamicPointerCast(const std::shared_ptr< T2 > &sp)
std::shared_ptr< T1 > StaticPointerCast(const std::shared_ptr< T2 > &sp)
Copyright (c) 2021 ARM Limited and Contributors.
auto PolymorphicPointerDowncast(const SourceType &value)
Polymorphic downcast for shared pointers and build in pointers.
DestType PolymorphicDowncast(SourceType *value)
Polymorphic downcast for build in pointers only.