Apparently my Mac OS X fixes were not entirely compatible with SPARC...hmm.
[oota-llvm.git] / include / llvm / ADT / StringExtras.h
1 //===-- Support/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 SUPPORT_STRINGEXTRAS_H
15 #define SUPPORT_STRINGEXTRAS_H
16
17 #include "Support/DataTypes.h"
18 #include <string>
19 #include <stdio.h>
20
21 static inline std::string utohexstr(uint64_t X) {
22   char Buffer[40];
23   char *BufPtr = Buffer+39;
24
25   *BufPtr = 0;                  // Null terminate buffer...
26   if (X == 0) *--BufPtr = '0';  // Handle special case...
27
28   while (X) {
29     unsigned Mod = X & 15;
30     if (Mod < 10)
31       *--BufPtr = '0' + Mod;
32     else
33       *--BufPtr = 'A' + Mod-10;
34     X >>= 4;
35   }
36   return std::string(BufPtr);
37 }
38
39 static inline std::string utostr(unsigned long long X, bool isNeg = false) {
40   char Buffer[40];
41   char *BufPtr = Buffer+39;
42
43   *BufPtr = 0;                  // Null terminate buffer...
44   if (X == 0) *--BufPtr = '0';  // Handle special case...
45
46   while (X) {
47     *--BufPtr = '0' + (X % 10);
48     X /= 10;
49   }
50
51   if (isNeg) *--BufPtr = '-';   // Add negative sign...
52
53   return std::string(BufPtr);
54 }
55
56 static inline std::string itostr(int64_t X) {
57   if (X < 0) 
58     return utostr((uint64_t)-X, true);
59   else
60     return utostr((uint64_t)X);
61 }
62
63
64 static inline std::string utostr(unsigned long X, bool isNeg = false) {
65   return utostr((unsigned long long)X, isNeg);
66 }
67
68 static inline std::string utostr(unsigned X, bool isNeg = false) {
69   char Buffer[20];
70   char *BufPtr = Buffer+19;
71
72   *BufPtr = 0;                  // Null terminate buffer...
73   if (X == 0) *--BufPtr = '0';  // Handle special case...
74
75   while (X) {
76     *--BufPtr = '0' + (X % 10);
77     X /= 10;
78   }
79
80   if (isNeg) *--BufPtr = '-';   // Add negative sign...
81
82   return std::string(BufPtr);
83 }
84
85 static inline std::string itostr(int X) {
86   if (X < 0) 
87     return utostr((unsigned)-X, true);
88   else
89     return utostr((unsigned)X);
90 }
91
92 static inline std::string ftostr(double V) {
93   char Buffer[200];
94   snprintf(Buffer, 200, "%20.6e", V);
95   return Buffer;
96 }
97
98 #endif