blob: 08e5eb7e04107bda3c716319dace5d880a46bc34 [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
Brian Gaeked0fde302003-11-11 22:41:34 +000021namespace llvm {
22
Chris Lattner35c15b42002-04-07 08:36:19 +000023static inline std::string utohexstr(uint64_t X) {
24 char Buffer[40];
25 char *BufPtr = Buffer+39;
26
27 *BufPtr = 0; // Null terminate buffer...
28 if (X == 0) *--BufPtr = '0'; // Handle special case...
29
30 while (X) {
31 unsigned Mod = X & 15;
32 if (Mod < 10)
33 *--BufPtr = '0' + Mod;
34 else
35 *--BufPtr = 'A' + Mod-10;
36 X >>= 4;
37 }
38 return std::string(BufPtr);
39}
40
Brian Gaeke0b64ca32003-10-30 15:03:49 +000041static inline std::string utostr(unsigned long long X, bool isNeg = false) {
Chris Lattner00950542001-06-06 20:29:01 +000042 char Buffer[40];
43 char *BufPtr = Buffer+39;
44
45 *BufPtr = 0; // Null terminate buffer...
46 if (X == 0) *--BufPtr = '0'; // Handle special case...
47
48 while (X) {
49 *--BufPtr = '0' + (X % 10);
50 X /= 10;
51 }
52
53 if (isNeg) *--BufPtr = '-'; // Add negative sign...
54
Chris Lattner697954c2002-01-20 22:54:45 +000055 return std::string(BufPtr);
Chris Lattner00950542001-06-06 20:29:01 +000056}
57
Chris Lattner697954c2002-01-20 22:54:45 +000058static inline std::string itostr(int64_t X) {
Chris Lattner00950542001-06-06 20:29:01 +000059 if (X < 0)
Chris Lattner8b70b782003-11-16 20:21:15 +000060 return utostr(static_cast<uint64_t>(-X), true);
Chris Lattner00950542001-06-06 20:29:01 +000061 else
Chris Lattner8b70b782003-11-16 20:21:15 +000062 return utostr(static_cast<uint64_t>(X));
Chris Lattner00950542001-06-06 20:29:01 +000063}
64
65
Brian Gaeke78e1dcc2003-10-29 20:06:19 +000066static inline std::string utostr(unsigned long X, bool isNeg = false) {
Chris Lattner8b70b782003-11-16 20:21:15 +000067 return utostr(static_cast<unsigned long long>(X), isNeg);
Brian Gaeke78e1dcc2003-10-29 20:06:19 +000068}
69
Chris Lattner697954c2002-01-20 22:54:45 +000070static inline std::string utostr(unsigned X, bool isNeg = false) {
Chris Lattner00950542001-06-06 20:29:01 +000071 char Buffer[20];
72 char *BufPtr = Buffer+19;
73
74 *BufPtr = 0; // Null terminate buffer...
75 if (X == 0) *--BufPtr = '0'; // Handle special case...
76
77 while (X) {
78 *--BufPtr = '0' + (X % 10);
79 X /= 10;
80 }
81
82 if (isNeg) *--BufPtr = '-'; // Add negative sign...
83
Chris Lattner697954c2002-01-20 22:54:45 +000084 return std::string(BufPtr);
Chris Lattner00950542001-06-06 20:29:01 +000085}
86
Chris Lattner697954c2002-01-20 22:54:45 +000087static inline std::string itostr(int X) {
Chris Lattner00950542001-06-06 20:29:01 +000088 if (X < 0)
Chris Lattner8b70b782003-11-16 20:21:15 +000089 return utostr(static_cast<unsigned>(-X), true);
Chris Lattner00950542001-06-06 20:29:01 +000090 else
Chris Lattner8b70b782003-11-16 20:21:15 +000091 return utostr(static_cast<unsigned>(X));
Chris Lattner00950542001-06-06 20:29:01 +000092}
93
Chris Lattner697954c2002-01-20 22:54:45 +000094static inline std::string ftostr(double V) {
Chris Lattner2e35bed2001-07-15 00:16:38 +000095 char Buffer[200];
Chris Lattner27db7e02003-10-05 00:41:07 +000096 snprintf(Buffer, 200, "%20.6e", V);
Chris Lattner2e35bed2001-07-15 00:16:38 +000097 return Buffer;
98}
99
Brian Gaeked0fde302003-11-11 22:41:34 +0000100} // End llvm namespace
101
Chris Lattner00950542001-06-06 20:29:01 +0000102#endif