Nebula
Loading...
Searching...
No Matches
jsonwriter.h
Go to the documentation of this file.
1#pragma once
2//------------------------------------------------------------------------------
11#include "io/streamwriter.h"
12#include "util/string.h"
13#include "util/stack.h"
14#include "util/bitfield.h"
15#include "util/stringatom.h"
16#include "util/variant.h"
17#include "util/blob.h"
18#include "util/bitfield.h"
19
20namespace pjson
21{
22 class value_variant;
23 class document;
24}
25
26//------------------------------------------------------------------------------
27namespace IO
28{
30{
32public:
34 JsonWriter();
36 virtual ~JsonWriter();
38 virtual bool Open();
40 virtual void Close();
41
43 void BeginArray(const char * nodeName = nullptr);
44
46 void BeginObject(const char * nodeName = nullptr);
48 void End();
49
51 template <typename T> void Add(const T & value, const Util::String & name = "");
53 template<unsigned int N> void Add(Util::BitField<N> const& value, const Util::String& name = "");
55 void Add(const char * value, const Util::String & name = "");
57// template <typename T> void Add(const Util::String & name, const T & value);
58
59 /*
61 void AddString(const Util::String & value);
63 void AddBool(bool value);
65 void AddInt(int value);
67 void AddFloat(float value);
69 void AddFloat2(const Math::vec2 & value);
71 void AddVec4(const Math::vec4 & value);
73 void AddMatrix44(const Math::mat4 & value);
75 void AddTransform44(const Math::transform44 & value);
76
78 void SetString(const Util::String& name, const Util::String& value);
80 void SetBool(const Util::String& name, bool value);
82 void SetInt(const Util::String& name, int value);
84 void SetFloat(const Util::String& name, float value);
86 void SetVec2(const Util::String& name, const Math::vec2& value);
88 void SetVec4(const Util::String& name, const Math::vec4& value);
90 void SetMat4(const Util::String& name, const Math::mat4& value);
92 void SetTransform44(const Util::String& name, const Math::transform44& value);
94 template<typename T> void Set(const Util::String& name, const T &value);
95 */
96
97private:
98
99 pjson::document * document;
102};
103
104template<> void JsonWriter::Add(const Util::String& value, const Util::String& name);
105template<> void JsonWriter::Add(const Util::StringAtom& value, const Util::String& name);
106template<> void JsonWriter::Add(const Util::FourCC& value, const Util::String& name);
107template<> void JsonWriter::Add(const bool& value, const Util::String& name);
108template<> void JsonWriter::Add(const char& value, const Util::String& name);
109template<> void JsonWriter::Add(const uchar& value, const Util::String& name);
110template<> void JsonWriter::Add(const int& value, const Util::String& name);
111template<> void JsonWriter::Add(const unsigned int& value, const Util::String& name);
112template<> void JsonWriter::Add(const int16_t& value, const Util::String& name);
113template<> void JsonWriter::Add(const uint16_t& value, const Util::String& name);
114template<> void JsonWriter::Add(const float& value, const Util::String& name);
115template<> void JsonWriter::Add(const double& value, const Util::String& name);
116template<> void JsonWriter::Add(const Math::vec3& value, const Util::String& name);
117template<> void JsonWriter::Add(const Math::vec4& value, const Util::String& name);
118template<> void JsonWriter::Add(const Math::vec2& value, const Util::String& name);
119template<> void JsonWriter::Add(const Math::mat4& value, const Util::String& name);
120template<> void JsonWriter::Add(const Math::transform44& value, const Util::String& name);
121template<> void JsonWriter::Add(const Util::Variant& value, const Util::String& name);
122template<> void JsonWriter::Add(const Util::Guid& value, const Util::String& name);
123template<> void JsonWriter::Add(const Util::Array<int>& value, const Util::String& name);
124template<> void JsonWriter::Add(const Util::Array<Util::String>& value, const Util::String& name);
125
126//------------------------------------------------------------------------------
129template<unsigned int N>
130inline void
132{
133 Util::Array<int> tempArr;
134 for (uint i = 0; i < N; i++)
135 {
136 if (value.IsSet(i))
137 {
138 tempArr.Append(i);
139 }
140 }
141 this->Add(tempArr, name);
142}
143
144
145} // namespace IO
146//------------------------------------------------------------------------------
147
JsonWriter()
constructor
Definition jsonwriter.cc:26
__DeclareClass(JsonWriter)
virtual bool Open()
begin writing the stream
Definition jsonwriter.cc:47
pjson::document * document
add a value to current object node
Definition jsonwriter.h:99
void BeginObject(const char *nodeName=nullptr)
begin a new node that can host key-value pairs
Definition jsonwriter.cc:100
virtual void Close()
end writing the stream
Definition jsonwriter.cc:66
void Add(const T &value, const Util::String &name="")
add a value to the current array node
virtual ~JsonWriter()
destructor
Definition jsonwriter.cc:35
void End()
end current object or array
Definition jsonwriter.cc:113
Util::Stack< pjson::value_variant * > hierarchy
Definition jsonwriter.h:100
void BeginArray(const char *nodeName=nullptr)
begin a new array node
Definition jsonwriter.cc:87
Util::Stack< Util::String > nameHierarchy
Definition jsonwriter.h:101
Stream writer classes provide a specialized write-interface for a stream.
Definition streamwriter.h:22
A 4x4 matrix which is described by translation, rotation and scale.
Definition transform44.h:20
Nebula's dynamic array class.
Definition array.h:60
void Append(const TYPE &first, const ELEM_TYPE &... elements)
Append multiple elements to the end of the array.
Definition array.h:1334
Implements large bit field.
Definition bitfield.h:24
constexpr bool IsSet(const uint64_t bitIndex) const
Check if single bit is set.
Definition bitfield.h:186
A four-character-code is a quasi-human-readable 32-bit-id.
Definition fourcc.h:19
Nebula's stack class (a FILO container).
Definition stack.h:19
A StringAtom.
Definition stringatom.h:22
An "any type" variable.
Definition variant.h:31
Instances of wrapped stream classes.
Definition multiplayerfeatureunit.cc:289
Definition jsonreader.h:25
A 4x4 single point precision float matrix.
Definition mat4.h:49
A 2-component float vector class.
Definition vec2.h:21
A 3D vector.
Definition vec3.h:37
A 4D vector.
Definition vec4.h:24
Nebula's universal string class.
Definition String.cs:8
unsigned char uchar
Definition types.h:35
unsigned int uint
Definition types.h:33