// Useful string functions and so forth. This is a grab-bag file. // // You might also want to look at memutil.h, which holds mem*() // equivalents of a lot of the str*() functions in string.h, // eg memstr, mempbrk, etc. // // These functions work fine for UTF-8 strings as long as you can // consider them to be just byte strings. For example, due to the // design of UTF-8 you do not need to worry about accidental matches, // as long as all your inputs are valid UTF-8 (use \uHHHH, not \xHH or \oOOO). // // Caveats: // * all the lengths in these routines refer to byte counts, // not character counts. // * case-insensitivity in these routines assumes that all the letters // in question are in the range A-Z or a-z. // // If you need Unicode specific processing (for example being aware of // Unicode character boundaries, or knowledge of Unicode casing rules, // or various forms of equivalence and normalization), take a look at // files in i18n/utf8. #ifndef DYNAMIC_DEPTH_INTERNAL_STRINGS_UTIL_H_ // NOLINT #define DYNAMIC_DEPTH_INTERNAL_STRINGS_UTIL_H_ // NOLINT #include <string> #include "base/port.h" #include "fastmem.h" namespace dynamic_depth { // Returns whether str begins with prefix. inline bool HasPrefixString(const string& str, const string& prefix) { return str.length() >= prefix.length() && ::dynamic_depth::strings::memeq(&str[0], &prefix[0], prefix.length()); } // Returns whether str ends with suffix. inline bool HasSuffixString(const string& str, const string& suffix) { return str.length() >= suffix.length() && ::dynamic_depth::strings::memeq( &str[0] + (str.length() - suffix.length()), &suffix[0], suffix.length()); } } // namespace dynamic_depth #endif // DYNAMIC_DEPTH_INTERNAL_STRINGS_UTIL_H_ // NOLINT