@@ -29,13 +29,14 @@ const std::string k_Delimiter = "|--";
2929namespace nx ::core
3030{
3131DataStructure::DataStructure ()
32- : m_IsValid(true )
32+ : BaseGroup(*this , k_TypeName)
33+ , m_IsValid(true )
3334{
3435}
3536
3637DataStructure::DataStructure (const DataStructure& dataStructure)
37- : m_DataObjects (dataStructure.m_DataObjects )
38- , m_RootGroup (dataStructure.m_RootGroup )
38+ : BaseGroup (dataStructure)
39+ , m_DataObjects (dataStructure.m_DataObjects )
3940, m_IsValid(dataStructure.m_IsValid)
4041, m_NextId(dataStructure.m_NextId)
4142{
@@ -54,16 +55,16 @@ DataStructure::DataStructure(const DataStructure& dataStructure)
5455 }
5556 // Updates all DataMaps with the corresponding m_DataObjects pointers.
5657 // Updates all DataObjects with their new DataStructure
57- m_RootGroup. setDataStructure (this );
58+ setDataStructure (this );
5859}
5960
6061DataStructure::DataStructure (DataStructure&& dataStructure) noexcept
61- : m_DataObjects (std::move(dataStructure.m_DataObjects ))
62- , m_RootGroup (std::move(dataStructure.m_RootGroup ))
62+ : BaseGroup (std::move(dataStructure))
63+ , m_DataObjects (std::move(dataStructure.m_DataObjects ))
6364, m_IsValid(dataStructure.m_IsValid)
6465, m_NextId(dataStructure.m_NextId)
6566{
66- m_RootGroup .setDataStructure (this );
67+ getDataMap () .setDataStructure (this );
6768}
6869
6970DataStructure::~DataStructure ()
@@ -98,7 +99,7 @@ size_t DataStructure::getSize() const
9899
99100void DataStructure::clear ()
100101{
101- auto topDataIds = m_RootGroup .getKeys ();
102+ auto topDataIds = getDataMap () .getKeys ();
102103 for (auto dataId : topDataIds)
103104 {
104105 removeData (dataId);
@@ -125,7 +126,7 @@ LinkedPath DataStructure::getLinkedPath(const DataPath& path) const
125126 try
126127 {
127128 std::vector<DataObject::IdType> pathIds;
128- const DataObject* data = m_RootGroup [path[0 ]];
129+ const DataObject* data = getDataMap () [path[0 ]];
129130 const BaseGroup* parent = dynamic_cast <const BaseGroup*>(data);
130131 pathIds.push_back (data->getId ());
131132
@@ -163,7 +164,7 @@ Result<LinkedPath> DataStructure::makePath(const DataPath& path)
163164 {
164165 std::vector<DataObject::IdType> pathIds;
165166 std::string name = path[0 ];
166- const DataObject* data = m_RootGroup [name];
167+ const DataObject* data = getDataMap () [name];
167168 if (data == nullptr )
168169 {
169170 data = nx::core::DataGroup::Create (*this , name);
@@ -272,7 +273,7 @@ DataObject* DataStructure::getData(const DataPath& path)
272273 {
273274 return nullptr ;
274275 }
275- DataObject* targetObject = m_RootGroup [path[0 ]];
276+ DataObject* targetObject = getDataMap () [path[0 ]];
276277 for (usize index = 1 ; index < path.getLength (); index++)
277278 {
278279 if (targetObject == nullptr )
@@ -351,7 +352,7 @@ const DataObject* DataStructure::getData(const DataPath& path) const
351352 {
352353 return nullptr ;
353354 }
354- const DataObject* targetObject = m_RootGroup [path[0 ]];
355+ const DataObject* targetObject = getDataMap () [path[0 ]];
355356 for (usize index = 1 ; index < path.getLength (); index++)
356357 {
357358 if (targetObject == nullptr )
@@ -508,6 +509,11 @@ void DataStructure::dataDeleted(DataObject::IdType identifier, const std::string
508509 notify (msg);
509510}
510511
512+ DataMap& DataStructure::getRootGroup ()
513+ {
514+ return getDataMap ();
515+ }
516+
511517std::vector<DataObject*> DataStructure::getTopLevelData () const
512518{
513519 std::vector<DataObject*> topLevel (m_RootGroup.getSize (), nullptr );
@@ -520,35 +526,26 @@ std::vector<DataObject*> DataStructure::getTopLevelData() const
520526 return topLevel;
521527}
522528
523- const DataMap& DataStructure::getDataMap () const
524- {
525- return m_RootGroup;
526- }
527-
528- DataMap& DataStructure::getRootGroup ()
529- {
530- return m_RootGroup;
531- }
532-
533529bool DataStructure::insertTopLevel (const std::shared_ptr<DataObject>& obj)
534530{
535531 if (obj == nullptr )
536532 {
537533 return false ;
538534 }
539535
540- if (m_RootGroup.contains (obj.get ()) || m_RootGroup.contains (obj->getName ()))
536+ auto & dataMap = getDataMap ();
537+ if (dataMap.contains (obj.get ()) || dataMap.contains (obj->getName ()))
541538 {
542539 return false ;
543540 }
544541
545- return m_RootGroup .insert (obj);
542+ return dataMap .insert (obj);
546543}
547544
548545bool DataStructure::removeTopLevel (DataObject* data)
549546{
550547 std::string name = data->getName ();
551- if (!m_RootGroup .remove (data))
548+ if (!getDataMap () .remove (data))
552549 {
553550 return false ;
554551 }
@@ -585,22 +582,22 @@ bool DataStructure::finishAddingObject(const std::shared_ptr<DataObject>& dataOb
585582
586583DataStructure::Iterator DataStructure::begin ()
587584{
588- return m_RootGroup .begin ();
585+ return getDataMap () .begin ();
589586}
590587
591588DataStructure::Iterator DataStructure::end ()
592589{
593- return m_RootGroup .end ();
590+ return getDataMap () .end ();
594591}
595592
596593DataStructure::ConstIterator DataStructure::begin () const
597594{
598- return m_RootGroup .begin ();
595+ return getDataMap () .begin ();
599596}
600597
601598DataStructure::ConstIterator DataStructure::end () const
602599{
603- return m_RootGroup .end ();
600+ return getDataMap () .end ();
604601}
605602
606603bool DataStructure::insert (const std::shared_ptr<DataObject>& dataObject, const DataPath& dataPath)
@@ -644,7 +641,7 @@ bool DataStructure::insertIntoRoot(const std::shared_ptr<DataObject>& dataObject
644641 return false ;
645642 }
646643
647- if (!m_RootGroup .insert (dataObject))
644+ if (!getDataMap () .insert (dataObject))
648645 {
649646 return false ;
650647 }
@@ -734,7 +731,7 @@ void DataStructure::notify(const std::shared_ptr<AbstractDataStructureMessage>&
734731DataStructure& DataStructure::operator =(const DataStructure& rhs)
735732{
736733 m_DataObjects = rhs.m_DataObjects ;
737- m_RootGroup = rhs.m_RootGroup ;
734+ getDataMap () = rhs.getDataMap () ;
738735 m_IsValid = rhs.m_IsValid ;
739736 m_NextId = rhs.m_NextId ;
740737
@@ -760,17 +757,33 @@ DataStructure& DataStructure::operator=(const DataStructure& rhs)
760757DataStructure& DataStructure::operator =(DataStructure&& rhs) noexcept
761758{
762759 m_DataObjects = std::move (rhs.m_DataObjects );
763- m_RootGroup = std::move (rhs.m_RootGroup );
760+ getDataMap () = std::move (rhs.getDataMap () );
764761 m_IsValid = std::move (rhs.m_IsValid );
765762 m_NextId = std::move (rhs.m_NextId );
766763
767764 applyAllDataStructure ();
768765 return *this ;
769766}
770767
768+ std::shared_ptr<DataObject> DataStructure::deepCopy (const DataPath& copyPath)
769+ {
770+ // DataStructure cannot be contained in another DataStructure...
771+ return nullptr ;
772+ }
773+
774+ DataObject* DataStructure::shallowCopy ()
775+ {
776+ return new DataStructure (*this );
777+ }
778+
779+ std::string DataStructure::getTypeName () const
780+ {
781+ return k_TypeName;
782+ }
783+
771784void DataStructure::applyAllDataStructure ()
772785{
773- m_RootGroup. setDataStructure (this );
786+ setDataStructure (this );
774787}
775788
776789nonstd::expected<void , std::string> DataStructure::validateNumberOfTuples (const std::vector<DataPath>& dataPaths) const
@@ -861,7 +874,7 @@ void DataStructure::resetIds(DataObject::IdType startingId)
861874 dataObjectPtr->checkUpdatedIds (updatedIdsMap);
862875 }
863876 }
864- m_RootGroup .updateIds (updatedIdsMap);
877+ getDataMap () .updateIds (updatedIdsMap);
865878}
866879
867880void DataStructure::exportHierarchyAsGraphViz (std::ostream& outputStream) const
@@ -1015,7 +1028,7 @@ Result<> DataStructure::validateGeometries() const
10151028 * the compile will fail if the unit tests are enabled. Which they are on all the CI machines.
10161029 */
10171030 Result<> result;
1018- for (const auto & dataObject : m_RootGroup )
1031+ for (const auto & dataObject : getDataMap () )
10191032 {
10201033 auto dataObjectType = dataObject.second ->getDataObjectType ();
10211034 if (dataObjectType >= DataObject::Type::IGeometry && dataObjectType <= DataObject::Type::TetrahedralGeom)
0 commit comments