gwnavruntime/containers/stringstream.h Source File

stringstream.h
Go to the documentation of this file.
1 /*
2 * Copyright 2016 Autodesk, Inc. All rights reserved.
3 * Use of this software is subject to the terms of the Autodesk license agreement and any attachments or Appendices thereto provided at the time of installation or download,
4 * or which otherwise accompanies this software in either electronic or hard copy form, or which is signed by you and accepted by Autodesk.
5 */
6 
7 
8 #pragma once
9 
13 
14 namespace Kaim
15 {
16 
17 static const char Endl = '\n';
18 
19 class StringStream
20 {
21 private:
22  KY_DEFINE_NEW_DELETE_OPERATORS(Stat_Default_Mem)
23  KY_CLASS_WITHOUT_COPY(StringStream)
24 
25 public:
26  StringStream() : m_ownString(), m_string(m_ownString) {}
27 
28  explicit StringStream(String& str) : m_string(str) {}
29 
30  const String& Str() const { return m_string; }
31 
32  const char* CStr() const { return m_string.ToCStr(); }
33 
34  void Clear() { m_string.Clear(); }
35 
36  StringStream& AppendString(const char* str, KyUInt32 length);
37 
38  StringStream& AppendChar(char value) { return AppendString(&value, 1); }
39 
40  template <typename T>
41  StringStream& AppendValue(T value, const char* format)
42  {
43  char tempBuffer[64];
44  KyUInt32 length = (KyUInt32)SFsprintf(tempBuffer, 64, format, value);
45  AppendString(tempBuffer, length);
46  return *this;
47  }
48 
49 private:
50  String m_ownString;
51  String& m_string;
52 };
53 
54 
55 inline StringStream& operator<<(StringStream& ss, KyInt32 value) { return ss.AppendValue(value, "%i"); }
56 inline StringStream& operator<<(StringStream& ss, KyUInt32 value) { return ss.AppendValue(value, "%u"); }
57 inline StringStream& operator<<(StringStream& ss, KyInt64 value) { return ss.AppendValue((KyInt32)value, "%i"); }
58 inline StringStream& operator<<(StringStream& ss, KyUInt64 value) { return ss.AppendValue((KyUInt32)value, "%u"); }
59 inline StringStream& operator<<(StringStream& ss, KyFloat32 value) { return ss.AppendValue(value, "%.9g"); }
60 inline StringStream& operator<<(StringStream& ss, KyFloat64 value) { return ss.AppendValue(value, "%.17g"); }
61 inline StringStream& operator<<(StringStream& ss, bool value) { return value ? ss.AppendString("true", 4) : ss.AppendString("false", 5); }
62 inline StringStream& operator<<(StringStream& ss, char value) { return ss.AppendChar(value); }
63 inline StringStream& operator<<(StringStream& ss, const char* str)
64 {
65  if (str == nullptr)
66  return ss;
67  return ss.AppendString(str, (KyUInt32)(SFstrlen(str)));
68 }
69 
70 
71 } // namespace Kaim
72 
std::uint64_t KyUInt64
uint64_t
Definition: types.h:30
std::uint32_t KyUInt32
uint32_t
Definition: types.h:29
#define KY_CLASS_WITHOUT_COPY(ClassName)
Define to forbid copy constructor and copy assignment.
Definition: types.h:196
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:132
std::int64_t KyInt64
int64_t
Definition: types.h:25
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
std::int32_t KyInt32
int32_t
Definition: types.h:24
double KyFloat64
double
Definition: types.h:33
float KyFloat32
float
Definition: types.h:32