EventAnalysis  1.3.0
ObjectWrapper.h
Go to the documentation of this file.
1 /*
2  * ObjectWrapper.h
3  *
4  * Created on: 26 Apr 2013
5  * Author: Nicola Mori
6  */
7 
10 #ifndef OBJECTWRAPPER_H_
11 #define OBJECTWRAPPER_H_
12 
13 #include "core/ObjectWrapperT.h"
14 
15 namespace EA {
16 
29 public:
36  ObjectWrapper();
37 
42  ObjectWrapper(const ObjectWrapper &w);
43 
49 
57  template <typename DataType> ObjectWrapper(observer_ptr<DataType> ptr);
58 
66  template <typename DataType> ObjectWrapper(std::shared_ptr<DataType> ptr);
67 
75  template <typename DataType> ObjectWrapper(std::unique_ptr<DataType> ptr);
76 
84  ObjectWrapper(const char *address);
85 
93  ObjectWrapper(char *address);
94 
104  template <typename DataType> ObjectWrapper &operator=(DataType *rhs);
105 
115  template <typename DataType> ObjectWrapper &operator=(DataType &rhs);
116 
126  template <typename DataType> ObjectWrapper &operator=(std::shared_ptr<DataType> rhs);
127 
137  template <typename DataType> ObjectWrapper &operator=(std::unique_ptr<DataType> rhs);
138 
150 
162 
170  bool operator==(const ObjectWrapper &rhs) const;
171 
179  bool operator!=(const ObjectWrapper &rhs) const { return !(operator==(rhs)); }
180 
187  void WrapNothing();
188 
193  bool WrapsSomething();
194 
200 
211  const std::type_info &GetObjectType() {
212  if (content)
213  return content->GetObjType();
214  else
215  return typeid(void);
216  }
217 
231  bool WrapObject(void *address, const std::type_info &type, bool own, bool isPolymorphic, bool isConst);
232 
233 private:
234  std::unique_ptr<ObjectWrapperBase> content;
235 
236  template <typename DataType> friend observer_ptr<DataType> wrapper_cast(ObjectWrapper &);
237 
238  friend void *wrapper_cast(ObjectWrapper &, const std::type_info &, bool);
239 };
240 
241 } // namespace EA
242 
243 #include "core/ObjectWrapper.hpp"
244 #include "core/WrapperCast.hpp"
245 
246 #endif /* OBJECTWRAPPER_H_ */
ObjectWrapper CloneObject()
Creates a clone of the wrapped object and returns a wrapper wrapping it.
Definition: ObjectWrapper.cpp:57
void WrapNothing()
Remove the wrapped object.
Definition: ObjectWrapper.cpp:50
ObjectWrapper & operator=(DataType *rhs)
Assignment operator.
Definition: ObjectWrapper.hpp:25
bool operator==(const ObjectWrapper &rhs) const
Equal-to operator.
Definition: ObjectWrapper.cpp:45
bool operator!=(const ObjectWrapper &rhs) const
Not-equal-to operator.
Definition: ObjectWrapper.h:179
bool WrapObject(void *address, const std::type_info &type, bool own, bool isPolymorphic, bool isConst)
Wrap the object at the given address.
Definition: ObjectWrapper.cpp:65
ObjectWrapper()
Default constructor.
Definition: ObjectWrapper.cpp:12
friend observer_ptr< DataType > wrapper_cast(ObjectWrapper &)
Cast function to extract wrapped pointer from wrapper in a type-safe way.
Definition: WrapperCast.hpp:45
IncludeFileExc.h IncludeFileExc class declaration.
Definition: Algorithm.h:21
bool WrapsSomething()
Checks if the wrapper wraps something.
Definition: ObjectWrapper.cpp:55
Generic wrapper class.
Definition: ObjectWrapper.h:28
const std::type_info & GetObjectType()
Get the wrapped type.
Definition: ObjectWrapper.h:211
std::unique_ptr< ObjectWrapperBase > content
Definition: ObjectWrapper.h:234