join 1.0
lightweight network framework library
Loading...
Searching...
No Matches
join::BasicJsonWriter< WriteMode > Class Template Reference

JSON writer class. More...

#include <json.hpp>

Public Member Functions

 BasicJsonWriter (std::ostream &document, size_t indentation=0)
 create instance.
 
 BasicJsonWriter (const BasicJsonWriter &other)=delete
 copy constructor.
 
BasicJsonWriter & operator= (const BasicJsonWriter &other)=delete
 copy assignment.
 
 BasicJsonWriter (BasicJsonWriter &&other)=delete
 move constructor.
 
BasicJsonWriter & operator= (BasicJsonWriter &&other)=delete
 move assignment.
 
 ~BasicJsonWriter ()=default
 destroy instance.
 
int setNull ()
 set null value.
 
int setBool (bool value)
 set boolean value.
 
int setInt (int32_t value)
 set integer value.
 
int setUint (uint32_t value)
 set unsigned integer value.
 
int setInt64 (int64_t value)
 set 64 bits integer value.
 
int setUint64 (uint64_t value)
 set unsigned 64 bits integer value.
 
template<JsonWriteMode Mode = WriteMode>
requires (Mode == JsonWriteMode::None)
int setDouble (double value)
 set real value.
 
template<JsonWriteMode Mode = WriteMode>
requires (Mode == JsonWriteMode::Canonical)
int setDouble (double value)
 set real value in canonical form.
 
int setString (std::string_view value)
 set string value.
 
int startArray (uint32_t size=0)
 start array.
 
int stopArray ()
 stop array.
 
int startObject (uint32_t size=0)
 start object.
 
template<JsonWriteMode Mode = WriteMode>
requires (Mode == JsonWriteMode::None)
const Object & members (const Object &object) const noexcept
 get object members in writing order.
 
template<JsonWriteMode Mode = WriteMode>
requires (Mode == JsonWriteMode::Canonical)
std::vector< std::reference_wrapper< const Member > > members (const Object &object) const
 get object members sorted by key in UTF-16 order.
 
int setKey (std::nullptr_t key)
 set null key.
 
int setKey (bool key)
 set boolean key.
 
int setKey (int32_t key)
 set integer key.
 
int setKey (uint32_t key)
 set unsigned integer key.
 
int setKey (int64_t key)
 set 64 bits integer key.
 
int setKey (uint64_t key)
 set unsigned 64 bits integer key.
 
int setKey (double key)
 set real key.
 
int setKey (std::string_view key)
 set string key.
 
int setKey (const char *key)
 set string key.
 
int stopObject ()
 stop object.
 
void flush ()
 flush buffered data to output stream.
 
void reset () noexcept
 reset the writer state, discarding buffered data.
 

Protected Member Functions

void writeInt (int32_t value)
 write integer value.
 
void writeUint (uint32_t value)
 write unsigned integer value.
 
void writeInt64 (int64_t value)
 write 64 bits integer value.
 
void writeUint64 (uint64_t value)
 write 64 bits unsigned integer value.
 
void writeDouble (double value)
 write real value.
 
void writeEscaped (std::string_view value)
 escape string value.
 
void append (char data)
 append character to output stream in batch.
 
void append (const char *data, uint32_t size)
 append data to output stream in batch.
 
void appendDigits (const char *digits, size_t length)
 append the digits of a number, read 20 bytes at a time.
 
void comma ()
 write comma.
 
void endLine ()
 write end of line.
 
void indent ()
 write indentation.
 
void newLine ()
 write end of line and indentation.
 
 __attribute__ ((noinline)) void indentLine()
 write end of line and indentation, out of the compact writing path.
 
void space ()
 write space.
 
void array ()
 add comma, go to line and indent if in array.
 
void endValue ()
 mark the end of a value, flushing the document once complete.
 

Protected Attributes

std::streambuf * _out
 underlying output stream.
 
char _buffer [1024] = {}
 output buffer.
 
size_t _size = 0
 output buffer size.
 
uint64_t _arrays [saxMaxDepth/64] = {}
 array flags of the open containers, one bit per depth.
 
size_t _depth = 0
 number of open containers.
 
size_t _indentation
 indentation.
 
bool _first = true
 is first element.
 

Detailed Description

template<JsonWriteMode WriteMode = JsonWriteMode::None>
class join::BasicJsonWriter< WriteMode >

JSON writer class.

Constructor & Destructor Documentation

◆ BasicJsonWriter() [1/3]

template<JsonWriteMode WriteMode = JsonWriteMode::None>
join::BasicJsonWriter< WriteMode >::BasicJsonWriter ( std::ostream & document,
size_t indentation = 0 )
inlineexplicit

create instance.

Parameters
documentJSON document to create.
indentationnumber of characters used to indent JSON.

◆ BasicJsonWriter() [2/3]

