1 // 2 // Copyright 2015 The ANGLE Project Authors. All rights reserved. 3 // Use of this source code is governed by a BSD-style license that can be 4 // found in the LICENSE file. 5 // 6 // string_utils: 7 // String helper functions. 8 // 9 10 #ifndef LIBANGLE_STRING_UTILS_H_ 11 #define LIBANGLE_STRING_UTILS_H_ 12 13 #include <string> 14 #include <vector> 15 16 #include "common/Optional.h" 17 18 namespace angle 19 { 20 21 extern const char kWhitespaceASCII[]; 22 23 enum WhitespaceHandling 24 { 25 KEEP_WHITESPACE, 26 TRIM_WHITESPACE, 27 }; 28 29 enum SplitResult 30 { 31 SPLIT_WANT_ALL, 32 SPLIT_WANT_NONEMPTY, 33 }; 34 35 std::vector<std::string> SplitString(const std::string &input, 36 const std::string &delimiters, 37 WhitespaceHandling whitespace, 38 SplitResult resultType); 39 40 void SplitStringAlongWhitespace(const std::string &input, 41 std::vector<std::string> *tokensOut); 42 43 std::string TrimString(const std::string &input, const std::string &trimChars); 44 45 bool HexStringToUInt(const std::string &input, unsigned int *uintOut); 46 47 bool ReadFileToString(const std::string &path, std::string *stringOut); 48 49 Optional<std::vector<wchar_t>> WidenString(size_t length, const char *cString); 50 51 // Check if the string str begins with the given prefix. 52 // The comparison is case sensitive. 53 bool BeginsWith(const std::string &str, const std::string &prefix); 54 55 // Check if the string str begins with the given prefix. 56 // Prefix may not be NULL and needs to be NULL terminated. 57 // The comparison is case sensitive. 58 bool BeginsWith(const std::string &str, const char *prefix); 59 60 // Check if the string str begins with the given prefix. 61 // str and prefix may not be NULL and need to be NULL terminated. 62 // The comparison is case sensitive. 63 bool BeginsWith(const char *str, const char *prefix); 64 65 // Check if the string str begins with the first prefixLength characters of the given prefix. 66 // The length of the prefix string should be greater than or equal to prefixLength. 67 // The comparison is case sensitive. 68 bool BeginsWith(const std::string &str, const std::string &prefix, const size_t prefixLength); 69 70 // Check if the string str ends with the given suffix. 71 // Suffix may not be NUL and needs to be NULL terminated. 72 // The comparison is case sensitive. 73 bool EndsWith(const std::string& str, const char* suffix); 74 75 // Convert to lower-case. 76 void ToLower(std::string *str); 77 78 // Replaces the substring 'substring' in 'str' with 'replacement'. Returns true if successful. 79 bool ReplaceSubstring(std::string *str, 80 const std::string &substring, 81 const std::string &replacement); 82 83 } // namespace angle 84 85 #endif // LIBANGLE_STRING_UTILS_H_ 86