Mercurial > hg > orthanc-stone
diff Resources/Orthanc/Plugins/Samples/Common/DicomDatasetReader.cpp @ 32:517c46f527cd
sync
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 19 Dec 2016 11:00:23 +0100 |
parents | 9aace933cb64 |
children | 7207a407bcd8 |
line wrap: on
line diff
--- a/Resources/Orthanc/Plugins/Samples/Common/DicomDatasetReader.cpp Fri Dec 16 15:41:20 2016 +0100 +++ b/Resources/Orthanc/Plugins/Samples/Common/DicomDatasetReader.cpp Mon Dec 19 11:00:23 2016 +0100 @@ -68,20 +68,31 @@ } - DicomDatasetReader::DicomDatasetReader(IDicomDataset* dataset) : // takes ownership + DicomDatasetReader::DicomDatasetReader(const IDicomDataset& dataset) : dataset_(dataset) { - if (dataset == NULL) + } + + + std::string DicomDatasetReader::GetStringValue(const DicomPath& path, + const std::string& defaultValue) const + { + std::string s; + if (dataset_.GetStringValue(s, path)) { - ORTHANC_PLUGINS_THROW_EXCEPTION(ParameterOutOfRange); + return s; + } + else + { + return defaultValue; } } - + std::string DicomDatasetReader::GetMandatoryStringValue(const DicomPath& path) const { std::string s; - if (dataset_->GetStringValue(s, path)) + if (dataset_.GetStringValue(s, path)) { return s; } @@ -92,12 +103,24 @@ } - int DicomDatasetReader::GetIntegerValue(const DicomPath& path) + template <typename T> + static bool GetValueInternal(T& target, + const IDicomDataset& dataset, + const DicomPath& path) { try { - std::string s = StripSpaces(GetMandatoryStringValue(path)); - return boost::lexical_cast<int>(s); + std::string s; + + if (dataset.GetStringValue(s, path)) + { + target = boost::lexical_cast<T>(StripSpaces(s)); + return true; + } + else + { + return false; + } } catch (boost::bad_lexical_cast&) { @@ -106,17 +129,44 @@ } - unsigned int DicomDatasetReader::GetUnsignedIntegerValue(const DicomPath& path) + bool DicomDatasetReader::GetIntegerValue(int& target, + const DicomPath& path) const { - int value = GetIntegerValue(path); + return GetValueInternal<int>(target, dataset_, path); + } + - if (value >= 0) + bool DicomDatasetReader::GetUnsignedIntegerValue(unsigned int& target, + const DicomPath& path) const + { + int value; + + if (!GetIntegerValue(value, path)) { - return static_cast<unsigned int>(value); + return false; + } + else if (value >= 0) + { + target = static_cast<unsigned int>(value); + return true; } else { ORTHANC_PLUGINS_THROW_EXCEPTION(ParameterOutOfRange); } } + + + bool DicomDatasetReader::GetFloatValue(float& target, + const DicomPath& path) const + { + return GetValueInternal<float>(target, dataset_, path); + } + + + bool DicomDatasetReader::GetDoubleValue(double& target, + const DicomPath& path) const + { + return GetValueInternal<double>(target, dataset_, path); + } }