summaryrefslogtreecommitdiff
path: root/src/mongo/base/string_data-inl.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/base/string_data-inl.h')
-rw-r--r--src/mongo/base/string_data-inl.h167
1 files changed, 82 insertions, 85 deletions
diff --git a/src/mongo/base/string_data-inl.h b/src/mongo/base/string_data-inl.h
index 4c8a0bdc924..1bf436cb5ea 100644
--- a/src/mongo/base/string_data-inl.h
+++ b/src/mongo/base/string_data-inl.h
@@ -33,106 +33,103 @@
namespace mongo {
- inline int StringData::compare(StringData other) const {
- int res = memcmp(_data, other._data, std::min(_size, other._size));
- if (res != 0) {
- return res > 0 ? 1 : -1;
- }
- else if (_size == other._size) {
- return 0;
- }
- else {
- return _size > other._size ? 1 : -1;
- }
+inline int StringData::compare(StringData other) const {
+ int res = memcmp(_data, other._data, std::min(_size, other._size));
+ if (res != 0) {
+ return res > 0 ? 1 : -1;
+ } else if (_size == other._size) {
+ return 0;
+ } else {
+ return _size > other._size ? 1 : -1;
}
-
- inline bool StringData::equalCaseInsensitive( StringData other ) const {
- if ( other.size() != size() )
- return false;
-
- for ( size_t x = 0; x < size(); x++ ) {
- char a = _data[x];
- char b = other._data[x];
- if ( a == b )
- continue;
- if ( tolower(a) == tolower(b) )
- continue;
- return false;
- }
-
- return true;
- }
-
- inline void StringData::copyTo( char* dest, bool includeEndingNull ) const {
- memcpy( dest, _data, size() );
- if ( includeEndingNull )
- dest[size()] = 0;
- }
-
- inline size_t StringData::find( char c, size_t fromPos ) const {
- if ( fromPos >= size() )
- return std::string::npos;
-
- const void* x = memchr( _data + fromPos, c, _size - fromPos );
- if ( x == 0 )
- return std::string::npos;
- return static_cast<size_t>( static_cast<const char*>(x) - _data );
+}
+
+inline bool StringData::equalCaseInsensitive(StringData other) const {
+ if (other.size() != size())
+ return false;
+
+ for (size_t x = 0; x < size(); x++) {
+ char a = _data[x];
+ char b = other._data[x];
+ if (a == b)
+ continue;
+ if (tolower(a) == tolower(b))
+ continue;
+ return false;
}
- inline size_t StringData::find( StringData needle ) const {
- size_t mx = size();
- size_t needleSize = needle.size();
+ return true;
+}
- if ( needleSize == 0 )
- return 0;
- else if ( needleSize > mx )
- return std::string::npos;
+inline void StringData::copyTo(char* dest, bool includeEndingNull) const {
+ memcpy(dest, _data, size());
+ if (includeEndingNull)
+ dest[size()] = 0;
+}
- mx -= needleSize;
-
- for ( size_t i = 0; i <= mx; i++ ) {
- if ( memcmp( _data + i, needle._data, needleSize ) == 0 )
- return i;
- }
+inline size_t StringData::find(char c, size_t fromPos) const {
+ if (fromPos >= size())
return std::string::npos;
- }
+ const void* x = memchr(_data + fromPos, c, _size - fromPos);
+ if (x == 0)
+ return std::string::npos;
+ return static_cast<size_t>(static_cast<const char*>(x) - _data);
+}
- inline size_t StringData::rfind( char c, size_t fromPos ) const {
- const size_t sz = size();
- if ( fromPos > sz )
- fromPos = sz;
+inline size_t StringData::find(StringData needle) const {
+ size_t mx = size();
+ size_t needleSize = needle.size();
- for ( const char* cur = _data + fromPos; cur > _data; --cur ) {
- if ( *(cur - 1) == c )
- return (cur - _data) - 1;
- }
+ if (needleSize == 0)
+ return 0;
+ else if (needleSize > mx)
return std::string::npos;
- }
-
- inline StringData StringData::substr( size_t pos, size_t n ) const {
- if ( pos > size() )
- throw std::out_of_range( "out of range" );
- // truncate to end of string
- if ( n > size() - pos )
- n = size() - pos;
+ mx -= needleSize;
- return StringData( _data + pos, n );
+ for (size_t i = 0; i <= mx; i++) {
+ if (memcmp(_data + i, needle._data, needleSize) == 0)
+ return i;
}
+ return std::string::npos;
+}
- inline bool StringData::startsWith( StringData prefix ) const {
- // TODO: Investigate an optimized implementation.
- return substr(0, prefix.size()) == prefix;
- }
+inline size_t StringData::rfind(char c, size_t fromPos) const {
+ const size_t sz = size();
+ if (fromPos > sz)
+ fromPos = sz;
- inline bool StringData::endsWith( StringData suffix ) const {
- // TODO: Investigate an optimized implementation.
- const size_t thisSize = size();
- const size_t suffixSize = suffix.size();
- if (suffixSize > thisSize)
- return false;
- return substr(thisSize - suffixSize) == suffix;
+ for (const char* cur = _data + fromPos; cur > _data; --cur) {
+ if (*(cur - 1) == c)
+ return (cur - _data) - 1;
}
+ return std::string::npos;
+}
+
+inline StringData StringData::substr(size_t pos, size_t n) const {
+ if (pos > size())
+ throw std::out_of_range("out of range");
+
+ // truncate to end of string
+ if (n > size() - pos)
+ n = size() - pos;
+
+ return StringData(_data + pos, n);
+}
+
+inline bool StringData::startsWith(StringData prefix) const {
+ // TODO: Investigate an optimized implementation.
+ return substr(0, prefix.size()) == prefix;
+}
+
+inline bool StringData::endsWith(StringData suffix) const {
+ // TODO: Investigate an optimized implementation.
+ const size_t thisSize = size();
+ const size_t suffixSize = suffix.size();
+ if (suffixSize > thisSize)
+ return false;
+ return substr(thisSize - suffixSize) == suffix;
+}
} // namespace mongo