StringHelper.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2006-2011, SRI International (R)
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public License
15  * along with this program. If not, see <http://www.gnu.org/licenses/>.
16  */
17 
18 #include <algorithm>
19 #include <string>
20 #include <limits>
21 
22 #include <OpenKarto/StringHelper.h>
23 #include <OpenKarto/Geometry.h>
24 
25 namespace karto
26 {
27 
31 
32  String StringHelper::ToString(const char* value)
33  {
34  return String(value);
35  }
36 
38  {
39  if (value == true)
40  {
41  return String("true");
42  }
43 
44  return String("false");
45  }
46 
47  //String StringHelper::ToString(kt_size_t value)
48  //{
49  // std::stringstream converter;
50  // converter.precision(std::numeric_limits<double>::digits10);
51  // converter << value;
52  // return converter.str().c_str();
53  //}
54 
56  {
57  std::stringstream converter;
58  converter.precision(std::numeric_limits<double>::digits10);
59  converter << value;
60  return converter.str().c_str();
61  }
62 
64  {
65  std::stringstream converter;
66  converter.precision(std::numeric_limits<double>::digits10);
67  converter << value;
68  return converter.str().c_str();
69  }
70 
72  {
73  char buffer[64];
74 #ifdef WIN32
75  sprintf_s(buffer, 64, "%u", value);
76 #else
77  sprintf(buffer, "%u", value);
78 #endif
79  return String(buffer);
80  }
81 
83  {
84  char buffer[64];
85 #ifdef WIN32
86  sprintf_s(buffer, 64, "%d", value);
87 #else
88  sprintf(buffer, "%d", value);
89 #endif
90  return String(buffer);
91  }
92 
94  {
95  std::stringstream converter;
96  converter.precision(std::numeric_limits<double>::digits10);
97  converter << value;
98  return converter.str().c_str();
99  }
100 
102  {
103  std::stringstream converter;
104  converter.precision(std::numeric_limits<double>::digits10);
105  converter << value;
106  return converter.str().c_str();
107  }
108 
109 #if defined(__APPLE__) && !defined(__LP64__)
111  {
112  std::stringstream converter;
113  converter.precision(std::numeric_limits<double>::digits10);
114  converter << value;
115  return converter.str().c_str();
116  }
117 #endif
118 
120  {
121  char buffer[64];
122 #ifdef WIN32
123  sprintf_s(buffer, 64, "%.*g", 8, (double) value);
124 #else
125  sprintf(buffer, "%.*g", 8, (double) value);
126 #endif
127  return String(buffer);
128  }
129 
131  {
132  char buffer[64];
133 #ifdef WIN32
134  sprintf_s(buffer, 64, "%.*g", 16, value);
135 #else
136  sprintf(buffer, "%.*g", 16, value);
137 #endif
138  return String(buffer);
139  }
140 
142  {
143  char buffer[64];
144 #ifdef WIN32
145  sprintf_s(buffer, 64, "%.*f", (kt_int32s)precision, (double)value);
146 #else
147  sprintf(buffer, "%.*f", (kt_int32s)precision, (double)value);
148 #endif
149  return String(buffer);
150  }
151 
153  {
154  char buffer[64];
155 #ifdef WIN32
156  sprintf_s(buffer, 64, "%.*f", (kt_int32s)precision, value);
157 #else
158  sprintf(buffer, "%.*f", (kt_int32s)precision, value);
159 #endif
160  return String(buffer);
161  }
162 
164  {
165  return rValue;
166  }
167 
169  {
170  return rValue.ToString();
171  }
172 
174  {
175  return rValue.ToString();
176  }
177 
179  {
180  return rValue.ToString();
181  }
182 
184  {
185  return rValue.ToString();
186  }
187 
188  kt_bool StringHelper::FromString(const String& rStringValue, kt_bool& rValue)
189  {
190  rValue = false;
191 
192  if (ToLowerCase(rStringValue) == String("true"))
193  {
194  rValue = true;
195  }
196 
197  return true;
198  }
199 
200  kt_bool StringHelper::FromString(const String& rStringValue, kt_int16s& rValue)
201  {
202  int precision = std::numeric_limits<double>::digits10;
203  std::stringstream converter;
204  converter.precision(precision);
205 
206  converter.str(rStringValue.ToCString());
207 
208  converter >> rValue;
209 
210  return true;
211  }
212 
213  kt_bool StringHelper::FromString(const String& rStringValue, kt_int16u& rValue)
214  {
215  int precision = std::numeric_limits<double>::digits10;
216  std::stringstream converter;
217  converter.precision(precision);
218 
219  converter.str(rStringValue.ToCString());
220 
221  converter >> rValue;
222 
223  return true;
224  }
225 
226  kt_bool StringHelper::FromString(const String& rStringValue, kt_int32s& rValue)
227  {
228  int precision = std::numeric_limits<double>::digits10;
229  std::stringstream converter;
230  converter.precision(precision);
231 
232  converter.str(rStringValue.ToCString());
233 
234  converter >> rValue;
235 
236  return true;
237  }
238 
239  kt_bool StringHelper::FromString(const String& rStringValue, kt_int32u& rValue)
240  {
241  int precision = std::numeric_limits<double>::digits10;
242  std::stringstream converter;
243  converter.precision(precision);
244 
245  converter.str(rStringValue.ToCString());
246 
247  converter >> rValue;
248 
249  return true;
250  }
251 
252  kt_bool StringHelper::FromString(const String& rStringValue, kt_int64s& rValue)
253  {
254  int precision = std::numeric_limits<double>::digits10;
255  std::stringstream converter;
256  converter.precision(precision);
257 
258  converter.str(rStringValue.ToCString());
259 
260  converter >> rValue;
261 
262  return true;
263  }
264 
265  kt_bool StringHelper::FromString(const String& rStringValue, kt_int64u& rValue)
266  {
267  int precision = std::numeric_limits<double>::digits10;
268  std::stringstream converter;
269  converter.precision(precision);
270 
271  converter.str(rStringValue.ToCString());
272 
273  converter >> rValue;
274 
275  return true;
276  }
277 
278  kt_bool StringHelper::FromString(const String& rStringValue, kt_float& rValue)
279  {
280  int precision = std::numeric_limits<double>::digits10;
281  std::stringstream converter;
282  converter.precision(precision);
283 
284  converter.str(rStringValue.ToCString());
285 
286  converter >> rValue;
287 
288  return true;
289  }
290 
291  kt_bool StringHelper::FromString(const String& rStringValue, kt_double& rValue)
292  {
293  int precision = std::numeric_limits<double>::digits10;
294  std::stringstream converter;
295  converter.precision(precision);
296 
297  converter.str(rStringValue.ToCString());
298 
299  converter >> rValue;
300 
301  return true;
302  }
303 
304  kt_bool StringHelper::FromString(const String& rStringValue, String& rValue)
305  {
306  rValue = rStringValue;
307 
308  return true;
309  }
310 
311  kt_bool StringHelper::FromString(const String& rStringValue, Quaternion& rValue)
312  {
313  kt_size_t index = rStringValue.FindFirstOf(" ");
314  if (index != -1)
315  {
316  std::stringstream converter;
317  converter.str(rStringValue.ToCString());
318 
319  kt_double valueX = 0.0;
320  kt_double valueY = 0.0;
321  kt_double valueZ = 0.0;
322  kt_double valueW = 0.0;
323 
324  converter >> valueX;
325  converter >> valueY;
326  converter >> valueZ;
327  converter >> valueW;
328 
329  rValue.SetX(valueX);
330  rValue.SetY(valueY);
331  rValue.SetZ(valueZ);
332  rValue.SetW(valueW);
333 
334  return true;
335  }
336 
337  return false;
338  }
339 
340  kt_bool StringHelper::FromString(const String& rStringValue, Color& rValue)
341  {
342  kt_size_t index = rStringValue.FindFirstOf(" ");
343  if (index != -1)
344  {
345  std::stringstream converter;
346  converter.str(rStringValue.ToCString());
347 
348  kt_double valueRed = 0.0;
349  kt_double valueGreen = 0.0;
350  kt_double valueBlue = 0.0;
351  kt_double valueAlpha = 0.0;
352 
353  converter >> valueRed;
354  converter >> valueGreen;
355  converter >> valueBlue;
356  converter >> valueAlpha;
357 
358  rValue.SetRed(valueRed);
359  rValue.SetGreen(valueGreen);
360  rValue.SetBlue(valueBlue);
361  rValue.SetAlpha(valueAlpha);
362 
363  return true;
364  }
365 
366  return false;
367  }
368 
369  kt_bool StringHelper::FromString(const String& rStringValue, Pose2& rValue)
370  {
371  kt_size_t index = rStringValue.FindFirstOf(" ");
372  if (index != -1)
373  {
374  std::stringstream converter;
375  converter.str(rStringValue.ToCString());
376 
377  kt_double valueX = 0.0;
378  kt_double valueY = 0.0;
379  kt_double valueHeading = 0.0;
380 
381  converter >> valueX;
382  converter >> valueY;
383  converter >> valueHeading;
384 
385  rValue.SetX(valueX);
386  rValue.SetY(valueY);
387  rValue.SetHeading(valueHeading);
388 
389  return true;
390  }
391 
392  return false;
393  }
394 
395  kt_bool StringHelper::FromString(const String& rStringValue, Pose3& rValue)
396  {
397  kt_size_t index = rStringValue.FindFirstOf(" ");
398  if (index != -1)
399  {
400  std::stringstream converter;
401  converter.str(rStringValue.ToCString());
402 
403  kt_double valueX = 0.0;
404  kt_double valueY = 0.0;
405  kt_double valueZ = 0.0;
406  kt_double valueW = 0.0;
407 
408  converter >> valueX;
409  converter >> valueY;
410  converter >> valueZ;
411  rValue.SetPosition(karto::Vector3d(valueX, valueY, valueZ));
412 
413  valueX = 0.0;
414  valueY = 0.0;
415  valueZ = 0.0;
416  valueW = 0.0;
417 
418  converter >> valueX;
419  converter >> valueY;
420  converter >> valueZ;
421  converter >> valueW;
422  rValue.SetOrientation(karto::Quaternion(valueX, valueY, valueZ, valueW));
423 
424  return true;
425  }
426 
427  return false;
428  }
429 
431  {
432  char const* delims = " \t\r\n";
433 
434  std::string result(rValue.ToCString());
435  std::string::size_type index = result.find_last_not_of(delims);
436  if (index != std::string::npos)
437  result.erase(++index);
438 
439  index = result.find_first_not_of(delims);
440  if (index != std::string::npos)
441  {
442  result.erase(0, index);
443  }
444  else
445  {
446  result.erase();
447  }
448 
449  return String(result.c_str());
450  }
451 
452  String StringHelper::Replace(const String& rSource, const String& rFind, const String& rReplace)
453  {
454  size_t j;
455 
456  std::string retStr = rSource.ToCString();
457 
458  if (rFind == rReplace)
459  {
460  return String(retStr.c_str());
461  }
462 
463  for (; ( j = retStr.find(rFind.ToCString()) ) != std::string::npos; )
464  {
465  retStr.replace( j, rFind.Size(), rReplace.ToCString());
466  }
467 
468  return String(retStr.c_str());
469  }
470 
472  {
473  return isalpha(ch) != 0;
474  }
475 
477  {
478  std::string value = rValue.ToCString();
479  std::string ext = rValue.ToCString();
480 
481  std::transform(value.begin(), value.end(), ext.begin(), tolower);
482 
483  return String(ext.c_str());
484  }
485 
487  {
488  std::string value = rValue.ToCString();
489  std::string ext = rValue.ToCString();
490 
491  std::transform(value.begin(), value.end(), ext.begin(), toupper);
492 
493  return String(ext.c_str());
494  }
495 
499 
501  {
502  m_String = "";
503  }
504 
506  {
507  return m_String;
508  }
509 
510  //StringBuilder& StringBuilder::operator << (char value)
511  //{
512  // m_String.Append(value);
513 
514  // return *this;
515  //}
516 
518  {
519  m_String.Append(karto::StringHelper::ToString(value));
520 
521  return *this;
522  }
523 
525  {
526  m_String.Append(karto::StringHelper::ToString(value));
527 
528  return *this;
529  }
530 
532  {
533  m_String.Append(karto::StringHelper::ToString(value));
534 
535  return *this;
536  }
537 
539  {
540  m_String.Append(karto::StringHelper::ToString(value));
541 
542  return *this;
543  }
544 
546  {
547  m_String.Append(karto::StringHelper::ToString(value));
548 
549  return *this;
550  }
551 
553  {
554  m_String.Append(karto::StringHelper::ToString(value));
555 
556  return *this;
557  }
558 
560  {
561  m_String.Append(karto::StringHelper::ToString(value));
562 
563  return *this;
564  }
565 
566 #if defined(__APPLE__) && !defined(__LP64__)
568  {
569  m_String.Append(karto::StringHelper::ToString(value));
570 
571  return *this;
572  }
573 #endif
574 
576  {
577  m_String.Append(karto::StringHelper::ToString(value));
578 
579  return *this;
580  }
581 
583  {
584  m_String.Append(karto::StringHelper::ToString(value));
585 
586  return *this;
587  }
588 
590  {
591  m_String.Append(rValue);
592 
593  return *this;
594  }
595 
597  {
598  m_String.Append(rValue.ToString());
599 
600  return *this;
601  }
602 
603 }
bool kt_bool
Definition: Types.h:145
std::size_t kt_size_t
Definition: Types.h:138
static String Replace(const String &rSource, const String &rFind, const String &rReplace)
int16_t kt_int16s
Definition: Types.h:96
static kt_bool FromString(const String &rStringValue, kt_bool &rValue)
void SetX(kt_double x)
Definition: Geometry.h:1372
kt_size_t FindFirstOf(const String &rValue) const
Definition: String.cpp:102
const String ToString() const
Definition: Geometry.cpp:192
static String Trim(const String &rValue)
void SetW(kt_double w)
Definition: Geometry.h:1426
float kt_float
Definition: Types.h:155
uint8_t kt_int8u
Definition: Types.h:91
static String ToUpperCase(const String &rValue)
uint32_t kt_int32u
Definition: Types.h:111
void SetBlue(kt_double blue)
Definition: Geometry.h:2958
void SetGreen(kt_double green)
Definition: Geometry.h:2940
StringBuilder & operator<<(kt_int8u value)
void SetPosition(const Vector3d &rPosition)
Definition: Geometry.h:2472
static String ToString(const char *value)
const String & ToString() const
const String ToString() const
Definition: Geometry.h:2499
int32_t kt_int32s
Definition: Types.h:106
double kt_double
Definition: Types.h:160
void SetZ(kt_double z)
Definition: Geometry.h:1408
void SetY(kt_double y)
Definition: Geometry.h:1390
void SetAlpha(kt_double alpha)
Definition: Geometry.h:2976
signed long long kt_int64s
Definition: Types.h:127
uint16_t kt_int16u
Definition: Types.h:101
const String ToString(kt_int32u precision=4) const
Definition: Geometry.h:2314
static kt_bool IsLetter(char ch)
void SetHeading(kt_double heading)
Definition: Geometry.h:2283
void SetX(kt_double x)
Definition: Geometry.h:2229
Definition: Any.cpp:20
static String ToLowerCase(const String &rValue)
const char * ToCString() const
Definition: String.cpp:72
unsigned long long kt_int64u
Definition: Types.h:132
void SetOrientation(const Quaternion &rOrientation)
Definition: Geometry.h:2490
void SetRed(kt_double red)
Definition: Geometry.h:2922
kt_size_t Size() const
Definition: String.cpp:77
const String ToString() const
Definition: Geometry.h:2985
void SetY(kt_double y)
Definition: Geometry.h:2247


nav2d_karto
Author(s): Sebastian Kasperski
autogenerated on Tue Nov 7 2017 06:02:36