EventAnalysis  1.0.0
WrapperCast.hpp
Go to the documentation of this file.
1 /*
2  * WrapperCast.hpp
3  *
4  * Created on: 04 Dec 2017
5  * Author: Nicola Mori
6  */
7 
8 #ifndef WRAPPERCAST_HPP_
9 #define WRAPPERCAST_HPP_
10 
11 #include "core/InheritsFrom.h"
12 #include "core/ObjectWrapper.h"
13 #include "core/ObserverPtr.h"
14 
15 namespace EA {
16 
31 void *wrapper_cast(ObjectWrapper &wrapper, const std::type_info &typeInfo);
32 
45 template <typename DataType>
46 observer_ptr<typename std::enable_if<std::is_class<DataType>::value, DataType>::type>
48  return observer_ptr<DataType>((DataType *)(wrapper_cast(wrapper, typeid(DataType))));
49 }
50 
59 template <typename DataType>
62  const ObjectWrapperBase *content = wrapper.content.get();
63  if (!content)
64  return nullptr;
65  if (typeid(ObjectWrapperT<DataType>) == typeid(*content)) {
66  return ((ObjectWrapperT<DataType> *)(wrapper.content.get()))->GetObj();
67  }
68  return nullptr;
69 }
70 
71 } // namespace EA
72 #endif /* WRAPPERCAST_HPP_ */
Wrapper class for non-copy-constructible objects.
Definition: ObjectWrapperT.h:125
IncludeFileExc.h IncludeFileExc class declaration.
Definition: Algorithm.h:21
Mother class for data wrapper template class.
Definition: ObjectWrapperBase.h:22
Generic wrapper class.
Definition: ObjectWrapper.h:28
void * wrapper_cast(ObjectWrapper &wrapper, const std::type_info &typeInfo)
Cast function to extract wrapped pointer from wrapper in a type-safe way.
Definition: WrapperCast.cpp:12
std::unique_ptr< ObjectWrapperBase > content
Definition: ObjectWrapper.h:215