Mercurial > hg > orthanc
comparison Core/EnumerationDictionary.h @ 2967:146eaed9b02c
avoid boost::bad_lexical_cast exception in happy path
author | am@osimis.io |
---|---|
date | Wed, 05 Dec 2018 16:30:11 +0100 |
parents | a191bbd55a2b |
children | e62e296a5714 |
comparison
equal
deleted
inserted
replaced
2966:10c610e80b15 | 2967:146eaed9b02c |
---|---|
35 | 35 |
36 #include "OrthancException.h" | 36 #include "OrthancException.h" |
37 | 37 |
38 #include "Toolbox.h" | 38 #include "Toolbox.h" |
39 #include <boost/lexical_cast.hpp> | 39 #include <boost/lexical_cast.hpp> |
40 #include <boost/lexical_cast/try_lexical_convert.hpp> | |
40 #include <string> | 41 #include <string> |
41 #include <map> | 42 #include <map> |
42 | 43 |
43 namespace Orthanc | 44 namespace Orthanc |
44 { | 45 { |
82 stringToEnumeration_[boost::lexical_cast<std::string>(static_cast<int>(value))] = value; | 83 stringToEnumeration_[boost::lexical_cast<std::string>(static_cast<int>(value))] = value; |
83 } | 84 } |
84 | 85 |
85 Enumeration Translate(const std::string& str) const | 86 Enumeration Translate(const std::string& str) const |
86 { | 87 { |
87 try | 88 int numericalValue; // at this stage, we don't know if str is an alias or a numerical value |
89 if (boost::conversion::try_lexical_convert<int>(str, numericalValue)) | |
88 { | 90 { |
89 return static_cast<Enumeration>(boost::lexical_cast<int>(str)); | 91 return static_cast<Enumeration>(numericalValue); |
90 } | |
91 catch (boost::bad_lexical_cast&) | |
92 { | |
93 } | 92 } |
94 | 93 |
95 typename StringToEnumeration::const_iterator | 94 typename StringToEnumeration::const_iterator |
96 found = stringToEnumeration_.find(str); | 95 found = stringToEnumeration_.find(str); |
97 | 96 |