@ -21,8 +21,9 @@
# include "phonenumbers/stringutil.h"
# include "absl/strings/str_cat.h"
# include "absl/strings/str_replace.h"
# include "absl/strings/substitute.h"
# include "absl/strings/match.h"
namespace i18n {
namespace phonenumbers {
@ -49,8 +50,7 @@ string SimpleItoa(int64 n) {
}
bool HasPrefixString ( const string & s , const string & prefix ) {
return s . size ( ) > = prefix . size ( ) & &
equal ( s . begin ( ) , s . begin ( ) + prefix . size ( ) , prefix . begin ( ) ) ;
return absl : : StartsWith ( s , prefix ) ;
}
size_t FindNth ( const string & s , char c , int n ) {
@ -65,33 +65,12 @@ size_t FindNth(const string& s, char c, int n) {
return pos ;
}
void SplitStringUsing ( const string & s , const string & delimiter ,
void SplitStringUsing ( const string & s , char delimiter ,
vector < string > * result ) {
assert ( result ) ;
size_t start_pos = 0 ;
size_t find_pos = string : : npos ;
if ( delimiter . empty ( ) ) {
return ;
}
while ( ( find_pos = s . find ( delimiter , start_pos ) ) ! = string : : npos ) {
const string substring = s . substr ( start_pos , find_pos - start_pos ) ;
if ( ! substring . empty ( ) ) {
result - > push_back ( substring ) ;
}
start_pos = find_pos + delimiter . length ( ) ;
}
if ( start_pos ! = s . length ( ) ) {
result - > push_back ( s . substr ( start_pos ) ) ;
}
}
void StripString ( string * s , const char * remove , char replacewith ) {
const char * str_start = s - > c_str ( ) ;
const char * str = str_start ;
for ( str = strpbrk ( str , remove ) ;
str ! = NULL ;
str = strpbrk ( str + 1 , remove ) ) {
( * s ) [ str - str_start ] = replacewith ;
for ( absl : : string_view split_piece : absl : : StrSplit (
s , absl : : ByChar ( delimiter ) , absl : : SkipEmpty ( ) ) ) {
result - > push_back ( std : : string ( split_piece ) ) ;
}
}
@ -104,17 +83,12 @@ bool TryStripPrefixString(const string& in, const string& prefix, string* out) {
}
bool HasSuffixString ( const string & s , const string & suffix ) {
if ( s . length ( ) < suffix . length ( ) ) {
return false ;
}
return s . compare ( s . length ( ) - suffix . length ( ) , suffix . length ( ) , suffix ) = = 0 ;
return absl : : EndsWith ( s , suffix ) ;
}
template < typename T >
void GenericAtoi ( const string & s , T * out ) {
stringstream stream ;
stream < < s ;
stream > > * out ;
absl : : SimpleAtoi ( s , out ) ;
}
void safe_strto32 ( const string & s , int32 * n ) {
@ -143,47 +117,20 @@ void strrmm(string* s, const string& chars) {
int GlobalReplaceSubstring ( const string & substring ,
const string & replacement ,
string * s ) {
assert ( s ! = NULL ) ;
if ( s - > empty ( ) | | substring . empty ( ) )
return 0 ;
string tmp ;
int num_replacements = 0 ;
int pos = 0 ;
for ( size_t match_pos = s - > find ( substring . data ( ) , pos , substring . length ( ) ) ;
match_pos ! = string : : npos ;
pos = static_cast < int > ( match_pos + substring . length ( ) ) ,
match_pos = s - > find ( substring . data ( ) , pos , substring . length ( ) ) ) {
+ + num_replacements ;
// Append the original content before the match.
tmp . append ( * s , pos , match_pos - pos ) ;
// Append the replacement for the match.
tmp . append ( replacement . begin ( ) , replacement . end ( ) ) ;
}
// Append the content after the last match.
tmp . append ( * s , pos , s - > length ( ) - pos ) ;
s - > swap ( tmp ) ;
return num_replacements ;
return absl : : StrReplaceAll ( { { substring , replacement } } , s ) ; ;
}
// StringHolder class
StringHolder : : StringHolder ( const string & s )
: string_ ( & s ) ,
cstring_ ( NULL ) ,
len_ ( s . size ( ) )
: absl : : AlphaNum ( s )
{ }
StringHolder : : StringHolder ( const char * s )
: string_ ( NULL ) ,
cstring_ ( s ) ,
len_ ( std : : strlen ( s ) )
StringHolder : : StringHolder ( const char * cp )
: absl : : AlphaNum ( cp )
{ }
StringHolder : : StringHolder ( uint64 n )
: converted_string_ ( SimpleItoa ( n ) ) ,
string_ ( & converted_string_ ) ,
cstring_ ( NULL ) ,
len_ ( converted_string_ . length ( ) )
: absl : : AlphaNum ( n )
{ }
StringHolder : : ~ StringHolder ( ) { }
@ -192,9 +139,9 @@ StringHolder::~StringHolder() {}
// Implements s += sh; (s: string, sh: StringHolder)
string & operator + = ( string & lhs , const StringHolder & rhs ) {
const string * const s = rhs . GetString ( ) ;
if ( s ) {
lhs + = * s ;
absl : : string_view s = rhs . GetString ( ) ; ;
if ( s . size ( ) ! = 0 ) {
lhs + = s . data ( ) ;
} else {
const char * const cs = rhs . GetCString ( ) ;
if ( cs )
@ -204,87 +151,36 @@ string& operator+=(string& lhs, const StringHolder& rhs) {
}
string StrCat ( const StringHolder & s1 , const StringHolder & s2 ) {
string result ;
result . reserve ( s1 . Length ( ) + s2 . Length ( ) + 1 ) ;
result + = s1 ;
result + = s2 ;
return result ;
return absl : : StrCat ( s1 , s2 ) ;
}
string StrCat ( const StringHolder & s1 , const StringHolder & s2 ,
const StringHolder & s3 ) {
string result ;
result . reserve ( s1 . Length ( ) + s2 . Length ( ) + s3 . Length ( ) + 1 ) ;
result + = s1 ;
result + = s2 ;
result + = s3 ;
return result ;
return absl : : StrCat ( s1 , s2 , s3 ) ;
}
string StrCat ( const StringHolder & s1 , const StringHolder & s2 ,
const StringHolder & s3 , const StringHolder & s4 ) {
string result ;
result . reserve ( s1 . Length ( ) + s2 . Length ( ) + s3 . Length ( ) + s4 . Length ( ) + 1 ) ;
result + = s1 ;
result + = s2 ;
result + = s3 ;
result + = s4 ;
return result ;
return absl : : StrCat ( s1 , s2 , s3 , s4 ) ;
}
string StrCat ( const StringHolder & s1 , const StringHolder & s2 ,
const StringHolder & s3 , const StringHolder & s4 ,
const StringHolder & s5 ) {
string result ;
result . reserve ( s1 . Length ( ) + s2 . Length ( ) + s3 . Length ( ) + s4 . Length ( ) +
s5 . Length ( ) + 1 ) ;
result + = s1 ;
result + = s2 ;
result + = s3 ;
result + = s4 ;
result + = s5 ;
return result ;
return absl : : StrCat ( s1 , s2 , s3 , s4 , s5 ) ;
}
string StrCat ( const StringHolder & s1 , const StringHolder & s2 ,
const StringHolder & s3 , const StringHolder & s4 ,
const StringHolder & s5 , const StringHolder & s6 ) {
string result ;
result . reserve ( s1 . Length ( ) + s2 . Length ( ) + s3 . Length ( ) + s4 . Length ( ) +
s5 . Length ( ) + s6 . Length ( ) + 1 ) ;
result + = s1 ;
result + = s2 ;
result + = s3 ;
result + = s4 ;
result + = s5 ;
result + = s6 ;
return result ;
return absl : : StrCat ( s1 , s2 , s3 , s4 , s5 , s6 ) ;
}
string StrCat ( const StringHolder & s1 , const StringHolder & s2 ,
const StringHolder & s3 , const StringHolder & s4 ,
const StringHolder & s5 , const StringHolder & s6 ,
const StringHolder & s7 ) {
string result ;
result . reserve ( s1 . Length ( ) + s2 . Length ( ) + s3 . Length ( ) + s4 . Length ( ) +
s5 . Length ( ) + s6 . Length ( ) + s7 . Length ( ) + 1 ) ;
result + = s1 ;
result + = s2 ;
result + = s3 ;
result + = s4 ;
result + = s5 ;
result + = s6 ;
result + = s7 ;
return result ;
return absl : : StrCat ( s1 , s2 , s3 , s4 , s5 , s6 , s7 ) ;
}
string StrCat ( const StringHolder & s1 , const StringHolder & s2 ,
@ -294,16 +190,7 @@ string StrCat(const StringHolder& s1, const StringHolder& s2,
string result ;
result . reserve ( s1 . Length ( ) + s2 . Length ( ) + s3 . Length ( ) + s4 . Length ( ) +
s5 . Length ( ) + s6 . Length ( ) + s7 . Length ( ) + s8 . Length ( ) + 1 ) ;
result + = s1 ;
result + = s2 ;
result + = s3 ;
result + = s4 ;
result + = s5 ;
result + = s6 ;
result + = s7 ;
result + = s8 ;
return result ;
return absl : : StrCat ( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 ) ;
}
string StrCat ( const StringHolder & s1 , const StringHolder & s2 ,
@ -311,21 +198,7 @@ string StrCat(const StringHolder& s1, const StringHolder& s2,
const StringHolder & s5 , const StringHolder & s6 ,
const StringHolder & s7 , const StringHolder & s8 ,
const StringHolder & s9 ) {
string result ;
result . reserve ( s1 . Length ( ) + s2 . Length ( ) + s3 . Length ( ) + s4 . Length ( ) +
s5 . Length ( ) + s6 . Length ( ) + s7 . Length ( ) + s8 . Length ( ) +
s9 . Length ( ) + 1 ) ;
result + = s1 ;
result + = s2 ;
result + = s3 ;
result + = s4 ;
result + = s5 ;
result + = s6 ;
result + = s7 ;
result + = s8 ;
result + = s9 ;
return result ;
return absl : : StrCat ( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 ) ;
}
string StrCat ( const StringHolder & s1 , const StringHolder & s2 ,
@ -334,23 +207,7 @@ string StrCat(const StringHolder& s1, const StringHolder& s2,
const StringHolder & s7 , const StringHolder & s8 ,
const StringHolder & s9 , const StringHolder & s10 ,
const StringHolder & s11 ) {
string result ;
result . reserve ( s1 . Length ( ) + s2 . Length ( ) + s3 . Length ( ) + s4 . Length ( ) +
s5 . Length ( ) + s6 . Length ( ) + s7 . Length ( ) + s8 . Length ( ) +
s9 . Length ( ) + s10 . Length ( ) + s11 . Length ( ) ) ;
result + = s1 ;
result + = s2 ;
result + = s3 ;
result + = s4 ;
result + = s5 ;
result + = s6 ;
result + = s7 ;
result + = s8 ;
result + = s9 ;
result + = s10 ;
result + = s11 ;
return result ;
return absl : : StrCat ( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 ) ;
}
string StrCat ( const StringHolder & s1 , const StringHolder & s2 ,
@ -359,24 +216,7 @@ string StrCat(const StringHolder& s1, const StringHolder& s2,
const StringHolder & s7 , const StringHolder & s8 ,
const StringHolder & s9 , const StringHolder & s10 ,
const StringHolder & s11 , const StringHolder & s12 ) {
string result ;
result . reserve ( s1 . Length ( ) + s2 . Length ( ) + s3 . Length ( ) + s4 . Length ( ) +
s5 . Length ( ) + s6 . Length ( ) + s7 . Length ( ) + s8 . Length ( ) +
s9 . Length ( ) + s10 . Length ( ) + s11 . Length ( ) + s12 . Length ( ) ) ;
result + = s1 ;
result + = s2 ;
result + = s3 ;
result + = s4 ;
result + = s5 ;
result + = s6 ;
result + = s7 ;
result + = s8 ;
result + = s9 ;
result + = s10 ;
result + = s11 ;
result + = s12 ;
return result ;
return absl : : StrCat ( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 ) ;
}
string StrCat ( const StringHolder & s1 , const StringHolder & s2 ,
@ -386,26 +226,8 @@ string StrCat(const StringHolder& s1, const StringHolder& s2,
const StringHolder & s9 , const StringHolder & s10 ,
const StringHolder & s11 , const StringHolder & s12 ,
const StringHolder & s13 ) {
string result ;
result . reserve ( s1 . Length ( ) + s2 . Length ( ) + s3 . Length ( ) + s4 . Length ( ) +
s5 . Length ( ) + s6 . Length ( ) + s7 . Length ( ) + s8 . Length ( ) +
s9 . Length ( ) + s10 . Length ( ) + s11 . Length ( ) + s12 . Length ( ) +
s13 . Length ( ) ) ;
result + = s1 ;
result + = s2 ;
result + = s3 ;
result + = s4 ;
result + = s5 ;
result + = s6 ;
result + = s7 ;
result + = s8 ;
result + = s9 ;
result + = s10 ;
result + = s11 ;
result + = s12 ;
result + = s13 ;
return result ;
return absl : : StrCat ( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 ,
s13 ) ;
}
string StrCat ( const StringHolder & s1 , const StringHolder & s2 ,
@ -415,27 +237,8 @@ string StrCat(const StringHolder& s1, const StringHolder& s2,
const StringHolder & s9 , const StringHolder & s10 ,
const StringHolder & s11 , const StringHolder & s12 ,
const StringHolder & s13 , const StringHolder & s14 ) {
string result ;
result . reserve ( s1 . Length ( ) + s2 . Length ( ) + s3 . Length ( ) + s4 . Length ( ) +
s5 . Length ( ) + s6 . Length ( ) + s7 . Length ( ) + s8 . Length ( ) +
s9 . Length ( ) + s10 . Length ( ) + s11 . Length ( ) + s12 . Length ( ) +
s13 . Length ( ) + s14 . Length ( ) ) ;
result + = s1 ;
result + = s2 ;
result + = s3 ;
result + = s4 ;
result + = s5 ;
result + = s6 ;
result + = s7 ;
result + = s8 ;
result + = s9 ;
result + = s10 ;
result + = s11 ;
result + = s12 ;
result + = s13 ;
result + = s14 ;
return result ;
return absl : : StrCat ( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 ,
s13 , s14 ) ;
}
string StrCat ( const StringHolder & s1 , const StringHolder & s2 ,
@ -446,28 +249,8 @@ string StrCat(const StringHolder& s1, const StringHolder& s2,
const StringHolder & s11 , const StringHolder & s12 ,
const StringHolder & s13 , const StringHolder & s14 ,
const StringHolder & s15 ) {
string result ;
result . reserve ( s1 . Length ( ) + s2 . Length ( ) + s3 . Length ( ) + s4 . Length ( ) +
s5 . Length ( ) + s6 . Length ( ) + s7 . Length ( ) + s8 . Length ( ) +
s9 . Length ( ) + s10 . Length ( ) + s11 . Length ( ) + s12 . Length ( ) +
s13 . Length ( ) + s14 . Length ( ) + s15 . Length ( ) ) ;
result + = s1 ;
result + = s2 ;
result + = s3 ;
result + = s4 ;
result + = s5 ;
result + = s6 ;
result + = s7 ;
result + = s8 ;
result + = s9 ;
result + = s10 ;
result + = s11 ;
result + = s12 ;
result + = s13 ;
result + = s14 ;
result + = s15 ;
return result ;
return absl : : StrCat ( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 ,
s13 , s14 , s15 ) ;
}
string StrCat ( const StringHolder & s1 , const StringHolder & s2 ,
@ -478,83 +261,35 @@ string StrCat(const StringHolder& s1, const StringHolder& s2,
const StringHolder & s11 , const StringHolder & s12 ,
const StringHolder & s13 , const StringHolder & s14 ,
const StringHolder & s15 , const StringHolder & s16 ) {
string result ;
result . reserve ( s1 . Length ( ) + s2 . Length ( ) + s3 . Length ( ) + s4 . Length ( ) +
s5 . Length ( ) + s6 . Length ( ) + s7 . Length ( ) + s8 . Length ( ) +
s9 . Length ( ) + s10 . Length ( ) + s11 . Length ( ) + s12 . Length ( ) +
s13 . Length ( ) + s14 . Length ( ) + s15 . Length ( ) + s16 . Length ( ) ) ;
result + = s1 ;
result + = s2 ;
result + = s3 ;
result + = s4 ;
result + = s5 ;
result + = s6 ;
result + = s7 ;
result + = s8 ;
result + = s9 ;
result + = s10 ;
result + = s11 ;
result + = s12 ;
result + = s13 ;
result + = s14 ;
result + = s15 ;
result + = s16 ;
return result ;
return absl : : StrCat ( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 ,
s13 , s14 , s15 , s16 ) ;
}
// StrAppend
void StrAppend ( string * dest , const StringHolder & s1 ) {
assert ( dest ) ;
dest - > reserve ( dest - > length ( ) + s1 . Length ( ) + 1 ) ;
* dest + = s1 ;
absl : : StrAppend ( dest , s1 ) ;
}
void StrAppend ( string * dest , const StringHolder & s1 , const StringHolder & s2 ) {
assert ( dest ) ;
dest - > reserve ( dest - > length ( ) + s1 . Length ( ) + s2 . Length ( ) + 1 ) ;
* dest + = s1 ;
* dest + = s2 ;
absl : : StrAppend ( dest , s1 , s2 ) ;
}
void StrAppend ( string * dest , const StringHolder & s1 , const StringHolder & s2 ,
const StringHolder & s3 ) {
assert ( dest ) ;
dest - > reserve ( dest - > length ( ) + s1 . Length ( ) + s2 . Length ( ) + s3 . Length ( ) + 1 ) ;
* dest + = s1 ;
* dest + = s2 ;
* dest + = s3 ;
absl : : StrAppend ( dest , s1 , s2 , s3 ) ;
}
void StrAppend ( string * dest , const StringHolder & s1 , const StringHolder & s2 ,
const StringHolder & s3 , const StringHolder & s4 ) {
assert ( dest ) ;
dest - > reserve ( dest - > length ( ) + s1 . Length ( ) + s2 . Length ( ) + s3 . Length ( ) +
s4 . Length ( ) + 1 ) ;
* dest + = s1 ;
* dest + = s2 ;
* dest + = s3 ;
* dest + = s4 ;
absl : : StrAppend ( dest , s1 , s2 , s3 , s4 ) ;
}
void StrAppend ( string * dest , const StringHolder & s1 , const StringHolder & s2 ,
const StringHolder & s3 , const StringHolder & s4 ,
const StringHolder & s5 ) {
assert ( dest ) ;
dest - > reserve ( dest - > length ( ) + s1 . Length ( ) + s2 . Length ( ) + s3 . Length ( ) +
s4 . Length ( ) + s5 . Length ( ) + 1 ) ;
* dest + = s1 ;
* dest + = s2 ;
* dest + = s3 ;
* dest + = s4 ;
* dest + = s5 ;
absl : : StrAppend ( dest , s1 , s2 , s3 , s4 , s5 ) ;
}
} // namespace phonenumbers
} // namespace i18n
} // namespace i18n