4 #include "cafChildFieldAccessor.h"
5 #include "cafChildFieldHandle.h"
6 #include "cafFieldHandle.h"
7 #include "cafObjectHandle.h"
8 #include "cafVisitor.h"
12 #include <type_traits>
24 template <
typename DataTypePtr>
25 requires is_pointer<DataTypePtr>
29 using DataType =
typename std::remove_pointer<DataTypePtr>::type;
30 using Ptr = std::shared_ptr<DataType>;
31 using ConstPtr = std::shared_ptr<const DataType>;
32 using FieldDataType = DataTypePtr;
36 : m_fieldDataAccessor( std::make_unique<ChildFieldDirectStorageAccessor>(
this ) )
38 static_assert( DerivesFromObjectHandle<DataType> &&
39 "Child fields can only contain ObjectHandle-derived objects" );
47 bool operator==( ObjectHandle::ConstPtr
object )
const;
52 std::shared_ptr<DataType> object() {
return std::dynamic_pointer_cast<DataType>( m_fieldDataAccessor->object() ); }
53 std::shared_ptr<const DataType> object()
const
55 return std::dynamic_pointer_cast<const DataType>( m_fieldDataAccessor->object() );
57 void setObject( Ptr
object );
60 operator std::shared_ptr<DataType>() {
return this->object(); }
61 operator std::shared_ptr<const DataType>()
const {
return this->object(); }
63 operator bool()
const {
return !!this->object(); }
66 std::shared_ptr<DataType> deepCloneObject()
const;
67 void deepCopyObjectFrom( std::shared_ptr<const DataType> copyFrom );
69 std::shared_ptr<DataType> operator->() {
return this->object(); }
70 std::shared_ptr<const DataType> operator->()
const {
return this->object(); }
72 std::shared_ptr<DataType> operator()() {
return this->object(); }
73 std::shared_ptr<const DataType> operator()()
const {
return this->object(); }
76 std::vector<ObjectHandle::Ptr> childObjects()
override;
77 std::vector<ObjectHandle::ConstPtr> childObjects()
const override;
78 void clear()
override;
79 void removeChildObject( ObjectHandle::ConstPtr
object );
80 void setChildObject( ObjectHandle::Ptr
object );
84 void setAccessor( std::unique_ptr<ChildFieldAccessor> accessor )
override
86 m_fieldDataAccessor = std::move( accessor );
89 std::string
childClassKeyword()
const override {
return std::string( DataType::classKeywordStatic() ); }
96 mutable std::unique_ptr<ChildFieldAccessor> m_fieldDataAccessor;
101 #include "cafChildField.inl"
Definition: cafChildFieldHandle.h:50
Field class to handle a pointer to a caffa Object.
Definition: cafChildField.h:27
std::string childClassKeyword() const override
Get the class keyword of the contained child(ren)
Definition: cafChildField.h:89
Definition: cafFieldJsonCapabilitySpecializations.h:19
Definition: cafObjectHandle.h:55
Main Caffa namespace.
Definition: __init__.py:1
Definition: cafPortableDataType.h:35