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