26 #include "cafAssert.h" 27 #include "cafFieldHandle.h" 28 #include "cafMethodHandle.h" 29 #include "cafStringTools.h" 34 #include <string_view> 35 #include <type_traits> 40 class FieldCapability;
50 using InheritanceStackType = std::vector<std::string>;
56 static std::string classKeywordStatic() {
return "ObjectHandle"; }
57 virtual std::string classKeyword()
const {
return classKeywordStatic(); }
59 virtual InheritanceStackType classInheritanceStack()
const {
return { classKeywordStatic() }; }
69 auto stack = classInheritanceStack();
70 CAFFA_ASSERT( stack.size() >= 2 );
74 static bool matchesClassKeyword(
const std::string& classKeyword,
const InheritanceStackType& inheritanceStack )
76 return std::any_of( inheritanceStack.begin(),
77 inheritanceStack.end(),
78 [&classKeyword](
const std::string& testKeyword ) {
return classKeyword == testKeyword; } );
81 static constexpr
bool isValidCharacter(
char c )
83 return caffa::StringTools::isalpha( c ) || caffa::StringTools::isdigit( c ) || c ==
'_' || c ==
':';
92 if ( type ==
"keyword" )
return false;
94 if ( caffa::StringTools::isdigit( type[0] ) )
return false;
96 auto end = std::find( type.begin(), type.end(),
'\0' );
98 auto validCount = std::count_if( type.cbegin(), end, ObjectHandle::isValidCharacter );
100 std::count_if( type.cbegin(), end, [](
auto c ) {
return !ObjectHandle::isValidCharacter( c ); } );
102 return validCount > 0u && invalidCount == 0u;
105 virtual std::string classDocumentation()
const {
return ""; }
111 std::vector<FieldHandle*>
fields()
const;
117 std::vector<MethodHandle*>
methods()
const;
133 const std::string& uuid()
const;
134 void setUuid(
const std::string& );
170 std::map<std::string, FieldHandle*> m_fields;
173 std::map<std::string, MethodHandle*> m_methods;
176 template <
typename T>
177 concept DerivesFromObjectHandle = std::is_base_of<ObjectHandle, T>::value;
179 template <
typename T>
183 template <
typename T>
188 template <
typename T>
Definition: cafObjectHandle.h:180
void accept(Inspector *visitor) const
Definition: cafObjectHandle.cpp:126
Definition: cafMethodHandle.h:52
virtual void initAfterRead()
Definition: cafObjectHandle.h:138
std::vector< MethodHandle * > methods() const
Definition: cafObjectHandle.cpp:67
void addField(FieldHandle *field, const std::string &keyword)
Definition: cafObjectHandle.cpp:80
std::vector< FieldHandle * > fields() const
Definition: cafObjectHandle.cpp:54
Definition: cafVisitor.h:49
Definition: cafObjectHandle.h:47
Base class for all fields, making it possible to handle them generically.
Definition: cafFieldHandle.h:19
void addMethod(MethodHandle *method, const std::string &keyword)
Definition: cafObjectHandle.cpp:95
FieldHandle * findField(const std::string &keyword) const
Definition: cafObjectHandle.cpp:108
static constexpr bool isValidKeyword(const std::string_view &type)
Definition: cafObjectHandle.h:90
std::string parentClassKeyword() const
Get the parent class keyword.
Definition: cafObjectHandle.h:65
Definition: cafVisitor.h:32
MethodHandle * findMethod(const std::string &keyword) const
Definition: cafObjectHandle.cpp:117
Main Caffa namespace.
Definition: cafApplication.h:30