diff options
Diffstat (limited to 'util/text.h')
-rw-r--r-- | util/text.h | 45 |
1 files changed, 23 insertions, 22 deletions
diff --git a/util/text.h b/util/text.h index 3b311fa4ff4..fc2da214097 100644 --- a/util/text.h +++ b/util/text.h @@ -33,57 +33,57 @@ #pragma once namespace mongo { - + class StringSplitter { public: - /** @param big the string to be split + /** @param big the string to be split @param splitter the delimiter */ StringSplitter( const char * big , const char * splitter ) - : _big( big ) , _splitter( splitter ){ + : _big( big ) , _splitter( splitter ) { } /** @return true if more to be taken via next() */ - bool more(){ + bool more() { return _big[0]; } /** get next split string fragment */ - string next(){ + string next() { const char * foo = strstr( _big , _splitter ); - if ( foo ){ + if ( foo ) { string s( _big , foo - _big ); _big = foo + 1; while ( *_big && strstr( _big , _splitter ) == _big ) _big++; return s; } - + string s = _big; _big += strlen( _big ); return s; } - - void split( vector<string>& l ){ - while ( more() ){ + + void split( vector<string>& l ) { + while ( more() ) { l.push_back( next() ); } } - - vector<string> split(){ + + vector<string> split() { vector<string> l; split( l ); return l; } - static vector<string> split( const string& big , const string& splitter ){ + static vector<string> split( const string& big , const string& splitter ) { StringSplitter ss( big.c_str() , splitter.c_str() ); return ss.split(); } - static string join( vector<string>& l , const string& split ){ + static string join( vector<string>& l , const string& split ) { stringstream ss; - for ( unsigned i=0; i<l.size(); i++ ){ + for ( unsigned i=0; i<l.size(); i++ ) { if ( i > 0 ) ss << split; ss << l[i]; @@ -95,20 +95,20 @@ namespace mongo { const char * _big; const char * _splitter; }; - + /* This doesn't defend against ALL bad UTF8, but it will guarantee that the * string can be converted to sequence of codepoints. However, it doesn't * guarantee that the codepoints are valid. */ bool isValidUTF8(const char *s); - inline bool isValidUTF8(string s) { return isValidUTF8(s.c_str()); } + inline bool isValidUTF8(string s) { return isValidUTF8(s.c_str()); } #if defined(_WIN32) std::string toUtf8String(const std::wstring& wide); std::wstring toWideString(const char *s); - + /* like toWideString but UNICODE macro sensitive */ # if !defined(_UNICODE) #error temp error @@ -116,9 +116,9 @@ namespace mongo { # else inline std::wstring toNativeString(const char *s) { return toWideString(s); } # endif - + #endif - + // expect that n contains a base ten number and nothing else after it // NOTE win version hasn't been tested directly inline long long parseLL( const char *n ) { @@ -129,11 +129,12 @@ namespace mongo { errno = 0; ret = strtoll( n, &endPtr, 10 ); uassert( 13305, "could not convert string to long long", *endPtr == 0 && errno == 0 ); -#elif _MSC_VER>=1600 // 1600 is VS2k10 1500 is VS2k8 +#elif _MSC_VER>=1600 // 1600 is VS2k10 1500 is VS2k8 size_t endLen = 0; try { ret = stoll( n, &endLen, 10 ); - } catch ( ... ) { + } + catch ( ... ) { endLen = 0; } uassert( 13306, "could not convert string to long long", endLen != 0 && n[ endLen ] == 0 ); |