Mercurial > hg > orthanc
diff Core/SerializationToolbox.cpp @ 3991:5d2348b39392
turning toolbox namespaces into classes to control visibility in shared libraries
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 29 May 2020 21:23:57 +0200 |
parents | 09798f2b985f |
children |
line wrap: on
line diff
--- a/Core/SerializationToolbox.cpp Fri May 29 19:43:28 2020 +0200 +++ b/Core/SerializationToolbox.cpp Fri May 29 21:23:57 2020 +0200 @@ -42,406 +42,403 @@ namespace Orthanc { - namespace SerializationToolbox + static bool ParseTagInternal(DicomTag& tag, + const char* name) { - static bool ParseTagInternal(DicomTag& tag, - const char* name) - { #if ORTHANC_ENABLE_DCMTK == 1 - try - { - tag = FromDcmtkBridge::ParseTag(name); - return true; - } - catch (OrthancException&) - { - return false; - } + try + { + tag = FromDcmtkBridge::ParseTag(name); + return true; + } + catch (OrthancException&) + { + return false; + } #else - return DicomTag::ParseHexadecimal(tag, name); + return DicomTag::ParseHexadecimal(tag, name); #endif - } + } - std::string ReadString(const Json::Value& value, - const std::string& field) + std::string SerializationToolbox::ReadString(const Json::Value& value, + const std::string& field) + { + if (value.type() != Json::objectValue || + !value.isMember(field.c_str()) || + value[field.c_str()].type() != Json::stringValue) { - if (value.type() != Json::objectValue || - !value.isMember(field.c_str()) || - value[field.c_str()].type() != Json::stringValue) - { - throw OrthancException(ErrorCode_BadFileFormat, - "String value expected in field: " + field); - } - else - { - return value[field.c_str()].asString(); - } + throw OrthancException(ErrorCode_BadFileFormat, + "String value expected in field: " + field); } + else + { + return value[field.c_str()].asString(); + } + } - int ReadInteger(const Json::Value& value, - const std::string& field) + int SerializationToolbox::ReadInteger(const Json::Value& value, + const std::string& field) + { + if (value.type() != Json::objectValue || + !value.isMember(field.c_str()) || + (value[field.c_str()].type() != Json::intValue && + value[field.c_str()].type() != Json::uintValue)) { - if (value.type() != Json::objectValue || - !value.isMember(field.c_str()) || - (value[field.c_str()].type() != Json::intValue && - value[field.c_str()].type() != Json::uintValue)) - { - throw OrthancException(ErrorCode_BadFileFormat, - "Integer value expected in field: " + field); - } - else - { - return value[field.c_str()].asInt(); - } + throw OrthancException(ErrorCode_BadFileFormat, + "Integer value expected in field: " + field); } + else + { + return value[field.c_str()].asInt(); + } + } - int ReadInteger(const Json::Value& value, - const std::string& field, - int defaultValue) + int SerializationToolbox::ReadInteger(const Json::Value& value, + const std::string& field, + int defaultValue) + { + if (value.isMember(field.c_str())) + { + return ReadInteger(value, field); + } + else { - if (value.isMember(field.c_str())) - { - return ReadInteger(value, field); - } - else - { - return defaultValue; - } + return defaultValue; } + } + + + unsigned int SerializationToolbox::ReadUnsignedInteger(const Json::Value& value, + const std::string& field) + { + int tmp = ReadInteger(value, field); + + if (tmp < 0) + { + throw OrthancException(ErrorCode_BadFileFormat, + "Unsigned integer value expected in field: " + field); + } + else + { + return static_cast<unsigned int>(tmp); + } + } - unsigned int ReadUnsignedInteger(const Json::Value& value, - const std::string& field) + bool SerializationToolbox::ReadBoolean(const Json::Value& value, + const std::string& field) + { + if (value.type() != Json::objectValue || + !value.isMember(field.c_str()) || + value[field.c_str()].type() != Json::booleanValue) { - int tmp = ReadInteger(value, field); + throw OrthancException(ErrorCode_BadFileFormat, + "Boolean value expected in field: " + field); + } + else + { + return value[field.c_str()].asBool(); + } + } - if (tmp < 0) - { - throw OrthancException(ErrorCode_BadFileFormat, - "Unsigned integer value expected in field: " + field); - } - else - { - return static_cast<unsigned int>(tmp); - } + + void SerializationToolbox::ReadArrayOfStrings(std::vector<std::string>& target, + const Json::Value& value, + const std::string& field) + { + if (value.type() != Json::objectValue || + !value.isMember(field.c_str()) || + value[field.c_str()].type() != Json::arrayValue) + { + throw OrthancException(ErrorCode_BadFileFormat, + "List of strings expected in field: " + field); } + const Json::Value& arr = value[field.c_str()]; - bool ReadBoolean(const Json::Value& value, - const std::string& field) + target.resize(arr.size()); + + for (Json::Value::ArrayIndex i = 0; i < arr.size(); i++) { - if (value.type() != Json::objectValue || - !value.isMember(field.c_str()) || - value[field.c_str()].type() != Json::booleanValue) - { - throw OrthancException(ErrorCode_BadFileFormat, - "Boolean value expected in field: " + field); - } - else - { - return value[field.c_str()].asBool(); - } - } - - - void ReadArrayOfStrings(std::vector<std::string>& target, - const Json::Value& value, - const std::string& field) - { - if (value.type() != Json::objectValue || - !value.isMember(field.c_str()) || - value[field.c_str()].type() != Json::arrayValue) + if (arr[i].type() != Json::stringValue) { throw OrthancException(ErrorCode_BadFileFormat, "List of strings expected in field: " + field); } - - const Json::Value& arr = value[field.c_str()]; - - target.resize(arr.size()); - - for (Json::Value::ArrayIndex i = 0; i < arr.size(); i++) + else { - if (arr[i].type() != Json::stringValue) - { - throw OrthancException(ErrorCode_BadFileFormat, - "List of strings expected in field: " + field); - } - else - { - target[i] = arr[i].asString(); - } + target[i] = arr[i].asString(); } } + } - void ReadListOfStrings(std::list<std::string>& target, - const Json::Value& value, - const std::string& field) - { - std::vector<std::string> tmp; - ReadArrayOfStrings(tmp, value, field); + void SerializationToolbox::ReadListOfStrings(std::list<std::string>& target, + const Json::Value& value, + const std::string& field) + { + std::vector<std::string> tmp; + ReadArrayOfStrings(tmp, value, field); - target.clear(); - for (size_t i = 0; i < tmp.size(); i++) - { - target.push_back(tmp[i]); - } + target.clear(); + for (size_t i = 0; i < tmp.size(); i++) + { + target.push_back(tmp[i]); } + } - void ReadSetOfStrings(std::set<std::string>& target, - const Json::Value& value, - const std::string& field) + void SerializationToolbox::ReadSetOfStrings(std::set<std::string>& target, + const Json::Value& value, + const std::string& field) + { + std::vector<std::string> tmp; + ReadArrayOfStrings(tmp, value, field); + + target.clear(); + for (size_t i = 0; i < tmp.size(); i++) { - std::vector<std::string> tmp; - ReadArrayOfStrings(tmp, value, field); + target.insert(tmp[i]); + } + } + - target.clear(); - for (size_t i = 0; i < tmp.size(); i++) - { - target.insert(tmp[i]); - } + void SerializationToolbox::ReadSetOfTags(std::set<DicomTag>& target, + const Json::Value& value, + const std::string& field) + { + if (value.type() != Json::objectValue || + !value.isMember(field.c_str()) || + value[field.c_str()].type() != Json::arrayValue) + { + throw OrthancException(ErrorCode_BadFileFormat, + "Set of DICOM tags expected in field: " + field); } + const Json::Value& arr = value[field.c_str()]; - void ReadSetOfTags(std::set<DicomTag>& target, - const Json::Value& value, - const std::string& field) + target.clear(); + + for (Json::Value::ArrayIndex i = 0; i < arr.size(); i++) { - if (value.type() != Json::objectValue || - !value.isMember(field.c_str()) || - value[field.c_str()].type() != Json::arrayValue) + DicomTag tag(0, 0); + + if (arr[i].type() != Json::stringValue || + !ParseTagInternal(tag, arr[i].asCString())) { throw OrthancException(ErrorCode_BadFileFormat, "Set of DICOM tags expected in field: " + field); } - - const Json::Value& arr = value[field.c_str()]; - - target.clear(); - - for (Json::Value::ArrayIndex i = 0; i < arr.size(); i++) + else { - DicomTag tag(0, 0); - - if (arr[i].type() != Json::stringValue || - !ParseTagInternal(tag, arr[i].asCString())) - { - throw OrthancException(ErrorCode_BadFileFormat, - "Set of DICOM tags expected in field: " + field); - } - else - { - target.insert(tag); - } + target.insert(tag); } } + } - void ReadMapOfStrings(std::map<std::string, std::string>& target, - const Json::Value& value, - const std::string& field) + void SerializationToolbox::ReadMapOfStrings(std::map<std::string, std::string>& target, + const Json::Value& value, + const std::string& field) + { + if (value.type() != Json::objectValue || + !value.isMember(field.c_str()) || + value[field.c_str()].type() != Json::objectValue) { - if (value.type() != Json::objectValue || - !value.isMember(field.c_str()) || - value[field.c_str()].type() != Json::objectValue) + throw OrthancException(ErrorCode_BadFileFormat, + "Associative array of strings to strings expected in field: " + field); + } + + const Json::Value& source = value[field.c_str()]; + + target.clear(); + + Json::Value::Members members = source.getMemberNames(); + + for (size_t i = 0; i < members.size(); i++) + { + const Json::Value& tmp = source[members[i]]; + + if (tmp.type() != Json::stringValue) { throw OrthancException(ErrorCode_BadFileFormat, - "Associative array of strings to strings expected in field: " + field); + "Associative array of string to strings expected in field: " + field); } - - const Json::Value& source = value[field.c_str()]; - - target.clear(); - - Json::Value::Members members = source.getMemberNames(); - - for (size_t i = 0; i < members.size(); i++) + else { - const Json::Value& tmp = source[members[i]]; - - if (tmp.type() != Json::stringValue) - { - throw OrthancException(ErrorCode_BadFileFormat, - "Associative array of string to strings expected in field: " + field); - } - else - { - target[members[i]] = tmp.asString(); - } + target[members[i]] = tmp.asString(); } } + } - void ReadMapOfTags(std::map<DicomTag, std::string>& target, - const Json::Value& value, - const std::string& field) + void SerializationToolbox::ReadMapOfTags(std::map<DicomTag, std::string>& target, + const Json::Value& value, + const std::string& field) + { + if (value.type() != Json::objectValue || + !value.isMember(field.c_str()) || + value[field.c_str()].type() != Json::objectValue) { - if (value.type() != Json::objectValue || - !value.isMember(field.c_str()) || - value[field.c_str()].type() != Json::objectValue) + throw OrthancException(ErrorCode_BadFileFormat, + "Associative array of DICOM tags to strings expected in field: " + field); + } + + const Json::Value& source = value[field.c_str()]; + + target.clear(); + + Json::Value::Members members = source.getMemberNames(); + + for (size_t i = 0; i < members.size(); i++) + { + const Json::Value& tmp = source[members[i]]; + + DicomTag tag(0, 0); + + if (!ParseTagInternal(tag, members[i].c_str()) || + tmp.type() != Json::stringValue) { throw OrthancException(ErrorCode_BadFileFormat, "Associative array of DICOM tags to strings expected in field: " + field); } - - const Json::Value& source = value[field.c_str()]; - - target.clear(); - - Json::Value::Members members = source.getMemberNames(); - - for (size_t i = 0; i < members.size(); i++) - { - const Json::Value& tmp = source[members[i]]; - - DicomTag tag(0, 0); - - if (!ParseTagInternal(tag, members[i].c_str()) || - tmp.type() != Json::stringValue) - { - throw OrthancException(ErrorCode_BadFileFormat, - "Associative array of DICOM tags to strings expected in field: " + field); - } - else - { - target[tag] = tmp.asString(); - } - } - } - - - void WriteArrayOfStrings(Json::Value& target, - const std::vector<std::string>& values, - const std::string& field) - { - if (target.type() != Json::objectValue || - target.isMember(field.c_str())) - { - throw OrthancException(ErrorCode_BadFileFormat); - } - - Json::Value& value = target[field]; - - value = Json::arrayValue; - for (size_t i = 0; i < values.size(); i++) - { - value.append(values[i]); - } - } - - - void WriteListOfStrings(Json::Value& target, - const std::list<std::string>& values, - const std::string& field) - { - if (target.type() != Json::objectValue || - target.isMember(field.c_str())) - { - throw OrthancException(ErrorCode_BadFileFormat); - } - - Json::Value& value = target[field]; - - value = Json::arrayValue; - - for (std::list<std::string>::const_iterator it = values.begin(); - it != values.end(); ++it) - { - value.append(*it); - } - } - - - void WriteSetOfStrings(Json::Value& target, - const std::set<std::string>& values, - const std::string& field) - { - if (target.type() != Json::objectValue || - target.isMember(field.c_str())) + else { - throw OrthancException(ErrorCode_BadFileFormat); - } - - Json::Value& value = target[field]; - - value = Json::arrayValue; - - for (std::set<std::string>::const_iterator it = values.begin(); - it != values.end(); ++it) - { - value.append(*it); - } - } - - - void WriteSetOfTags(Json::Value& target, - const std::set<DicomTag>& tags, - const std::string& field) - { - if (target.type() != Json::objectValue || - target.isMember(field.c_str())) - { - throw OrthancException(ErrorCode_BadFileFormat); - } - - Json::Value& value = target[field]; - - value = Json::arrayValue; - - for (std::set<DicomTag>::const_iterator it = tags.begin(); - it != tags.end(); ++it) - { - value.append(it->Format()); - } - } - - - void WriteMapOfStrings(Json::Value& target, - const std::map<std::string, std::string>& values, - const std::string& field) - { - if (target.type() != Json::objectValue || - target.isMember(field.c_str())) - { - throw OrthancException(ErrorCode_BadFileFormat); - } - - Json::Value& value = target[field]; - - value = Json::objectValue; - - for (std::map<std::string, std::string>::const_iterator - it = values.begin(); it != values.end(); ++it) - { - value[it->first] = it->second; - } - } - - - void WriteMapOfTags(Json::Value& target, - const std::map<DicomTag, std::string>& values, - const std::string& field) - { - if (target.type() != Json::objectValue || - target.isMember(field.c_str())) - { - throw OrthancException(ErrorCode_BadFileFormat); - } - - Json::Value& value = target[field]; - - value = Json::objectValue; - - for (std::map<DicomTag, std::string>::const_iterator - it = values.begin(); it != values.end(); ++it) - { - value[it->first.Format()] = it->second; + target[tag] = tmp.asString(); } } } + + + void SerializationToolbox::WriteArrayOfStrings(Json::Value& target, + const std::vector<std::string>& values, + const std::string& field) + { + if (target.type() != Json::objectValue || + target.isMember(field.c_str())) + { + throw OrthancException(ErrorCode_BadFileFormat); + } + + Json::Value& value = target[field]; + + value = Json::arrayValue; + for (size_t i = 0; i < values.size(); i++) + { + value.append(values[i]); + } + } + + + void SerializationToolbox::WriteListOfStrings(Json::Value& target, + const std::list<std::string>& values, + const std::string& field) + { + if (target.type() != Json::objectValue || + target.isMember(field.c_str())) + { + throw OrthancException(ErrorCode_BadFileFormat); + } + + Json::Value& value = target[field]; + + value = Json::arrayValue; + + for (std::list<std::string>::const_iterator it = values.begin(); + it != values.end(); ++it) + { + value.append(*it); + } + } + + + void SerializationToolbox::WriteSetOfStrings(Json::Value& target, + const std::set<std::string>& values, + const std::string& field) + { + if (target.type() != Json::objectValue || + target.isMember(field.c_str())) + { + throw OrthancException(ErrorCode_BadFileFormat); + } + + Json::Value& value = target[field]; + + value = Json::arrayValue; + + for (std::set<std::string>::const_iterator it = values.begin(); + it != values.end(); ++it) + { + value.append(*it); + } + } + + + void SerializationToolbox::WriteSetOfTags(Json::Value& target, + const std::set<DicomTag>& tags, + const std::string& field) + { + if (target.type() != Json::objectValue || + target.isMember(field.c_str())) + { + throw OrthancException(ErrorCode_BadFileFormat); + } + + Json::Value& value = target[field]; + + value = Json::arrayValue; + + for (std::set<DicomTag>::const_iterator it = tags.begin(); + it != tags.end(); ++it) + { + value.append(it->Format()); + } + } + + + void SerializationToolbox::WriteMapOfStrings(Json::Value& target, + const std::map<std::string, std::string>& values, + const std::string& field) + { + if (target.type() != Json::objectValue || + target.isMember(field.c_str())) + { + throw OrthancException(ErrorCode_BadFileFormat); + } + + Json::Value& value = target[field]; + + value = Json::objectValue; + + for (std::map<std::string, std::string>::const_iterator + it = values.begin(); it != values.end(); ++it) + { + value[it->first] = it->second; + } + } + + + void SerializationToolbox::WriteMapOfTags(Json::Value& target, + const std::map<DicomTag, std::string>& values, + const std::string& field) + { + if (target.type() != Json::objectValue || + target.isMember(field.c_str())) + { + throw OrthancException(ErrorCode_BadFileFormat); + } + + Json::Value& value = target[field]; + + value = Json::objectValue; + + for (std::map<DicomTag, std::string>::const_iterator + it = values.begin(); it != values.end(); ++it) + { + value[it->first.Format()] = it->second; + } + } }