NAP
rttiutilities.h
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4 
5 #pragma once
6 
7 // Local Includes
8 #include "path.h"
9 #include "factory.h"
10 #include "unresolvedpointer.h"
11 
12 // External Includes
13 #include <rtti/rtti.h>
14 #include <vector>
15 #include <unordered_set>
16 #include <utility/dllexport.h>
17 
18 namespace nap
19 {
20  namespace rtti
21  {
22  class Object;
23 
27  struct NAPAPI ObjectLink
28  {
29  const rtti::Object* mSource; // The object the link originates from
30  Path mSourcePath; // The RTTIPath to the pointer property linking to the object
31  rtti::Object* mTarget; // The object being linked to (i.e. target of the pointer)
32  };
33 
34  using ObjectList = std::vector<Object*>;
35  using ObjectSet = std::unordered_set<Object*>;
36 
42  void NAPAPI copyObject(const rtti::Object& srcObject, rtti::Object& dstObject);
43 
50  template<typename T>
51  std::unique_ptr<T> cloneObject(const T& object, rtti::Factory& factory)
52  {
53  T* copy = static_cast<T*>(factory.create(object.get_type()));
54  copyObject(object, *copy);
55  return std::unique_ptr<T>(copy);
56  }
57 
64  bool NAPAPI areObjectsEqual(const rtti::Object& objectA, const rtti::Object& objectB, const rtti::UnresolvedPointerList& unresolvedPointers = UnresolvedPointerList());
65 
71  void NAPAPI findFileLinks(const rtti::Object& object, std::vector<std::string>& fileLinks);
72 
78  void NAPAPI findObjectLinks(const rtti::Object& object, std::vector<ObjectLink>& objectLinks);
79 
89  int NAPAPI findUnresolvedPointer(const UnresolvedPointerList& unresolvedPointers, const Object* object, const rtti::Path& path);
90 
96  void NAPAPI getPointeesRecursive(const rtti::Object& object, std::vector<rtti::Object*>& pointees);
97 
104  uint64_t NAPAPI getRTTIVersion(const rtti::TypeInfo& type);
105 
111  void NAPAPI getDerivedTypesRecursive(const rtti::TypeInfo& baseType, std::vector<rtti::TypeInfo>& types);
112 
117  bool NAPAPI hasDescription(const rtti::Property& property);
118 
123  NAPAPI const char* getDescription(const rtti::Property& property);
124 
130  bool NAPAPI hasDescription(const rtti::TypeInfo& type);
131 
136  NAPAPI const char* getDescription(const rtti::TypeInfo& type);
137 
138  } //< End Namespace RTTI
139 
140 }
nap::rtti::findUnresolvedPointer
int NAPAPI findUnresolvedPointer(const UnresolvedPointerList &unresolvedPointers, const Object *object, const rtti::Path &path)
nap::rtti::getPointeesRecursive
void NAPAPI getPointeesRecursive(const rtti::Object &object, std::vector< rtti::Object * > &pointees)
nap::rtti::hasDescription
bool NAPAPI hasDescription(const rtti::Property &property)
nap::rtti::Object
Definition: object.h:30
nap::rtti::getDerivedTypesRecursive
void NAPAPI getDerivedTypesRecursive(const rtti::TypeInfo &baseType, std::vector< rtti::TypeInfo > &types)
nap::rtti::findFileLinks
void NAPAPI findFileLinks(const rtti::Object &object, std::vector< std::string > &fileLinks)
nap::rtti::cloneObject
std::unique_ptr< T > cloneObject(const T &object, rtti::Factory &factory)
Definition: rttiutilities.h:51
nap::rtti::ObjectSet
std::unordered_set< Object * > ObjectSet
Definition: rttiutilities.h:35
nap::rtti::Property
rttr::property Property
Definition: typeinfo.h:142
nap::rtti::getDescription
const NAPAPI char * getDescription(const rtti::Property &property)
nap::rtti::Factory::create
Object * create(rtti::TypeInfo typeInfo)
nap::rtti::areObjectsEqual
bool NAPAPI areObjectsEqual(const rtti::Object &objectA, const rtti::Object &objectB, const rtti::UnresolvedPointerList &unresolvedPointers=UnresolvedPointerList())
nap::rtti::Factory
Definition: factory.h:78
nap::rtti::getRTTIVersion
uint64_t NAPAPI getRTTIVersion(const rtti::TypeInfo &type)
nap::rtti::ObjectList
std::vector< Object * > ObjectList
Definition: rttiutilities.h:34
nap
Definition: templateapp.h:17
nap::rtti::Path
Definition: path.h:409
nap::rtti::UnresolvedPointerList
std::vector< UnresolvedPointer > UnresolvedPointerList
Definition: unresolvedpointer.h:51
nap::rtti::TypeInfo
rttr::type TypeInfo
Definition: typeinfo.h:140
nap::rtti::copyObject
void NAPAPI copyObject(const rtti::Object &srcObject, rtti::Object &dstObject)
nap::rtti::findObjectLinks
void NAPAPI findObjectLinks(const rtti::Object &object, std::vector< ObjectLink > &objectLinks)