9 #include "resourceptr.h"
10 #include "rtti/objectptr.h"
17 constexpr
const char*
members =
"Members";
39 mMemberType(memberType),
40 mMembersPropertyName(std::move(membersName)),
41 mChildrenPropertyName(std::move(childrenName)) { }
51 rttr::property getMembersProperty()
const;
56 rttr::property getChildrenProperty()
const;
70 std::string mMembersPropertyName;
71 std::string mChildrenPropertyName;
90 Group() :
IGroup(RTTI_OF(T), group::members, group::children) { }
143 std::unordered_map<std::string, T*> mMap;
162 mMap.reserve(mMembers.size());
163 for (
const auto& member : mMembers)
165 mMap.emplace(std::make_pair(member->mID, member.get()));
174 auto it = mMap.find(
id);
175 if (it != mMap.end())
185 if (
object !=
nullptr)
189 for (
const auto& child : mChildren)
192 if (
object !=
nullptr)
209 return rtti::ObjectPtr<M>(findObjectRecursive(
id));
219 #define DEFINE_GROUP_1(Type) \
220 RTTI_BEGIN_CLASS(Type) \
221 RTTI_PROPERTY(nap::group::members, &Type::mMembers, nap::rtti::EPropertyMetaData::Embedded | nap::rtti::EPropertyMetaData::ReadOnly) \
222 RTTI_PROPERTY(nap::group::children, &Type::mChildren, nap::rtti::EPropertyMetaData::Embedded | nap::rtti::EPropertyMetaData::ReadOnly) \
226 #define DEFINE_GROUP_2(Type, ObjectType) \
227 RTTI_BEGIN_CLASS(Type, "Groups together a set of '"#ObjectType"' objects") \
228 RTTI_PROPERTY(nap::group::members, &Type::mMembers, nap::rtti::EPropertyMetaData::Embedded | nap::rtti::EPropertyMetaData::ReadOnly) \
229 RTTI_PROPERTY(nap::group::children, &Type::mChildren, nap::rtti::EPropertyMetaData::Embedded | nap::rtti::EPropertyMetaData::ReadOnly) \
232 #define GET_DEFINE_GROUP_MACRO(_1,_2,NAME,...) NAME
240 #define DEFINE_GROUP(...) GET_DEFINE_GROUP_MACRO(__VA_ARGS__, DEFINE_GROUP_2, DEFINE_GROUP_1)(__VA_ARGS__)