29 std::array<std::string_view, MAX_TAGS>
tags = {};
46 std::string_view
name,
49 const std::array<std::string_view, N>& tagArr
56 for (
size_t i = 0; i < N && i <
MAX_TAGS; ++i) {
57 def.
tags[i] = tagArr[i];
70 std::vector<std::string>
tags;
103 std::string
getParent(
const std::string& name)
const;
104 std::vector<std::string>
getSubtypes(
const std::string& name)
const;
105 std::vector<std::string>
getAncestors(
const std::string& name)
const;
108 bool isSubtype(
const std::string& child,
const std::string& parent)
const;
109 bool isCompatible(
const std::string& outputType,
const std::string& inputType)
const;
112 std::string
toJson()
const;
129 std::map<std::string, FrameTypeInfo>
types_;
151 info.
tags.push_back(std::string(def.
tags[i]));
182#define REGISTER_FRAME_TYPE(FrameClass) \
184 static bool _registered_ft_##FrameClass = []() { \
185 apra::FrameTypeInfo info; \
186 info.name = std::string(FrameClass::Metadata::name); \
187 info.parent = std::string(FrameClass::Metadata::parent); \
188 info.description = std::string(FrameClass::Metadata::description); \
190 for (const auto& tag : FrameClass::Metadata::tags) { \
191 info.tags.push_back(std::string(tag)); \
194 apra::FrameTypeRegistry::instance().registerFrameType(std::move(info)); \
Definition FrameTypeRegistry.h:86
bool hasFrameType(const std::string &name) const
Definition FrameTypeRegistry.cpp:44
FrameTypeRegistry & operator=(const FrameTypeRegistry &)=delete
bool cacheValid_
Definition FrameTypeRegistry.h:134
~FrameTypeRegistry()=default
std::string toMarkdown() const
Definition FrameTypeRegistry.cpp:207
void registerFrameType(FrameTypeInfo info)
Definition FrameTypeRegistry.cpp:28
FrameTypeRegistry(const FrameTypeRegistry &)=delete
std::vector< std::string > getAllFrameTypes() const
Definition FrameTypeRegistry.cpp:58
std::string toJson() const
Definition FrameTypeRegistry.cpp:166
bool isCompatible(const std::string &outputType, const std::string &inputType) const
Definition FrameTypeRegistry.cpp:155
bool isSubtype(const std::string &child, const std::string &parent) const
Definition FrameTypeRegistry.cpp:146
std::vector< std::string > getSubtypes(const std::string &name) const
Definition FrameTypeRegistry.cpp:98
std::map< std::string, FrameTypeInfo > types_
Definition FrameTypeRegistry.h:129
void invalidateCache() const
Definition FrameTypeRegistry.cpp:269
std::vector< std::string > getFrameTypesByTag(const std::string &tag) const
Definition FrameTypeRegistry.cpp:72
std::mutex mutex_
Definition FrameTypeRegistry.h:130
std::vector< std::string > getAncestors(const std::string &name) const
Definition FrameTypeRegistry.cpp:111
const FrameTypeInfo * getFrameType(const std::string &name) const
Definition FrameTypeRegistry.cpp:49
static FrameTypeRegistry & instance()
Definition FrameTypeRegistry.cpp:19
FrameTypeRegistry()=default
std::string getParent(const std::string &name) const
Definition FrameTypeRegistry.cpp:89
std::map< std::string, std::vector< std::string > > ancestorCache_
Definition FrameTypeRegistry.h:133
void clear()
Definition FrameTypeRegistry.cpp:258
size_t size() const
Definition FrameTypeRegistry.cpp:264
FrameTypeInfo toFrameTypeInfo(const FrameTypeDef &def)
Definition FrameTypeRegistry.h:144
Definition FrameTypeRegistrations.h:10
Definition FrameTypeRegistry.h:33
std::string_view type
Definition FrameTypeRegistry.h:35
bool required
Definition FrameTypeRegistry.h:36
std::string_view name
Definition FrameTypeRegistry.h:34
std::string_view description
Definition FrameTypeRegistry.h:37
Definition FrameTypeRegistry.h:22
size_t tag_count
Definition FrameTypeRegistry.h:30
std::string_view name
Definition FrameTypeRegistry.h:23
std::string_view description
Definition FrameTypeRegistry.h:25
std::array< std::string_view, MAX_TAGS > tags
Definition FrameTypeRegistry.h:29
size_t attr_count
Definition FrameTypeRegistry.h:41
std::string_view parent
Definition FrameTypeRegistry.h:24
std::array< AttrDef, MAX_ATTRS > attributes
Definition FrameTypeRegistry.h:40
static constexpr size_t MAX_TAGS
Definition FrameTypeRegistry.h:28
static constexpr size_t MAX_ATTRS
Definition FrameTypeRegistry.h:39
static constexpr FrameTypeDef create(std::string_view name, std::string_view parent, std::string_view description, const std::array< std::string_view, N > &tagArr)
Definition FrameTypeRegistry.h:45
Definition FrameTypeRegistry.h:72
std::vector< std::string > enum_values
Definition FrameTypeRegistry.h:76
bool required
Definition FrameTypeRegistry.h:75
std::string type
Definition FrameTypeRegistry.h:74
std::string description
Definition FrameTypeRegistry.h:77
std::string name
Definition FrameTypeRegistry.h:73
Definition FrameTypeRegistry.h:66
std::vector< AttrInfo > attributes
Definition FrameTypeRegistry.h:79
std::vector< std::string > tags
Definition FrameTypeRegistry.h:70
std::string parent
Definition FrameTypeRegistry.h:68
std::string description
Definition FrameTypeRegistry.h:69
std::string name
Definition FrameTypeRegistry.h:67