4 #include "cafChildArrayFieldAccessor.h"
5 #include "cafChildArrayFieldHandle.h"
6 #include "cafFieldHandle.h"
21 template <
typename DataTypePtr>
22 requires is_pointer<DataTypePtr>
26 using DataType =
typename std::remove_pointer<DataTypePtr>::type;
28 using Ptr = std::shared_ptr<DataType>;
29 using ConstPtr = std::shared_ptr<const DataType>;
30 using FieldDataType = DataTypePtr;
36 : m_fieldDataAccessor( std::make_unique<DirectStorageAccessor>(
this ) )
38 static_assert( std::is_base_of<ObjectHandle, DataType>::value &&
39 "Child Array fields can only contain ObjectHandle-derived objects" );
44 operator std::vector<std::shared_ptr<DataType>>() {
return this->objects(); }
45 operator std::vector<std::shared_ptr<const DataType>>()
const {
return this->objects(); }
47 size_t size()
const override {
return m_fieldDataAccessor->size(); }
48 void clear()
override;
49 ObjectHandle::Ptr
at(
size_t index )
override;
50 std::vector<std::shared_ptr<DataType>> objects();
51 std::vector<std::shared_ptr<const DataType>> objects()
const;
52 void setObjects( std::vector<std::shared_ptr<DataType>>& objects );
56 std::shared_ptr<DataType> operator[](
size_t index )
const;
58 void push_back( std::shared_ptr<DataType> pointer );
60 void insert(
size_t index, std::shared_ptr<DataType> pointer );
61 void insertAt(
size_t index, ObjectHandle::Ptr obj )
override;
62 void erase(
size_t index )
override;
65 std::vector<ObjectHandle::Ptr> childObjects()
override;
66 std::vector<ObjectHandle::ConstPtr> childObjects()
const override;
71 void setAccessor( std::unique_ptr<ChildArrayFieldAccessor> accessor )
override
73 m_fieldDataAccessor = std::move( accessor );
76 virtual std::string
childClassKeyword()
const override {
return std::string( DataType::classKeywordStatic() ); }
84 std::unique_ptr<DataAccessor> m_fieldDataAccessor;
89 #include "cafChildArrayField.inl"
Definition: cafChildArrayFieldAccessor.h:35
Definition: cafChildArrayFieldAccessor.h:58
A non-templated base interface for ChildArrayField<DataType*> Used so we can have pointers to any Chi...
Definition: cafChildArrayFieldHandle.h:18
Field class to handle a collection of Object derived pointers The ChildArrayField will take over owne...
Definition: cafChildArrayField.h:24
~ChildArrayField() override
Implementation of ChildArrayField<>
Definition: cafChildArrayField.inl:14
void setAccessor(std::unique_ptr< ChildArrayFieldAccessor > accessor) override
Set a new accessor.
Definition: cafChildArrayField.h:71
void setObjects(std::vector< std::shared_ptr< DataType >> &objects)
Assign objects to the field, replacing the current child objects.
Definition: cafChildArrayField.inl:114
void insertAt(size_t index, ObjectHandle::Ptr obj) override
Insert an object at a particular index. Ownership will be taken.
Definition: cafChildArrayField.inl:74
void erase(size_t index) override
Removes the pointer at index from the container and deletes the object pointed to.
Definition: cafChildArrayField.inl:103
void removeChildObject(ObjectHandle::ConstPtr object)
Removes all instances of object pointer from the container without deleting the object.
Definition: cafChildArrayField.inl:130
size_t size() const override
Get the number of child objects.
Definition: cafChildArrayField.h:47
void push_back(std::shared_ptr< DataType > pointer)
Assign a shared pointer.
Definition: cafChildArrayField.inl:34
virtual std::string childClassKeyword() const override
Get the class keyword of the contained child(ren)
Definition: cafChildArrayField.h:76
ObjectHandle::Ptr at(size_t index) override
Get a raw pointer to the object at a particular index.
Definition: cafChildArrayField.inl:206
void clear() override
Clears the container.
Definition: cafChildArrayField.inl:91
void insert(size_t index, std::shared_ptr< DataType > pointer)
Definition: cafChildArrayField.inl:62
void push_back_obj(ObjectHandle::Ptr obj) override
Assign a shared pointer.
Definition: cafChildArrayField.inl:45
Definition: cafFieldJsonCapabilitySpecializations.h:19
Main Caffa namespace.
Definition: __init__.py:1
Definition: cafPortableDataType.h:35