StringExtras.h revision 551ccae044b0ff658fe629dd67edd5ffe75d10e8
1//===-- llvm/ADT/StringExtras.h - Useful string functions -------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file was developed by the LLVM research group and is distributed under 6// the University of Illinois Open Source License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file contains some functions that are useful when dealing with strings. 11// 12//===----------------------------------------------------------------------===// 13 14#ifndef LLVM_ADT_STRINGEXTRAS_H 15#define LLVM_ADT_STRINGEXTRAS_H 16 17#include "llvm/Support/DataTypes.h" 18#include <cctype> 19#include <cstdio> 20#include <string> 21 22namespace llvm { 23 24static inline std::string utohexstr(uint64_t X) { 25 char Buffer[40]; 26 char *BufPtr = Buffer+39; 27 28 *BufPtr = 0; // Null terminate buffer... 29 if (X == 0) *--BufPtr = '0'; // Handle special case... 30 31 while (X) { 32 unsigned char Mod = (unsigned char)X & 15; 33 if (Mod < 10) 34 *--BufPtr = '0' + Mod; 35 else 36 *--BufPtr = 'A' + Mod-10; 37 X >>= 4; 38 } 39 return std::string(BufPtr); 40} 41 42static inline std::string utostr(unsigned long long X, bool isNeg = false) { 43 char Buffer[40]; 44 char *BufPtr = Buffer+39; 45 46 *BufPtr = 0; // Null terminate buffer... 47 if (X == 0) *--BufPtr = '0'; // Handle special case... 48 49 while (X) { 50 *--BufPtr = '0' + char(X % 10); 51 X /= 10; 52 } 53 54 if (isNeg) *--BufPtr = '-'; // Add negative sign... 55 return std::string(BufPtr); 56} 57 58static inline std::string utostr(unsigned long X, bool isNeg = false) { 59 return utostr(static_cast<unsigned long long>(X), isNeg); 60} 61 62static inline std::string utostr(unsigned X, bool isNeg = false) { 63 char Buffer[20]; 64 char *BufPtr = Buffer+19; 65 66 *BufPtr = 0; // Null terminate buffer... 67 if (X == 0) *--BufPtr = '0'; // Handle special case... 68 69 while (X) { 70 *--BufPtr = '0' + char(X % 10); 71 X /= 10; 72 } 73 74 if (isNeg) *--BufPtr = '-'; // Add negative sign... 75 76 return std::string(BufPtr); 77} 78 79static inline std::string itostr(long long X) { 80 if (X < 0) 81 return utostr(static_cast<uint64_t>(-X), true); 82 else 83 return utostr(static_cast<uint64_t>(X)); 84} 85 86static inline std::string itostr(long X) { 87 if (X < 0) 88 return utostr(static_cast<uint64_t>(-X), true); 89 else 90 return utostr(static_cast<uint64_t>(X)); 91} 92 93static inline std::string itostr(int X) { 94 if (X < 0) 95 return utostr(static_cast<unsigned>(-X), true); 96 else 97 return utostr(static_cast<unsigned>(X)); 98} 99 100static inline std::string ftostr(double V) { 101 char Buffer[200]; 102 sprintf(Buffer, "%20.6e", V); 103 return Buffer; 104} 105 106static inline std::string LowercaseString(const std::string &S) { 107 std::string result(S); 108 for (unsigned i = 0; i < S.length(); ++i) 109 if (isupper(result[i])) 110 result[i] = (char)tolower(result[i]); 111 return result; 112} 113 114/// getToken - This function extracts one token from source, ignoring any 115/// leading characters that appear in the Delimiters string, and ending the 116/// token at any of the characters that appear in the Delimiters string. If 117/// there are no tokens in the source string, an empty string is returned. 118/// The Source source string is updated in place to remove the returned string 119/// and any delimiter prefix from it. 120std::string getToken(std::string &Source, 121 const char *Delimiters = " \t\n\v\f\r"); 122 123} // End llvm namespace 124 125#endif 126