From 4e08add2d98d246f1a5bd97305dd7da8ed761d5b Mon Sep 17 00:00:00 2001 From: Scott Cantor Date: Sun, 4 Dec 2011 02:52:42 +0000 Subject: [PATCH] Replace int converstion code --- configure.ac | 1 + xmltooling/exceptions.cpp | 85 ++++++++++++----------------------------------- 2 files changed, 23 insertions(+), 63 deletions(-) diff --git a/configure.ac b/configure.ac index 2ae97ff..0f257ac 100644 --- a/configure.ac +++ b/configure.ac @@ -96,6 +96,7 @@ AC_CXX_REQUIRE_STL # Boost BOOST_REQUIRE BOOST_BIND +BOOST_CONVERSION BOOST_LAMBDA BOOST_PTR_CONTAINER BOOST_STRING_ALGO diff --git a/xmltooling/exceptions.cpp b/xmltooling/exceptions.cpp index d72c27a..6ff78ca 100644 --- a/xmltooling/exceptions.cpp +++ b/xmltooling/exceptions.cpp @@ -34,10 +34,12 @@ #include #include #include +#include #include using namespace xmltooling; using namespace xercesc; +using namespace boost; using namespace std; using xmlconstants::XMLTOOLING_NS; @@ -105,88 +107,45 @@ void XMLToolingException::setMessage(const char* msg) m_processedmsg.erase(); } -inline const char* get_digit_character() -{ - static const char s_characters[19] = - { - '9' - , '8' - , '7' - , '6' - , '5' - , '4' - , '3' - , '2' - , '1' - , '0' - , '1' - , '2' - , '3' - , '4' - , '5' - , '6' - , '7' - , '8' - , '9' - }; - static const char *s_mid = s_characters + 9; - - return s_mid; -} - -inline const char* unsigned_integer_to_string(char* buf, size_t cchBuf, size_t i) -{ - char* psz=buf + cchBuf - 1; // Set psz to last char - *psz = 0; // Set terminating null - - do { - size_t lsd = i % 10; // Get least significant - // digit - - i /= 10; // Prepare for next most - // significant digit - - --psz; // Move back - - *psz = get_digit_character()[lsd]; // Place the digit - - } while(i!=0 && psz>buf); - - return psz; -} - void XMLToolingException::addProperties(const params& p) { m_processedmsg.erase(); - map::size_type i=m_params.size()+1; - char buf[20]; + map::size_type i = m_params.size() + 1; const vector& v=p.get(); - for (vector::const_iterator ci=v.begin(); ci!=v.end(); ci++) { - m_params[unsigned_integer_to_string(buf,sizeof(buf),i++)] = *ci; + for (vector::const_iterator ci = v.begin(); ci != v.end(); ++ci) { + try { + m_params[lexical_cast(i++)] = *ci; + } + catch (bad_lexical_cast&) { + } } } void XMLToolingException::addProperties(const namedparams& p) { m_processedmsg.erase(); - const vector& v=p.get(); - for (vector::const_iterator ci=v.begin(); ci!=v.end(); ci++) { + const vector& v = p.get(); + for (vector::const_iterator ci = v.begin(); ci != v.end(); ++ci) { m_params.erase(*ci); m_params[*ci] = *(ci+1); - ci++; // advance past name to value, then loop will advance it again + ++ci; // advance past name to value, then loop will advance it again } } const char* XMLToolingException::getProperty(unsigned int index) const { - char buf[20]; - map::const_iterator i=m_params.find(unsigned_integer_to_string(buf,sizeof(buf),index)); - return (i==m_params.end()) ? nullptr : i->second.c_str(); + try { + map::const_iterator i = m_params.find(lexical_cast(index)); + return (i==m_params.end()) ? nullptr : i->second.c_str(); + } + catch (bad_lexical_cast&) { + return nullptr; + } } const char* XMLToolingException::getProperty(const char* name) const { - map::const_iterator i=m_params.find(name); + map::const_iterator i = m_params.find(name); return (i==m_params.end()) ? nullptr : i->second.c_str(); } @@ -254,7 +213,7 @@ string XMLToolingException::toString() const if (msg) xml_encode(xml, "", msg, ""); const URLEncoder* encoder = XMLToolingConfig::getConfig().getURLEncoder(); - for (map::const_iterator i=m_params.begin(); i!=m_params.end(); i++) { + for (map::const_iterator i = m_params.begin(); i != m_params.end(); ++i) { xml_encode(xml, "", encoder->encode(i->second.c_str()).c_str(), ""); } @@ -266,7 +225,7 @@ string XMLToolingException::toQueryString() const { string q; const URLEncoder* enc = XMLToolingConfig::getConfig().getURLEncoder(); - for (map::const_iterator i=m_params.begin(); i!=m_params.end(); i++) { + for (map::const_iterator i = m_params.begin(); i != m_params.end(); ++i) { if (!q.empty()) q += '&'; q = q + i->first + '=' + enc->encode(i->second.c_str()); -- 2.1.4