template<JsonWriteMode WriteMode = JsonWriteMode::None>
join::BasicJsonWriter< WriteMode >::BasicJsonWriter ( const BasicJsonWriter< WriteMode > & other)
delete

copy constructor.

Parameters
otherobject to copy.

◆ BasicJsonWriter() [3/3]

template<JsonWriteMode WriteMode = JsonWriteMode::None>
join::BasicJsonWriter< WriteMode >::BasicJsonWriter ( BasicJsonWriter< WriteMode > && other)
delete

move constructor.

Parameters
otherobject to move.

◆ ~BasicJsonWriter()

template<JsonWriteMode WriteMode = JsonWriteMode::None>
join::BasicJsonWriter< WriteMode >::~BasicJsonWriter ( )
default

destroy instance.

Member Function Documentation

◆ __attribute__()

template<JsonWriteMode WriteMode = JsonWriteMode::None>
join::BasicJsonWriter< WriteMode >::__attribute__ ( (noinline) )
inlineprotected

write end of line and indentation, out of the compact writing path.

◆ append() [1/2]

template<JsonWriteMode WriteMode = JsonWriteMode::None>
void join::BasicJsonWriter< WriteMode >::append ( char data)
inlineprotected

append character to output stream in batch.

Parameters
datacharacter to append to output stream.

◆ append() [2/2]

template<JsonWriteMode WriteMode = JsonWriteMode::None>
void join::BasicJsonWriter< WriteMode >::append ( const char * data,
uint32_t size )
inlineprotected

append data to output stream in batch.

Parameters
datadata to append to output stream.
sizedata size.

◆ appendDigits()

template<JsonWriteMode WriteMode = JsonWriteMode::None>
void join::BasicJsonWriter< WriteMode >::appendDigits ( const char * digits,
size_t length )
inlineprotected

append the digits of a number, read 20 bytes at a time.

Parameters
digitsdigits followed by enough readable bytes to read 20.
lengthnumber of digits.

◆ array()

template<JsonWriteMode WriteMode = JsonWriteMode::None>
void join::BasicJsonWriter< WriteMode >::array ( )
inlineprotected

add comma, go to line and indent if in array.

◆ comma()

template<JsonWriteMode WriteMode = JsonWriteMode::None>
void join::BasicJsonWriter< WriteMode >::comma ( )
inlineprotected

write comma.

◆ endLine()

template<JsonWriteMode WriteMode = JsonWriteMode::None>
void join::BasicJsonWriter< WriteMode >::endLine ( )
inlineprotected

write end of line.

◆ endValue()

template<JsonWriteMode WriteMode = JsonWriteMode::None>
void join::BasicJsonWriter< WriteMode >::endValue ( )
inlineprotected

mark the end of a value, flushing the document once complete.

◆ flush()

template<JsonWriteMode WriteMode = JsonWriteMode::None>
void join::BasicJsonWriter< WriteMode >::flush ( )
inline

flush buffered data to output stream.

◆ indent()

template<JsonWriteMode WriteMode = JsonWriteMode::None>
void join::BasicJsonWriter< WriteMode >::indent ( )
inlineprotected

write indentation.

◆ members() [1/2]

template<JsonWriteMode WriteMode = JsonWriteMode::None>
template<JsonWriteMode Mode = WriteMode>
requires (Mode == JsonWriteMode::Canonical)
std::vector< std::reference_wrapper< const Member > > join::BasicJsonWriter< WriteMode >::members ( const Object & object) const
inline

get object members sorted by key in UTF-16 order.

Parameters
objectobject to write.
Returns
sorted object members.

◆ members() [2/2]

template<JsonWriteMode WriteMode = JsonWriteMode::None>
template<JsonWriteMode Mode = WriteMode>
requires (Mode == JsonWriteMode::None)
const Object & join::BasicJsonWriter< WriteMode >::members ( const Object & object) const
inlinenoexcept

get object members in writing order.

Parameters
objectobject to write.
Returns
object members in insertion order.

◆ newLine()

template<JsonWriteMode WriteMode = JsonWriteMode::None>
void join::BasicJsonWriter< WriteMode >::newLine ( )
inlineprotected

write end of line and indentation.

◆ operator=() [1/2]

template<JsonWriteMode WriteMode = JsonWriteMode::None>
BasicJsonWriter & join::BasicJsonWriter< WriteMode >::operator= ( BasicJsonWriter< WriteMode > && other)
delete

move assignment.

Parameters
otherobject to move.
Returns
a reference of the current object.

◆ operator=() [2/2]

template<JsonWriteMode WriteMode = JsonWriteMode::None>
BasicJsonWriter & join::BasicJsonWriter< WriteMode >::operator= ( const BasicJsonWriter< WriteMode > & other)
delete

copy assignment.

