Panda3D

string_utils.I
Go to the documentation of this file.
1 /**
2 * PANDA 3D SOFTWARE
3 * Copyright (c) Carnegie Mellon University. All rights reserved.
4 *
5 * All use of this software is subject to the terms of the revised BSD
6 * license. You should have received a copy of this license along
7 * with this source code in a file named "LICENSE."
8 *
9 * @file string_utils.I
10 * @author drose
11 * @date 2000-07-14
12 */
13
14 template<class Thing>
15 INLINE std::string
16 format_string(const Thing &thing) {
17 std::ostringstream str;
18 str << thing;
19 return str.str();
20 }
21
22 INLINE std::string
23 format_string(const std::string &value) {
24 return value;
25 }
26
27 INLINE std::string
28 format_string(bool value) {
29 return std::string(value ? "true" : "false");
30 }
31
32 INLINE std::string
33 format_string(float value) {
34 char buffer[32];
35 pdtoa((double)value, buffer);
36 return std::string(buffer);
37 }
38
39 INLINE std::string
40 format_string(double value) {
41 char buffer[32];
42 pdtoa(value, buffer);
43 return std::string(buffer);
44 }
45
46 INLINE std::string
47 format_string(unsigned int value) {
48 char buffer[11];
49 char *p = buffer + 10;
50 *p = 0;
51 do {
52 *--p = '0' + (value % 10);
53 value /= 10;
54 } while (value > 0);
55
56 return std::string(p);
57 }
58
59 INLINE std::string
60 format_string(int value) {
61 char buffer[12];
62 char *p = buffer + 11;
63 *p = 0;
64
65 if (value < 0) {
66 unsigned int posv = (unsigned int)-value;
67 do {
68 *--p = '0' + (posv % 10);
69 posv /= 10;
70 } while (posv > 0);
71 *--p = '-';
72 } else {
73 do {
74 *--p = '0' + (value % 10);
75 value /= 10;
76 } while (value > 0);
77 }
78
79 return std::string(p);
80 }
81
82 INLINE std::string
83 format_string(int64_t value) {
84 char buffer[21];
85 char *p = buffer + 20;
86 *p = 0;
87
88 if (value < 0) {
89 uint64_t posv = (uint64_t)-value;
90 do {
91 *--p = '0' + (posv % 10);
92 posv /= 10;
93 } while (posv > 0);
94 *--p = '-';
95 } else {
96 do {
97 *--p = '0' + (value % 10);
98 value /= 10;
99 } while (value > 0);
100 }
101
102 return std::string(p);
103 }