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