14 #ifndef LLVM_ADT_STRINGEXTRAS_H
15 #define LLVM_ADT_STRINGEXTRAS_H
19 #include "llvm/Support/DataTypes.h"
22 template<
typename T>
class SmallVectorImpl;
26 static inline char hexdigit(
unsigned X,
bool LowerCase =
false) {
27 const char HexChar = LowerCase ?
'a' :
'A';
28 return X < 10 ?
'0' + X : HexChar + X - 10;
36 if (C >=
'0' && C <=
'9')
return C-
'0';
37 if (C >=
'a' && C <=
'f')
return C-
'a'+10U;
38 if (C >=
'A' && C <=
'F')
return C-
'A'+10U;
50 template<
typename IntTy>
52 char *BufPtr = BufferEnd;
60 unsigned char Mod =
static_cast<unsigned char>(
X) & 15;
72 static inline std::string
utostr_32(uint32_t
X,
bool isNeg =
false) {
74 char *BufPtr = Buffer+11;
76 if (X == 0) *--BufPtr =
'0';
79 *--BufPtr =
'0' + char(X % 10);
83 if (isNeg) *--BufPtr =
'-';
85 return std::string(BufPtr, Buffer+11);
88 static inline std::string
utostr(uint64_t
X,
bool isNeg =
false) {
90 char *BufPtr = Buffer+21;
92 if (X == 0) *--BufPtr =
'0';
95 *--BufPtr =
'0' + char(X % 10);
99 if (isNeg) *--BufPtr =
'-';
100 return std::string(BufPtr, Buffer+21);
106 return utostr(static_cast<uint64_t>(-X),
true);
108 return utostr(static_cast<uint64_t>(X));
123 StringRef Delimiters =
" \t\n\v\f\r");
128 SmallVectorImpl<StringRef> &OutFragments,
129 StringRef Delimiters =
" \t\n\v\f\r");
139 for (
unsigned i = 0, e = Str.
size(); i != e; ++i)
140 Result = Result * 33 + (
unsigned char)Str[i];
158 default:
return "th";
163 template <
typename IteratorT>
164 inline std::string
join_impl(IteratorT Begin, IteratorT End,
165 StringRef Separator, std::input_iterator_tag) {
171 while (++Begin != End) {
178 template <
typename IteratorT>
179 inline std::string
join_impl(IteratorT Begin, IteratorT End,
180 StringRef Separator, std::forward_iterator_tag) {
185 size_t Len = (std::distance(Begin, End) - 1) * Separator.
size();
186 for (IteratorT
I = Begin;
I != End; ++
I)
187 Len += (*Begin).size();
190 while (++Begin != End) {
199 template <
typename IteratorT>
200 inline std::string
join(IteratorT Begin, IteratorT End,
StringRef Separator) {
201 typedef typename std::iterator_traits<IteratorT>::iterator_category tag;
202 return join_impl(Begin, End, Separator, tag());
static unsigned HashString(StringRef Str, unsigned Result=0)
size_t size() const
size - Get the string size.
static std::string utohexstr(uint64_t X)
std::pair< StringRef, StringRef > getToken(StringRef Source, StringRef Delimiters=" \t\n\v\f\r")
std::string join(IteratorT Begin, IteratorT End, StringRef Separator)
static std::string utostr(uint64_t X, bool isNeg=false)
static StringRef getOrdinalSuffix(unsigned Val)
Returns the English suffix for an ordinal integer (-st, -nd, -rd, -th).
std::string join_impl(IteratorT Begin, IteratorT End, StringRef Separator, std::input_iterator_tag)
static std::string itostr(int64_t X)
static std::string utostr_32(uint32_t X, bool isNeg=false)
void SplitString(StringRef Source, SmallVectorImpl< StringRef > &OutFragments, StringRef Delimiters=" \t\n\v\f\r")
static char hexdigit(unsigned X, bool LowerCase=false)
static char * utohex_buffer(IntTy X, char *BufferEnd)
StringRef::size_type StrInStrNoCase(StringRef s1, StringRef s2)
static unsigned hexDigitValue(char C)
static RegisterPass< NVPTXAllocaHoisting > X("alloca-hoisting","Hoisting alloca instructions in non-entry ""blocks to the entry block")