LLVM  8.0.1
StringExtras.cpp
Go to the documentation of this file.
1 //===-- StringExtras.cpp - Implement the StringExtras header --------------===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file implements the StringExtras.h header
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include "llvm/ADT/StringExtras.h"
15 #include "llvm/ADT/SmallVector.h"
17 using namespace llvm;
18 
19 /// StrInStrNoCase - Portable version of strcasestr. Locates the first
20 /// occurrence of string 's1' in string 's2', ignoring case. Returns
21 /// the offset of s2 in s1 or npos if s2 cannot be found.
23  size_t N = s2.size(), M = s1.size();
24  if (N > M)
25  return StringRef::npos;
26  for (size_t i = 0, e = M - N + 1; i != e; ++i)
27  if (s1.substr(i, N).equals_lower(s2))
28  return i;
29  return StringRef::npos;
30 }
31 
32 /// getToken - This function extracts one token from source, ignoring any
33 /// leading characters that appear in the Delimiters string, and ending the
34 /// token at any of the characters that appear in the Delimiters string. If
35 /// there are no tokens in the source string, an empty string is returned.
36 /// The function returns a pair containing the extracted token and the
37 /// remaining tail string.
38 std::pair<StringRef, StringRef> llvm::getToken(StringRef Source,
39  StringRef Delimiters) {
40  // Figure out where the token starts.
41  StringRef::size_type Start = Source.find_first_not_of(Delimiters);
42 
43  // Find the next occurrence of the delimiter.
44  StringRef::size_type End = Source.find_first_of(Delimiters, Start);
45 
46  return std::make_pair(Source.slice(Start, End), Source.substr(End));
47 }
48 
49 /// SplitString - Split up the specified string according to the specified
50 /// delimiters, appending the result fragments to the output list.
52  SmallVectorImpl<StringRef> &OutFragments,
53  StringRef Delimiters) {
54  std::pair<StringRef, StringRef> S = getToken(Source, Delimiters);
55  while (!S.first.empty()) {
56  OutFragments.push_back(S.first);
57  S = getToken(S.second, Delimiters);
58  }
59 }
60 
62  for (unsigned i = 0, e = Name.size(); i != e; ++i) {
63  unsigned char C = Name[i];
64  if (isPrint(C) && C != '\\' && C != '"')
65  Out << C;
66  else
67  Out << '\\' << hexdigit(C >> 4) << hexdigit(C & 0x0F);
68  }
69 }
70 
72  for (char C : String) {
73  if (C == '&')
74  Out << "&amp;";
75  else if (C == '<')
76  Out << "&lt;";
77  else if (C == '>')
78  Out << "&gt;";
79  else if (C == '\"')
80  Out << "&quot;";
81  else if (C == '\'')
82  Out << "&apos;";
83  else
84  Out << C;
85  }
86 }
87 
89  for (const char C : String)
90  Out << toLower(C);
91 }
uint64_t CallInst * C
bool isPrint(char C)
Checks whether character C is printable.
Definition: StringExtras.h:106
This class represents lattice values for constants.
Definition: AllocatorList.h:24
LLVM_NODISCARD bool equals_lower(StringRef RHS) const
equals_lower - Check for string equality, ignoring case.
Definition: StringRef.h:176
void push_back(const T &Elt)
Definition: SmallVector.h:218
LLVM_NODISCARD LLVM_ATTRIBUTE_ALWAYS_INLINE size_t size() const
size - Get the string size.
Definition: StringRef.h:138
void printEscapedString(StringRef Name, raw_ostream &Out)
Print each character of the specified string, escaping it if it is not printable or if it is an escap...
amdgpu Simplify well known AMD library false Value Value const Twine & Name
void SplitString(StringRef Source, SmallVectorImpl< StringRef > &OutFragments, StringRef Delimiters=" \\\)
SplitString - Split up the specified string according to the specified delimiters, appending the result fragments to the output list.
std::pair< StringRef, StringRef > getToken(StringRef Source, StringRef Delimiters=" \\\)
getToken - This function extracts one token from source, ignoring any leading characters that appear ...
LLVM_NODISCARD LLVM_ATTRIBUTE_ALWAYS_INLINE StringRef substr(size_t Start, size_t N=npos) const
Return a reference to the substring from [Start, Start + N).
Definition: StringRef.h:598
char hexdigit(unsigned X, bool LowerCase=false)
hexdigit - Return the hexadecimal character for the given number X (which should be less than 16)...
Definition: StringExtras.h:37
LLVM_NODISCARD size_t find_first_not_of(char C, size_t From=0) const
Find the first character in the string that is not C or npos if not found.
Definition: StringRef.cpp:250
char toLower(char x)
Returns the corresponding lowercase character if x is uppercase.
Definition: StringExtras.h:112
LLVM_NODISCARD LLVM_ATTRIBUTE_ALWAYS_INLINE StringRef slice(size_t Start, size_t End) const
Return a reference to the substring from [Start, End).
Definition: StringRef.h:710
static const size_t npos
Definition: StringRef.h:51
LLVM_NODISCARD size_t find_first_of(char C, size_t From=0) const
Find the first character in the string that is C, or npos if not found.
Definition: StringRef.h:395
#define N
StringRef::size_type StrInStrNoCase(StringRef s1, StringRef s2)
StrInStrNoCase - Portable version of strcasestr.
void printLowerCase(StringRef String, raw_ostream &Out)
printLowerCase - Print each character as lowercase if it is uppercase.
This class implements an extremely fast bulk output stream that can only output to a stream...
Definition: raw_ostream.h:46
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:49
void printHTMLEscaped(StringRef String, raw_ostream &Out)
Print each character of the specified string, escaping HTML special characters.