Mercurial > hg > orthanc-stone
diff OrthancStone/Sources/Toolbox/SortedFrames.cpp @ 1599:73cd85d7da6a
SortedFrames::LookupSopInstanceUid()
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 28 Oct 2020 10:55:45 +0100 |
parents | 8563ea5d8ae4 |
children | b253b79906fa |
line wrap: on
line diff
--- a/OrthancStone/Sources/Toolbox/SortedFrames.cpp Mon Oct 26 20:49:28 2020 +0100 +++ b/OrthancStone/Sources/Toolbox/SortedFrames.cpp Wed Oct 28 10:55:45 2020 +0100 @@ -144,6 +144,7 @@ delete instances_[i]; } + instancesIndex_.clear(); studyInstanceUid_.clear(); seriesInstanceUid_.clear(); frames_.clear(); @@ -155,9 +156,10 @@ { std::unique_ptr<Instance> instance(new Instance(tags)); - std::string studyInstanceUid, seriesInstanceUid; + std::string studyInstanceUid, seriesInstanceUid, sopInstanceUid; if (!tags.LookupStringValue(studyInstanceUid, Orthanc::DICOM_TAG_STUDY_INSTANCE_UID, false) || - !tags.LookupStringValue(seriesInstanceUid, Orthanc::DICOM_TAG_SERIES_INSTANCE_UID, false)) + !tags.LookupStringValue(seriesInstanceUid, Orthanc::DICOM_TAG_SERIES_INSTANCE_UID, false) || + !tags.LookupStringValue(sopInstanceUid, Orthanc::DICOM_TAG_SOP_INSTANCE_UID, false)) { throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); } @@ -177,12 +179,37 @@ } } + if (instancesIndex_.find(sopInstanceUid) != instancesIndex_.end()) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange, + "Cannot register twice the same SOP Instance UID"); + } + + instancesIndex_[sopInstanceUid] = instances_.size(); + instances_.push_back(instance.release()); sorted_ = false; frames_.clear(); } + bool SortedFrames::LookupSopInstanceUid(size_t& instanceIndex, + const std::string& sopInstanceUid) const + { + InstancesIndex::const_iterator found = instancesIndex_.find(sopInstanceUid); + + if (found == instancesIndex_.end()) + { + return false; + } + else + { + instanceIndex = found->second; + return true; + } + } + + void SortedFrames::AddFramesOfInstance(std::set<size_t>& remainingInstances, size_t index) {