blob: 529d86caa205d771fed86918e07dee22e8709b17 [file] [log] [blame]
Chris Lattnercee8f9a2001-11-27 00:03:19 +00001//===-- Support/StringExtras.h - Useful string functions ---------*- C++ -*--=//
Chris Lattner00950542001-06-06 20:29:01 +00002//
3// This file contains some functions that are useful when dealing with strings.
Chris Lattner00950542001-06-06 20:29:01 +00004//
5//===----------------------------------------------------------------------===//
6
Chris Lattnercee8f9a2001-11-27 00:03:19 +00007#ifndef SUPPORT_STRING_EXTRAS_H
8#define SUPPORT_STRING_EXTRAS_H
Chris Lattner00950542001-06-06 20:29:01 +00009
Chris Lattnercee8f9a2001-11-27 00:03:19 +000010#include "Support/DataTypes.h"
Chris Lattner00950542001-06-06 20:29:01 +000011#include <string>
Chris Lattner2e35bed2001-07-15 00:16:38 +000012#include <stdio.h>
Chris Lattner5f621912001-10-29 13:24:31 +000013
Chris Lattner35c15b42002-04-07 08:36:19 +000014static inline std::string utohexstr(uint64_t X) {
15 char Buffer[40];
16 char *BufPtr = Buffer+39;
17
18 *BufPtr = 0; // Null terminate buffer...
19 if (X == 0) *--BufPtr = '0'; // Handle special case...
20
21 while (X) {
22 unsigned Mod = X & 15;
23 if (Mod < 10)
24 *--BufPtr = '0' + Mod;
25 else
26 *--BufPtr = 'A' + Mod-10;
27 X >>= 4;
28 }
29 return std::string(BufPtr);
30}
31
Chris Lattner697954c2002-01-20 22:54:45 +000032static inline std::string utostr(uint64_t X, bool isNeg = false) {
Chris Lattner00950542001-06-06 20:29:01 +000033 char Buffer[40];
34 char *BufPtr = Buffer+39;
35
36 *BufPtr = 0; // Null terminate buffer...
37 if (X == 0) *--BufPtr = '0'; // Handle special case...
38
39 while (X) {
40 *--BufPtr = '0' + (X % 10);
41 X /= 10;
42 }
43
44 if (isNeg) *--BufPtr = '-'; // Add negative sign...
45
Chris Lattner697954c2002-01-20 22:54:45 +000046 return std::string(BufPtr);
Chris Lattner00950542001-06-06 20:29:01 +000047}
48
Chris Lattner697954c2002-01-20 22:54:45 +000049static inline std::string itostr(int64_t X) {
Chris Lattner00950542001-06-06 20:29:01 +000050 if (X < 0)
51 return utostr((uint64_t)-X, true);
52 else
53 return utostr((uint64_t)X);
54}
55
56
Chris Lattner697954c2002-01-20 22:54:45 +000057static inline std::string utostr(unsigned X, bool isNeg = false) {
Chris Lattner00950542001-06-06 20:29:01 +000058 char Buffer[20];
59 char *BufPtr = Buffer+19;
60
61 *BufPtr = 0; // Null terminate buffer...
62 if (X == 0) *--BufPtr = '0'; // Handle special case...
63
64 while (X) {
65 *--BufPtr = '0' + (X % 10);
66 X /= 10;
67 }
68
69 if (isNeg) *--BufPtr = '-'; // Add negative sign...
70
Chris Lattner697954c2002-01-20 22:54:45 +000071 return std::string(BufPtr);
Chris Lattner00950542001-06-06 20:29:01 +000072}
73
Chris Lattner697954c2002-01-20 22:54:45 +000074static inline std::string itostr(int X) {
Chris Lattner00950542001-06-06 20:29:01 +000075 if (X < 0)
76 return utostr((unsigned)-X, true);
77 else
78 return utostr((unsigned)X);
79}
80
Chris Lattner697954c2002-01-20 22:54:45 +000081static inline std::string ftostr(double V) {
Chris Lattner2e35bed2001-07-15 00:16:38 +000082 char Buffer[200];
Chris Lattner6eaa4572001-11-01 22:06:00 +000083 snprintf(Buffer, 200, "%e", V);
Chris Lattner2e35bed2001-07-15 00:16:38 +000084 return Buffer;
85}
86
Chris Lattner00950542001-06-06 20:29:01 +000087#endif