blob: 0ca6609ff45b47ed07402221d18eae4c8d11c1ae [file] [log] [blame]
Chris Lattner48486892003-09-30 18:37:50 +00001//===-- Support/StringExtras.h - Useful string functions --------*- C++ -*-===//
John Criswellb2109ce2003-10-20 19:46:57 +00002//
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//===----------------------------------------------------------------------===//
Chris Lattner00950542001-06-06 20:29:01 +00009//
10// This file contains some functions that are useful when dealing with strings.
Chris Lattner00950542001-06-06 20:29:01 +000011//
12//===----------------------------------------------------------------------===//
13
Brian Gaekea9f6e4a2003-06-17 00:35:55 +000014#ifndef SUPPORT_STRINGEXTRAS_H
15#define SUPPORT_STRINGEXTRAS_H
Chris Lattner00950542001-06-06 20:29:01 +000016
Chris Lattnercee8f9a2001-11-27 00:03:19 +000017#include "Support/DataTypes.h"
Chris Lattner00950542001-06-06 20:29:01 +000018#include <string>
Chris Lattner2e35bed2001-07-15 00:16:38 +000019#include <stdio.h>
Chris Lattner5f621912001-10-29 13:24:31 +000020
Chris Lattner35c15b42002-04-07 08:36:19 +000021static 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
Chris Lattner697954c2002-01-20 22:54:45 +000039static inline std::string utostr(uint64_t X, bool isNeg = false) {
Chris Lattner00950542001-06-06 20:29:01 +000040 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
Chris Lattner697954c2002-01-20 22:54:45 +000053 return std::string(BufPtr);
Chris Lattner00950542001-06-06 20:29:01 +000054}
55
Chris Lattner697954c2002-01-20 22:54:45 +000056static inline std::string itostr(int64_t X) {
Chris Lattner00950542001-06-06 20:29:01 +000057 if (X < 0)
58 return utostr((uint64_t)-X, true);
59 else
60 return utostr((uint64_t)X);
61}
62
63
Chris Lattner697954c2002-01-20 22:54:45 +000064static inline std::string utostr(unsigned X, bool isNeg = false) {
Chris Lattner00950542001-06-06 20:29:01 +000065 char Buffer[20];
66 char *BufPtr = Buffer+19;
67
68 *BufPtr = 0; // Null terminate buffer...
69 if (X == 0) *--BufPtr = '0'; // Handle special case...
70
71 while (X) {
72 *--BufPtr = '0' + (X % 10);
73 X /= 10;
74 }
75
76 if (isNeg) *--BufPtr = '-'; // Add negative sign...
77
Chris Lattner697954c2002-01-20 22:54:45 +000078 return std::string(BufPtr);
Chris Lattner00950542001-06-06 20:29:01 +000079}
80
Chris Lattner697954c2002-01-20 22:54:45 +000081static inline std::string itostr(int X) {
Chris Lattner00950542001-06-06 20:29:01 +000082 if (X < 0)
83 return utostr((unsigned)-X, true);
84 else
85 return utostr((unsigned)X);
86}
87
Chris Lattner697954c2002-01-20 22:54:45 +000088static inline std::string ftostr(double V) {
Chris Lattner2e35bed2001-07-15 00:16:38 +000089 char Buffer[200];
Chris Lattner27db7e02003-10-05 00:41:07 +000090 snprintf(Buffer, 200, "%20.6e", V);
Chris Lattner2e35bed2001-07-15 00:16:38 +000091 return Buffer;
92}
93
Chris Lattner00950542001-06-06 20:29:01 +000094#endif