Parameters
otherobject to copy.
Returns
a reference of the current object.

◆ reset()

template<JsonWriteMode WriteMode = JsonWriteMode::None>
void join::BasicJsonWriter< WriteMode >::reset ( )
inlinenoexcept

reset the writer state, discarding buffered data.

◆ setBool()

template<JsonWriteMode WriteMode = JsonWriteMode::None>
int join::BasicJsonWriter< WriteMode >::setBool ( bool value)
inline

set boolean value.

Parameters
valueboolean value to set.
Returns
0 on success, -1 otherwise.

◆ setDouble() [1/2]

template<JsonWriteMode WriteMode = JsonWriteMode::None>
template<JsonWriteMode Mode = WriteMode>
requires (Mode == JsonWriteMode::None)
int join::BasicJsonWriter< WriteMode >::setDouble ( double value)
inline

set real value.

Parameters
valuereal value to set.
Returns
0 on success, -1 otherwise.

◆ setDouble() [2/2]

template<JsonWriteMode WriteMode = JsonWriteMode::None>
template<JsonWriteMode Mode = WriteMode>
requires (Mode == JsonWriteMode::Canonical)
int join::BasicJsonWriter< WriteMode >::setDouble ( double value)
inline

set real value in canonical form.

Parameters
valuereal value to set.
Returns
0 on success, -1 otherwise.

◆ setInt()

template<JsonWriteMode WriteMode = JsonWriteMode::None>
int join::BasicJsonWriter< WriteMode >::setInt ( int32_t value)
inline

set integer value.

Parameters
valueinteger value to set.
Returns
0 on success, -1 otherwise.

◆ setInt64()

template<JsonWriteMode WriteMode = JsonWriteMode::None>
int join::BasicJsonWriter< WriteMode >::setInt64 ( int64_t value)
inline

set 64 bits integer value.

Parameters
value64 bits integer value to set.
Returns
0 on success, -1 otherwise.

◆ setKey() [1/9]

template<JsonWriteMode WriteMode = JsonWriteMode::None>
int join::BasicJsonWriter< WriteMode >::setKey ( bool key)
inline

set boolean key.

Parameters
keyobject key.
Returns
-1.

◆ setKey() [2/9]

template<JsonWriteMode WriteMode = JsonWriteMode::None>
int join::BasicJsonWriter< WriteMode >::setKey ( const char * key)
inline

set string key.

Parameters
keyobject key.
Returns
0 on success, -1 otherwise.

◆ setKey() [3/9]

template<JsonWriteMode WriteMode = JsonWriteMode::None>
int join::BasicJsonWriter< WriteMode >::setKey ( double key)
inline

set real key.

Parameters
keyobject key.
Returns
-1.

◆ setKey() [4/9]

template<JsonWriteMode WriteMode = JsonWriteMode::None>
int join::BasicJsonWriter< WriteMode >::setKey ( int32_t key)
inline

set integer key.

Parameters
keyobject key.
Returns
-1.

◆ setKey() [5/9]

template<JsonWriteMode WriteMode = JsonWriteMode::None>
int join::BasicJsonWriter< WriteMode >::setKey ( int64_t key)
inline

set 64 bits integer key.

Parameters
keyobject key.
Returns
-1.

◆ setKey() [6/9]

template<JsonWriteMode WriteMode = JsonWriteMode::None>
int join::BasicJsonWriter< WriteMode >::setKey ( std::nullptr_t key)
inline

set null key.

Parameters
keyobject key.
Returns
-1.

◆ setKey() [7/9]

template<JsonWriteMode WriteMode = JsonWriteMode::None>
int join::BasicJsonWriter< WriteMode >::setKey ( std::string_view key)
inline

set string key.

Parameters
keyobject key.
Returns
0 on success, -1 otherwise.

◆ setKey() [8/9]

template<JsonWriteMode WriteMode = JsonWriteMode::None>
int join::BasicJsonWriter< WriteMode >::setKey ( uint32_t key)
inline

set unsigned integer key.

Parameters
keyobject key.
Returns
-1.

◆ setKey() [9/9]

template<JsonWriteMode WriteMode = JsonWriteMode::None>
int join::BasicJsonWriter< WriteMode >::setKey ( uint64_t key)
inline

set unsigned 64 bits integer key.

Parameters
keyobject key.
Returns
-1.

◆ setNull()

template<JsonWriteMode WriteMode = JsonWriteMode::None>
int join::BasicJsonWriter< WriteMode >::setNull ( )
inline

set null value.

Returns
0 on success, -1 otherwise.

◆ setString()

template<JsonWriteMode WriteMode = JsonWriteMode::None>
int join::BasicJsonWriter< WriteMode >::setString ( std::string_view value)
inline

set string value.

Parameters
valuestring value to set.
Returns
0 on success, -1 otherwise.

