diff --git a/Util/StringUtil.h b/Util/StringUtil.h index 633feea55..f6b062d48 100644 --- a/Util/StringUtil.h +++ b/Util/StringUtil.h @@ -25,104 +25,103 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef STRINGUTIL_H_ -#define STRINGUTIL_H_ - -#include "../typedefs.h" +#ifndef STRINGUTIL_H +#define STRINGUTIL_H #include - #include #include #include #include #include +#include // precision: position after decimal point // length: maximum number of digits including comma and decimals -template< int length, int precision > -static inline char* printInt( char* buffer, int value ) { +template static inline char *printInt(char *buffer, int value) +{ bool minus = false; - if ( value < 0 ) { + if (value < 0) + { minus = true; value = -value; } buffer += length - 1; - for ( int i = 0; i < precision; i++ ) { - *buffer = '0' + ( value % 10 ); + for (int i = 0; i < precision; i++) + { + *buffer = '0' + (value % 10); value /= 10; buffer--; } *buffer = '.'; buffer--; - for ( int i = precision + 1; i < length; i++ ) { - *buffer = '0' + ( value % 10 ); + for (int i = precision + 1; i < length; i++) + { + *buffer = '0' + (value % 10); value /= 10; - if ( value == 0 ) break; + if (value == 0) + break; buffer--; } - if ( minus ) { + if (minus) + { buffer--; *buffer = '-'; } return buffer; } -static inline void intToString(const int value, std::string & output) { +static inline void intToString(const int value, std::string &output) +{ output.clear(); std::back_insert_iterator sink(output); boost::spirit::karma::generate(sink, boost::spirit::karma::int_, value); } -static inline void int64ToString(const int64_t value, std::string & output) { +static inline void int64ToString(const int64_t value, std::string &output) +{ output.clear(); std::back_insert_iterator sink(output); boost::spirit::karma::generate(sink, boost::spirit::karma::long_long, value); } -static inline int stringToInt(const std::string& input) { - std::string::const_iterator first_digit = input.begin(); - //Delete any trailing white-spaces - while(first_digit != input.end() && std::isspace(*first_digit)) { +static inline int stringToInt(const std::string &input) +{ + auto first_digit = input.begin(); + // Delete any trailing white-spaces + while (first_digit != input.end() && std::isspace(*first_digit)) + { ++first_digit; } int value = 0; - boost::spirit::qi::parse( - first_digit, - input.end(), - boost::spirit::int_, value - ); + boost::spirit::qi::parse(first_digit, input.end(), boost::spirit::int_, value); return value; } -static inline unsigned stringToUint(const std::string& input) { - std::string::const_iterator first_digit = input.begin(); - //Delete any trailing white-spaces - while(first_digit != input.end() && std::isspace(*first_digit)) { +static inline unsigned stringToUint(const std::string &input) +{ + auto first_digit = input.begin(); + // Delete any trailing white-spaces + while (first_digit != input.end() && std::isspace(*first_digit)) + { ++first_digit; } int value = 0; - boost::spirit::qi::parse( - first_digit, - input.end(), - boost::spirit::uint_, value - ); + boost::spirit::qi::parse(first_digit, input.end(), boost::spirit::uint_, value); return value; } -static inline uint64_t stringToInt64(const std::string& input) { - std::string::const_iterator first_digit = input.begin(); - //Delete any trailing white-spaces - while(first_digit != input.end() && std::isspace(*first_digit)) { +static inline uint64_t stringToInt64(const std::string &input) +{ + auto first_digit = input.begin(); + // Delete any trailing white-spaces + while (first_digit != input.end() && std::isspace(*first_digit)) + { ++first_digit; } uint64_t value = 0; - boost::spirit::qi::parse( - first_digit, - input.end(), - boost::spirit::long_long, value - ); + boost::spirit::qi::parse(first_digit, input.end(), boost::spirit::long_long, value); return value; } @@ -138,7 +137,7 @@ static inline double StringToDouble(const char *p) } while (*p >= '0' && *p <= '9') { - r = (r*10.0) + (*p - '0'); + r = (r * 10.0) + (*p - '0'); ++p; } if (*p == '.') @@ -148,7 +147,7 @@ static inline double StringToDouble(const char *p) ++p; while (*p >= '0' && *p <= '9') { - f = (f*10.0) + (*p - '0'); + f = (f * 10.0) + (*p - '0'); ++p; ++n; } @@ -161,110 +160,81 @@ static inline double StringToDouble(const char *p) return r; } -static inline void doubleToString(const double value, std::string & output){ +static inline void doubleToString(const double value, std::string &output) +{ output.clear(); std::back_insert_iterator sink(output); boost::spirit::karma::generate(sink, boost::spirit::karma::double_, value); } -static inline void doubleToStringWithTwoDigitsBehindComma( - const double value, - std::string & output -){ +static inline void doubleToStringWithTwoDigitsBehindComma(const double value, std::string &output) +{ // The largest 32-bit integer is 4294967295, that is 10 chars // On the safe side, add 1 for sign, and 1 for trailing zero - char buffer[12] ; - sprintf(buffer, "%g", value) ; - output = buffer ; + char buffer[12]; + sprintf(buffer, "%g", value); + output = buffer; } -inline void replaceAll( - std::string & s, - const std::string & sub, - const std::string & other -) { - boost::replace_all(s, sub, other); +inline void replaceAll(std::string &s, const std::string &sub, const std::string &other) +{ + boost::replace_all(s, sub, other); } -inline void stringSplit( - const std::string &s, - const char delim, - std::vector& result -) { - boost::split(result, s, boost::is_any_of(std::string(&delim))); -} - -inline std::string EscapeJSONString(const std::string& input) { +inline std::string EscapeJSONString(const std::string &input) +{ std::string output; output.reserve(input.size()); - for( - std::string::const_iterator iter = input.begin(); - iter != input.end(); - ++iter - ) { - switch (iter[0]) { - case '\\': - output += "\\\\"; - break; - case '"': - output += "\\\""; - break; - case '/': - output += "\\/"; - break; - case '\b': - output += "\\b"; - break; - case '\f': - output += "\\f"; - break; - case '\n': - output += "\\n"; - break; - case '\r': - output += "\\r"; - break; - case '\t': - output += "\\t"; - break; - default: - output += *iter; - break; + for (auto iter = input.begin(); iter != input.end(); ++iter) + { + switch (iter[0]) + { + case '\\': + output += "\\\\"; + break; + case '"': + output += "\\\""; + break; + case '/': + output += "\\/"; + break; + case '\b': + output += "\\b"; + break; + case '\f': + output += "\\f"; + break; + case '\n': + output += "\\n"; + break; + case '\r': + output += "\\r"; + break; + case '\t': + output += "\\t"; + break; + default: + output += *iter; + break; } } return output; } -static std::string originals[] = {"&", "\"", "<", ">", "'", "[", "]", "\\"}; -static std::string entities[] = {"&", """, "<", ">", "'", "&91;", "&93;", " \" }; +static std::string originals[] = {"&", "\"", "<", ">", "'", "[", "]", "\\"}; +static std::string entities[] = {"&", """, "<", ">", + "'", "&91;", "&93;", " \"}; -inline std::string HTMLEntitize( const std::string & input) { - std::string result(input); - for(unsigned i = 0; i < sizeof(originals)/sizeof(std::string); ++i) { - replaceAll(result, originals[i], entities[i]); - } - return result; -} - -inline std::string HTMLDeEntitize( std::string & result) { - for(unsigned i = 0; i < sizeof(originals)/sizeof(std::string); ++i) { - replaceAll(result, entities[i], originals[i]); - } - return result; -} - -inline std::size_t URIDecode(const std::string & input, std::string & output) { - std::string::const_iterator src_iter = input.begin(); - output.resize(input.size()+1); +inline std::size_t URIDecode(const std::string &input, std::string &output) +{ + auto src_iter = input.begin(); + output.resize(input.size() + 1); std::size_t decoded_length = 0; - for( decoded_length = 0; src_iter != input.end(); ++decoded_length ) { - if( - src_iter[0] == '%' && - src_iter[1] && - src_iter[2] && - isxdigit(src_iter[1]) && - isxdigit(src_iter[2]) - ) { + for (decoded_length = 0; src_iter != input.end(); ++decoded_length) + { + if (src_iter[0] == '%' && src_iter[1] && src_iter[2] && isxdigit(src_iter[1]) && + isxdigit(src_iter[2])) + { std::string::value_type a = src_iter[1]; std::string::value_type b = src_iter[2]; a -= src_iter[1] < 58 ? 48 : src_iter[1] < 71 ? 55 : 87; @@ -279,29 +249,27 @@ inline std::size_t URIDecode(const std::string & input, std::string & output) { return decoded_length; } -inline std::size_t URIDecodeInPlace(std::string & URI) { - return URIDecode(URI, URI); -} +inline std::size_t URIDecodeInPlace(std::string &URI) { return URIDecode(URI, URI); } -inline bool StringStartsWith( - const std::string & input, - const std::string & prefix -) { +inline bool StringStartsWith(const std::string &input, const std::string &prefix) +{ return boost::starts_with(input, prefix); } -inline std::string GetRandomString() { - char s[128]; - static const char alphanum[] = - "0123456789" - "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "abcdefghijklmnopqrstuvwxyz"; +inline std::string GetRandomString() +{ + std::string s; + s.resize(128); + static const char alphanum[] = "0123456789" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz"; - for (int i = 0; i < 127; ++i) { + for (int i = 0; i < 127; ++i) + { s[i] = alphanum[rand() % (sizeof(alphanum) - 1)]; } s[127] = 0; - return std::string(s); + return s; } -#endif /* STRINGUTIL_H_ */ +#endif // STRINGUTIL_H