• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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, std::vector<std::string> *tokensOut);
41 
42 std::string TrimString(const std::string &input, const std::string &trimChars);
43 
44 // Return the substring starting at offset and up to the first occurance of the |delimeter|.
45 std::string GetPrefix(const std::string &input, size_t offset, const char *delimiter);
46 std::string GetPrefix(const std::string &input, size_t offset, char delimiter);
47 
48 bool HexStringToUInt(const std::string &input, unsigned int *uintOut);
49 
50 bool ReadFileToString(const std::string &path, std::string *stringOut);
51 
52 // Check if the string str begins with the given prefix.
53 // The comparison is case sensitive.
54 bool BeginsWith(const std::string &str, const std::string &prefix);
55 
56 // Check if the string str begins with the given prefix.
57 // Prefix may not be NULL and needs to be NULL terminated.
58 // The comparison is case sensitive.
59 bool BeginsWith(const std::string &str, const char *prefix);
60 
61 // Check if the string str begins with the given prefix.
62 // str and prefix may not be NULL and need to be NULL terminated.
63 // The comparison is case sensitive.
64 bool BeginsWith(const char *str, const char *prefix);
65 
66 // Check if the string str begins with the first prefixLength characters of the given prefix.
67 // The length of the prefix string should be greater than or equal to prefixLength.
68 // The comparison is case sensitive.
69 bool BeginsWith(const std::string &str, const std::string &prefix, const size_t prefixLength);
70 
71 // Check if the string str ends with the given suffix.
72 // The comparison is case sensitive.
73 bool EndsWith(const std::string &str, const std::string &suffix);
74 
75 // Check if the string str ends with the given suffix.
76 // Suffix may not be NULL and needs to be NULL terminated.
77 // The comparison is case sensitive.
78 bool EndsWith(const std::string &str, const char *suffix);
79 
80 // Check if the string str ends with the given suffix.
81 // str and suffix may not be NULL and need to be NULL terminated.
82 // The comparison is case sensitive.
83 bool EndsWith(const char *str, const char *suffix);
84 
85 // Check if the given token string contains the given token.
86 // The tokens are separated by the given delimiter.
87 // The comparison is case sensitive.
88 bool ContainsToken(const std::string &tokenStr, char delimiter, const std::string &token);
89 
90 // Convert to lower-case.
91 void ToLower(std::string *str);
92 
93 // Convert to upper-case.
94 void ToUpper(std::string *str);
95 
96 // Replaces the substring 'substring' in 'str' with 'replacement'. Returns true if successful.
97 bool ReplaceSubstring(std::string *str,
98                       const std::string &substring,
99                       const std::string &replacement);
100 
101 // Split up a string parsed from an environment variable.
102 std::vector<std::string> GetStringsFromEnvironmentVarOrAndroidProperty(const char *varName,
103                                                                        const char *propertyName,
104                                                                        const char *separator);
105 
106 // Split up a string parsed from environment variable or via Android property, use cached result if
107 // available.
108 std::vector<std::string> GetCachedStringsFromEnvironmentVarOrAndroidProperty(
109     const char *varName,
110     const char *propertyName,
111     const char *separator);
112 
113 // reference name can have *.
114 bool NamesMatchWithWildcard(const char *ref, const char *testName);
115 }  // namespace angle
116 
117 #endif  // LIBANGLE_STRING_UTILS_H_
118