◆ setUint()

template<JsonWriteMode WriteMode = JsonWriteMode::None>
int join::BasicJsonWriter< WriteMode >::setUint ( uint32_t value)
inline

set unsigned integer value.

Parameters
valueunsigned integer value to set.
Returns
0 on success, -1 otherwise.

◆ setUint64()

template<JsonWriteMode WriteMode = JsonWriteMode::None>
int join::BasicJsonWriter< WriteMode >::setUint64 ( uint64_t value)
inline

set unsigned 64 bits integer value.

Parameters
valueunsigned 64 bits integer value to set.
Returns
0 on success, -1 otherwise.

◆ space()

template<JsonWriteMode WriteMode = JsonWriteMode::None>
void join::BasicJsonWriter< WriteMode >::space ( )
inlineprotected

write space.

◆ startArray()

template<JsonWriteMode WriteMode = JsonWriteMode::None>
int join::BasicJsonWriter< WriteMode >::startArray ( uint32_t size = 0)
inline

start array.

Parameters
sizearray size (ignored).
Returns
0 on success, -1 otherwise.

◆ startObject()

template<JsonWriteMode WriteMode = JsonWriteMode::None>
int join::BasicJsonWriter< WriteMode >::startObject ( uint32_t size = 0)
inline

start object.

Parameters
sizeobject size (ignored).
Returns
0 on success, -1 otherwise.

◆ stopArray()

template<JsonWriteMode WriteMode = JsonWriteMode::None>
int join::BasicJsonWriter< WriteMode >::stopArray ( )
inline

stop array.

Returns
0 on success, -1 otherwise.

◆ stopObject()

template<JsonWriteMode WriteMode = JsonWriteMode::None>
int join::BasicJsonWriter< WriteMode >::stopObject ( )
inline

stop object.

Returns
0 on success, -1 otherwise.

◆ writeDouble()

template<JsonWriteMode WriteMode = JsonWriteMode::None>
void join::BasicJsonWriter< WriteMode >::writeDouble ( double value)
inlineprotected

write real value.

Parameters
valuereal value to write.

◆ writeEscaped()

template<JsonWriteMode WriteMode = JsonWriteMode::None>
void join::BasicJsonWriter< WriteMode >::writeEscaped ( std::string_view value)
inlineprotected

escape string value.

Parameters
valuestring value to escape.

◆ writeInt()

template<JsonWriteMode WriteMode = JsonWriteMode::None>
void join::BasicJsonWriter< WriteMode >::writeInt ( int32_t value)
inlineprotected

write integer value.

Parameters
valueinteger value to write.

◆ writeInt64()

template<JsonWriteMode WriteMode = JsonWriteMode::None>
void join::BasicJsonWriter< WriteMode >::writeInt64 ( int64_t value)
inlineprotected

write 64 bits integer value.

Parameters
value64 bits integer value to write.

◆ writeUint()

template<JsonWriteMode WriteMode = JsonWriteMode::None>
void join::BasicJsonWriter< WriteMode >::writeUint ( uint32_t value)
inlineprotected

write unsigned integer value.

Parameters
valueunsigned integer value to write.

◆ writeUint64()

template<JsonWriteMode WriteMode = JsonWriteMode::None>
void join::BasicJsonWriter< WriteMode >::writeUint64 ( uint64_t value)
inlineprotected

write 64 bits unsigned integer value.

Parameters
value64 bits unsigned integer value to write.

Member Data Documentation

◆ _arrays

template<JsonWriteMode WriteMode = JsonWriteMode::None>
uint64_t join::BasicJsonWriter< WriteMode >::_arrays[saxMaxDepth/64] = {}
protected

array flags of the open containers, one bit per depth.

◆ _buffer

template<JsonWriteMode WriteMode = JsonWriteMode::None>
char join::BasicJsonWriter< WriteMode >::_buffer[1024] = {}
protected

output buffer.

◆ _depth

template<JsonWriteMode WriteMode = JsonWriteMode::None>
size_t join::BasicJsonWriter< WriteMode >::_depth = 0
protected

number of open containers.

◆ _first

template<JsonWriteMode WriteMode = JsonWriteMode::None>
bool join::BasicJsonWriter< WriteMode >::_first = true
protected

is first element.

◆ _indentation

template<JsonWriteMode WriteMode = JsonWriteMode::None>
size_t join::BasicJsonWriter< WriteMode >::_indentation
protected

indentation.

◆ _out

template<JsonWriteMode WriteMode = JsonWriteMode::None>
std::streambuf* join::BasicJsonWriter< WriteMode >::_out
protected

underlying output stream.

◆ _size

template<JsonWriteMode WriteMode = JsonWriteMode::None>
size_t join::BasicJsonWriter< WriteMode >::_size = 0
protected

output buffer size.


The documentation for this class was generated from the following file: