# HG changeset patch # User Sebastien Jodogne # Date 1720267034 -7200 # Node ID b4c97c51f9db2cfe3a5fcaa32ddb719f7b28ef49 # Parent 56859a7ffa9915158addd82791346f8aa3fb5cea added FindResponse::Resource::ChildrenInformation diff -r 56859a7ffa99 -r b4c97c51f9db OrthancServer/Sources/Database/FindResponse.cpp --- a/OrthancServer/Sources/Database/FindResponse.cpp Sat Jul 06 01:04:25 2024 +0200 +++ b/OrthancServer/Sources/Database/FindResponse.cpp Sat Jul 06 13:57:14 2024 +0200 @@ -142,14 +142,27 @@ } - std::set& FindResponse::Resource::GetChildrenIdentifiers(ResourceType level) + void FindResponse::ChildrenInformation::AddIdentifier(const std::string& identifier) + { + if (identifiers_.find(identifier) == identifiers_.end()) + { + identifiers_.insert(identifier); + } + else + { + throw OrthancException(ErrorCode_BadSequenceOfCalls); + } + } + + + FindResponse::ChildrenInformation& FindResponse::Resource::GetChildrenInformation(ResourceType level) { switch (level) { case ResourceType_Study: if (level_ == ResourceType_Patient) { - return childrenStudiesIdentifiers_; + return childrenStudiesInformation_; } else { @@ -160,7 +173,7 @@ if (level_ == ResourceType_Patient || level_ == ResourceType_Study) { - return childrenSeriesIdentifiers_; + return childrenSeriesInformation_; } else { @@ -172,7 +185,7 @@ level_ == ResourceType_Study || level_ == ResourceType_Series) { - return childrenInstancesIdentifiers_; + return childrenInstancesInformation_; } else { @@ -185,22 +198,6 @@ } - void FindResponse::Resource::AddChildIdentifier(ResourceType level, - const std::string& identifier) - { - std::set& target = GetChildrenIdentifiers(level); - - if (target.find(identifier) == target.end()) - { - target.insert(identifier); - } - else - { - throw OrthancException(ErrorCode_BadSequenceOfCalls); - } - } - - FindResponse::MainDicomTagsAtLevel& FindResponse::Resource::GetMainDicomTagsAtLevel(ResourceType level) { if (!IsResourceLevelAboveOrEqual(level, level_)) @@ -423,7 +420,7 @@ const std::string& FindResponse::Resource::GetOneInstanceIdentifier() const { - const std::set& instances = GetChildrenIdentifiers(ResourceType_Instance); + const std::set& instances = GetChildrenInformation(ResourceType_Instance).GetIdentifiers(); if (instances.size() == 0) { @@ -531,7 +528,7 @@ { if (request.GetChildrenRetrieveSpecification(levels[i]).IsRetrieveIdentifiers()) { - const std::set& ids = GetChildrenIdentifiers(levels[i]); + const std::set& ids = GetChildrenInformation(levels[i]).GetIdentifiers(); Json::Value v = Json::arrayValue; for (std::set::const_iterator it = ids.begin(); it != ids.end(); ++it) diff -r 56859a7ffa99 -r b4c97c51f9db OrthancServer/Sources/Database/FindResponse.h --- a/OrthancServer/Sources/Database/FindResponse.h Sat Jul 06 01:04:25 2024 +0200 +++ b/OrthancServer/Sources/Database/FindResponse.h Sat Jul 06 13:57:14 2024 +0200 @@ -66,6 +66,20 @@ void Export(DicomMap& target) const; }; + class ChildrenInformation : public boost::noncopyable + { + private: + std::set identifiers_; + + public: + void AddIdentifier(const std::string& identifier); + + const std::set& GetIdentifiers() const + { + return identifiers_; + } + }; + public: class Resource : public boost::noncopyable @@ -85,9 +99,9 @@ std::map metadataStudy_; std::map metadataSeries_; std::map metadataInstance_; - std::set childrenStudiesIdentifiers_; - std::set childrenSeriesIdentifiers_; - std::set childrenInstancesIdentifiers_; + ChildrenInformation childrenStudiesInformation_; + ChildrenInformation childrenSeriesInformation_; + ChildrenInformation childrenInstancesInformation_; std::set labels_; std::map attachments_; ChildrenMetadata childrenMetadata_; @@ -99,7 +113,12 @@ return const_cast(*this).GetMainDicomTagsAtLevel(level); } - std::set& GetChildrenIdentifiers(ResourceType level); + ChildrenInformation& GetChildrenInformation(ResourceType level); + + const ChildrenInformation& GetChildrenInformation(ResourceType level) const + { + return const_cast(*this).GetChildrenInformation(level); + } public: Resource(ResourceType level, @@ -171,11 +190,14 @@ MetadataType metadata) const; void AddChildIdentifier(ResourceType level, - const std::string& childId); + const std::string& childId) + { + GetChildrenInformation(level).AddIdentifier(childId);; + } const std::set& GetChildrenIdentifiers(ResourceType level) const { - return const_cast(*this).GetChildrenIdentifiers(level); + return GetChildrenInformation(level).GetIdentifiers(); } void AddLabel(const std::string& label);