Remove dynamic exceptions
[anna.git] / source / core / util / String.cpp
1 // ANNA - Anna is Not Nothingness Anymore                                                         //
2 //                                                                                                //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo                         //
4 //                                                                                                //
5 // See project site at http://redmine.teslayout.com/projects/anna-suite                           //
6 // See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
7
8
9 #include <cctype> // for toupper
10 #include <string>
11 #include <algorithm>
12
13 #include <anna/core/util/String.hpp>
14 #include <anna/core/functions.hpp>
15 #include <anna/core//DataBlock.hpp>
16
17 using namespace std;
18 using namespace anna;
19
20 void String::toUpper()
21 {
22   std::transform(begin(), end(), begin(), (int(*)(int)) toupper);
23 }
24
25 void String::toLower()
26 {
27   std::transform(begin(), end(), begin(), (int(*)(int)) tolower);
28 }
29
30 String& String::operator<< (const char* vv)
31 {
32   if(vv == NULL) {
33     if(a_flags & Flag::ShowNull)
34       string::operator+= ("<null>");
35   } else
36     string::operator+= (vv);
37
38   return *this;
39 }
40
41 String& String::operator<< (const int vv)
42 {
43   char aux [16];
44   sprintf(aux, "%d", vv);
45   string::operator+= (aux);
46   return *this;
47 }
48
49 String& String::operator<< (const unsigned int vv)
50 {
51   char aux [16];
52   sprintf(aux, "%u", vv);
53   string::operator+= (aux);
54   return *this;
55 }
56
57 String& String::operator<< (const S64 vv)
58 {
59   char aux [32];
60   //sprintf(aux, "%lld", vv);
61   #ifdef __anna64__
62     sprintf (aux, "%ld", vv);
63   #else
64     sprintf (aux, "%lld", vv);
65   #endif
66   string::operator+= (aux);
67   return *this;
68 }
69
70 String& String::operator<< (const U64 vv)
71 {
72   char aux [32];
73   //sprintf(aux, "%llu", vv);
74   #ifdef __anna64__
75     sprintf (aux, "%lu", vv);
76   #else
77     sprintf (aux, "%llu", vv);
78   #endif
79   string::operator+= (aux);
80   return *this;
81 }
82
83 String& String::operator<< (const float vv)
84 {
85   char aux [64];
86   sprintf(aux, "%f", vv);
87   string::operator+= (aux);
88   return *this;
89 }
90
91 String& String::operator<< (const double vv)
92 {
93   char aux [64];
94   sprintf(aux, "%e", vv);
95   string::operator+= (aux);
96   return *this;
97 }
98
99 String& String::operator<< (const DataBlock& vv)
100 {
101   return *this += vv.asString();
102 }
103
104 //static
105 String String::format(const DataBlock& vv, const int characterByLine)
106 {
107   return String(vv.asString(characterByLine));
108 }