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 // Suffix may not be NUL and needs to be NULL terminated.
73 // The comparison is case sensitive.
74 bool EndsWith(const std::string &str, const char *suffix);
75 
76 // Convert to lower-case.
77 void ToLower(std::string *str);
78 
79 // Replaces the substring 'substring' in 'str' with 'replacement'. Returns true if successful.
80 bool ReplaceSubstring(std::string *str,
81                       const std::string &substring,
82                       const std::string &replacement);
83 
84 // Split up a string parsed from an environment variable.
85 std::vector<std::string> GetStringsFromEnvironmentVar(const char *varName, const char *separator);
86 
87 }  // namespace angle
88 
89 #endif  // LIBANGLE_STRING_UTILS_H_
90