Plasma Engine  2.0
Loading...
Searching...
No Matches
plStandardJSONWriter Class Reference

Implements a standard compliant JSON writer, all numbers are output as double values. More...

#include <JSONWriter.h>

Inheritance diagram for plStandardJSONWriter:

Classes

struct  CommaWriter
 
struct  JSONState
 

Public Member Functions

 plStandardJSONWriter ()
 Constructor.
 
 ~plStandardJSONWriter ()
 Destructor.
 
void SetOutputStream (plStreamWriter *pOutput)
 All output is written to this binary stream.
 
virtual void WriteBool (bool value) override
 Writes a bool to the JSON file. Can only be called between BeginVariable() / EndVariable() or BeginArray() / EndArray().
 
virtual void WriteInt32 (plInt32 value) override
 Writes an int32 to the JSON file. Can only be called between BeginVariable() / EndVariable() or BeginArray() / EndArray().
 
virtual void WriteUInt32 (plUInt32 value) override
 Writes a uint32 to the JSON file. Can only be called between BeginVariable() / EndVariable() or BeginArray() / EndArray().
 
virtual void WriteInt64 (plInt64 value) override
 Writes an int64 to the JSON file. Can only be called between BeginVariable() / EndVariable() or BeginArray() / EndArray().
 
virtual void WriteUInt64 (plUInt64 value) override
 Writes a uint64 to the JSON file. Can only be called between BeginVariable() / EndVariable() or BeginArray() / EndArray().
 
virtual void WriteFloat (float value) override
 Writes a float to the JSON file. Can only be called between BeginVariable() / EndVariable() or BeginArray() / EndArray().
 
virtual void WriteDouble (double value) override
 Writes a double to the JSON file. Can only be called between BeginVariable() / EndVariable() or BeginArray() / EndArray().
 
virtual void WriteString (plStringView value) override
 Writes a string to the JSON file. Can only be called between BeginVariable() / EndVariable() or BeginArray() / EndArray().
 
virtual void WriteNULL () override
 Writes the value 'null' to the JSON file. Can only be called between BeginVariable() / EndVariable() or BeginArray() / EndArray().
 
virtual void WriteTime (plTime value) override
 Writes the time value as a double (i.e. redirects to WriteDouble()).
 
virtual void WriteColor (const plColor &value) override
 Outputs the value via WriteVec4().
 
virtual void WriteColorGamma (const plColorGammaUB &value) override
 Outputs the value via WriteVec4().
 
virtual void WriteVec2 (const plVec2 &value) override
 Outputs the value via WriteBinaryData().
 
virtual void WriteVec3 (const plVec3 &value) override
 Outputs the value via WriteBinaryData().
 
virtual void WriteVec4 (const plVec4 &value) override
 Outputs the value via WriteBinaryData().
 
virtual void WriteVec2I32 (const plVec2I32 &value) override
 Outputs the value via WriteBinaryData().
 
virtual void WriteVec3I32 (const plVec3I32 &value) override
 Outputs the value via WriteBinaryData().
 
virtual void WriteVec4I32 (const plVec4I32 &value) override
 Outputs the value via WriteBinaryData().
 
virtual void WriteQuat (const plQuat &value) override
 Outputs the value via WriteBinaryData().
 
virtual void WriteMat3 (const plMat3 &value) override
 Outputs the value via WriteBinaryData().
 
virtual void WriteMat4 (const plMat4 &value) override
 Outputs the value via WriteBinaryData().
 
virtual void WriteUuid (const plUuid &value) override
 Outputs the value via WriteBinaryData().
 
virtual void WriteAngle (plAngle value) override
 Writes a float to the JSON file. Can only be called between BeginVariable() / EndVariable() or BeginArray() / EndArray().
 
virtual void WriteDataBuffer (const plDataBuffer &value) override
 Outputs the value via WriteBinaryData().
 
virtual void WriteBinaryData (plStringView sDataType, const void *pData, plUInt32 uiBytes, plStringView sValueString=nullptr) override
 Implements the MongoDB way of writing binary data. First writes a "$type" variable, then a "$binary" variable that represents the raw data (Hex encoded, little endian).
 
virtual void BeginVariable (plStringView sName) override
 Begins outputting a variable. szName is the variable name.
 
virtual void EndVariable () override
 Ends outputting a variable.
 
virtual void BeginArray (plStringView sName={}) override
 Begins outputting an array variable.
 
virtual void EndArray () override
 Ends outputting an array variable.
 
virtual void BeginObject (plStringView sName={}) override
 Begins outputting an object variable.
 
virtual void EndObject () override
 Ends outputting an object variable.
 
- Public Member Functions inherited from plJSONWriter
 plJSONWriter ()
 Constructor.
 
virtual ~plJSONWriter ()
 Destructor.
 
void SetWhitespaceMode (WhitespaceMode whitespaceMode)
 Configures how much whitespace is output.
 
void SetArrayMode (ArrayMode arrayMode)
 Configures how arrays are written.
 
void AddVariableBool (plStringView sName, bool value)
 Shorthand for "BeginVariable(szName); WriteBool(value); EndVariable(); ".
 
void AddVariableInt32 (plStringView sName, plInt32 value)
 Shorthand for "BeginVariable(szName); WriteInt32(value); EndVariable(); ".
 
void AddVariableUInt32 (plStringView sName, plUInt32 value)
 Shorthand for "BeginVariable(szName); WriteUInt32(value); EndVariable(); ".
 
void AddVariableInt64 (plStringView sName, plInt64 value)
 Shorthand for "BeginVariable(szName); WriteInt64(value); EndVariable(); ".
 
void AddVariableUInt64 (plStringView sName, plUInt64 value)
 Shorthand for "BeginVariable(szName); WriteUInt64(value); EndVariable(); ".
 
void AddVariableFloat (plStringView sName, float value)
 Shorthand for "BeginVariable(szName); WriteFloat(value); EndVariable(); ".
 
void AddVariableDouble (plStringView sName, double value)
 Shorthand for "BeginVariable(szName); WriteDouble(value); EndVariable(); ".
 
void AddVariableString (plStringView sName, plStringView value)
 Shorthand for "BeginVariable(szName); WriteString(value); EndVariable(); ".
 
void AddVariableNULL (plStringView sName)
 Shorthand for "BeginVariable(szName); WriteNULL(value); EndVariable(); ".
 
void AddVariableTime (plStringView sName, plTime value)
 Shorthand for "BeginVariable(szName); WriteTime(value); EndVariable(); ".
 
void AddVariableUuid (plStringView sName, plUuid value)
 Shorthand for "BeginVariable(szName); WriteUuid(value); EndVariable(); ".
 
void AddVariableAngle (plStringView sName, plAngle value)
 Shorthand for "BeginVariable(szName); WriteAngle(value); EndVariable(); ".
 
void AddVariableColor (plStringView sName, const plColor &value)
 Shorthand for "BeginVariable(szName); WriteColor(value); EndVariable(); ".
 
void AddVariableColorGamma (plStringView sName, const plColorGammaUB &value)
 Shorthand for "BeginVariable(szName); WriteColorGamma(value); EndVariable(); ".
 
void AddVariableVec2 (plStringView sName, const plVec2 &value)
 Shorthand for "BeginVariable(szName); WriteVec2(value); EndVariable(); ".
 
void AddVariableVec3 (plStringView sName, const plVec3 &value)
 Shorthand for "BeginVariable(szName); WriteVec3(value); EndVariable(); ".
 
void AddVariableVec4 (plStringView sName, const plVec4 &value)
 Shorthand for "BeginVariable(szName); WriteVec4(value); EndVariable(); ".
 
void AddVariableVec2I32 (plStringView sName, const plVec2I32 &value)
 Shorthand for "BeginVariable(szName); WriteVec2I32(value); EndVariable(); ".
 
void AddVariableVec3I32 (plStringView sName, const plVec3I32 &value)
 Shorthand for "BeginVariable(szName); WriteVec3I32(value); EndVariable(); ".
 
void AddVariableVec4I32 (plStringView sName, const plVec4I32 &value)
 Shorthand for "BeginVariable(szName); WriteVec4I32(value); EndVariable(); ".
 
void AddVariableQuat (plStringView sName, const plQuat &value)
 Shorthand for "BeginVariable(szName); WriteQuat(value); EndVariable(); ".
 
void AddVariableMat3 (plStringView sName, const plMat3 &value)
 Shorthand for "BeginVariable(szName); WriteMat3(value); EndVariable(); ".
 
void AddVariableMat4 (plStringView sName, const plMat4 &value)
 Shorthand for "BeginVariable(szName); WriteMat4(value); EndVariable(); ".
 
void AddVariableDataBuffer (plStringView sName, const plDataBuffer &value)
 Shorthand for "BeginVariable(szName); WriteDataBuffer(value); EndVariable(); ".
 
void AddVariableVariant (plStringView sName, const plVariant &value)
 Shorthand for "BeginVariable(szName); WriteVariant(value); EndVariable(); ".
 
virtual void WriteVariant (const plVariant &value)
 The default implementation dispatches all supported types to WriteBool, WriteInt32, etc. and asserts on the more complex types.
 
bool HadWriteError () const
 Indicates if an error was encountered while writing.
 

Protected Types

enum  State {
  Invalid , Empty , Variable , Object ,
  NamedObject , Array , NamedArray
}
 

Protected Member Functions

void End ()
 
void OutputString (plStringView s)
 
void OutputEscapedString (plStringView s)
 
void OutputIndentation ()
 
- Protected Member Functions inherited from plJSONWriter
void SetWriteErrorState ()
 called internally when there was an error during writing
 

Protected Attributes

plInt32 m_iIndentation
 
plStreamWriterm_pOutput
 
plHybridArray< JSONState, 16 > m_StateStack
 
- Protected Attributes inherited from plJSONWriter
WhitespaceMode m_WhitespaceMode = WhitespaceMode::All
 
ArrayMode m_ArrayMode = ArrayMode::InOneLine
 

Additional Inherited Members

- Public Types inherited from plJSONWriter
enum class  WhitespaceMode {
  All , LessIndentation , NoIndentation , NewlinesOnly ,
  None
}
 Modes to configure how much whitespace the JSON writer will output. More...
 
enum class  ArrayMode { InOneLine , OneLinePerItem }
 Modes to configure how arrays are written. More...
 

Detailed Description

Implements a standard compliant JSON writer, all numbers are output as double values.

plStandardJSONWriter also implements WriteBinaryData() and the functions WriteVec2() etc., for which there is no standard way to implement them in JSON. WriteVec2() etc. will simply redirect to WriteBinaryData(), which in turn implements the MongoDB convention of outputting binary data. I.e. it will turn the data into a JSON object which contains one variable called "$type" that identifies the data type, and one variable called "$binary" which contains the raw binary data Hex encoded in little endian format. If you want to write a fully standard compliant JSON file, just don't output any of these types.

Member Function Documentation

◆ BeginArray()

void plStandardJSONWriter::BeginArray ( plStringView sName = {})
overridevirtual

Begins outputting an array variable.

If szName is nullptr this will create an anonymous array, which is necessary when you want to put an array as a value into another array. BeginArray() with a non-nullptr value for szName is identical to calling BeginVariable() first. In this case EndArray() will also end the variable definition, so no additional call to EndVariable() is required.

Implements plJSONWriter.

◆ BeginObject()

void plStandardJSONWriter::BeginObject ( plStringView sName = {})
overridevirtual

Begins outputting an object variable.

If szName is nullptr this will create an anonymous object, which is necessary when you want to put an object as a value into an array. BeginObject() with a non-nullptr value for szName is identical to calling BeginVariable() first. In this case EndObject() will also end the variable definition, so no additional call to EndVariable() is required.

Implements plJSONWriter.

◆ BeginVariable()

void plStandardJSONWriter::BeginVariable ( plStringView sName)
overridevirtual

Begins outputting a variable. szName is the variable name.

Between BeginVariable() and EndVariable() you can call the WriteXYZ functions once to write out the variable's data. You can also call BeginArray() and BeginObject() without a variable name to output an array or object variable.

Implements plJSONWriter.

◆ EndArray()

void plStandardJSONWriter::EndArray ( )
overridevirtual

Ends outputting an array variable.

Implements plJSONWriter.

◆ EndObject()

void plStandardJSONWriter::EndObject ( )
overridevirtual

Ends outputting an object variable.

Implements plJSONWriter.

◆ EndVariable()

void plStandardJSONWriter::EndVariable ( )
overridevirtual

Ends outputting a variable.

Implements plJSONWriter.

◆ WriteAngle()

void plStandardJSONWriter::WriteAngle ( plAngle value)
overridevirtual

Writes a float to the JSON file. Can only be called between BeginVariable() / EndVariable() or BeginArray() / EndArray().

Implements plJSONWriter.

◆ WriteBinaryData()

void plStandardJSONWriter::WriteBinaryData ( plStringView sDataType,
const void * pData,
plUInt32 uiBytes,
plStringView sValueString = nullptr )
overridevirtual

Implements the MongoDB way of writing binary data. First writes a "$type" variable, then a "$binary" variable that represents the raw data (Hex encoded, little endian).

Implements plJSONWriter.

◆ WriteBool()

void plStandardJSONWriter::WriteBool ( bool value)
overridevirtual

Writes a bool to the JSON file. Can only be called between BeginVariable() / EndVariable() or BeginArray() / EndArray().

Implements plJSONWriter.

◆ WriteColor()

void plStandardJSONWriter::WriteColor ( const plColor & value)
overridevirtual

Outputs the value via WriteVec4().

Implements plJSONWriter.

◆ WriteColorGamma()

void plStandardJSONWriter::WriteColorGamma ( const plColorGammaUB & value)
overridevirtual

Outputs the value via WriteVec4().

Implements plJSONWriter.

◆ WriteDataBuffer()

void plStandardJSONWriter::WriteDataBuffer ( const plDataBuffer & value)
overridevirtual

Outputs the value via WriteBinaryData().

Implements plJSONWriter.

◆ WriteDouble()

void plStandardJSONWriter::WriteDouble ( double value)
overridevirtual

Writes a double to the JSON file. Can only be called between BeginVariable() / EndVariable() or BeginArray() / EndArray().

Implements plJSONWriter.

◆ WriteFloat()

void plStandardJSONWriter::WriteFloat ( float value)
overridevirtual

Writes a float to the JSON file. Can only be called between BeginVariable() / EndVariable() or BeginArray() / EndArray().

Implements plJSONWriter.

◆ WriteInt32()

void plStandardJSONWriter::WriteInt32 ( plInt32 value)
overridevirtual

Writes an int32 to the JSON file. Can only be called between BeginVariable() / EndVariable() or BeginArray() / EndArray().

Implements plJSONWriter.

◆ WriteInt64()

void plStandardJSONWriter::WriteInt64 ( plInt64 value)
overridevirtual

Writes an int64 to the JSON file. Can only be called between BeginVariable() / EndVariable() or BeginArray() / EndArray().

Implements plJSONWriter.

◆ WriteMat3()

void plStandardJSONWriter::WriteMat3 ( const plMat3 & value)
overridevirtual

Outputs the value via WriteBinaryData().

Implements plJSONWriter.

◆ WriteMat4()

void plStandardJSONWriter::WriteMat4 ( const plMat4 & value)
overridevirtual

Outputs the value via WriteBinaryData().

Implements plJSONWriter.

◆ WriteNULL()

void plStandardJSONWriter::WriteNULL ( )
overridevirtual

Writes the value 'null' to the JSON file. Can only be called between BeginVariable() / EndVariable() or BeginArray() / EndArray().

Implements plJSONWriter.

◆ WriteQuat()

void plStandardJSONWriter::WriteQuat ( const plQuat & value)
overridevirtual

Outputs the value via WriteBinaryData().

Implements plJSONWriter.

◆ WriteString()

void plStandardJSONWriter::WriteString ( plStringView value)
overridevirtual

Writes a string to the JSON file. Can only be called between BeginVariable() / EndVariable() or BeginArray() / EndArray().

Implements plJSONWriter.

◆ WriteTime()

void plStandardJSONWriter::WriteTime ( plTime value)
overridevirtual

Writes the time value as a double (i.e. redirects to WriteDouble()).

Implements plJSONWriter.

◆ WriteUInt32()

void plStandardJSONWriter::WriteUInt32 ( plUInt32 value)
overridevirtual

Writes a uint32 to the JSON file. Can only be called between BeginVariable() / EndVariable() or BeginArray() / EndArray().

Implements plJSONWriter.

◆ WriteUInt64()

void plStandardJSONWriter::WriteUInt64 ( plUInt64 value)
overridevirtual

Writes a uint64 to the JSON file. Can only be called between BeginVariable() / EndVariable() or BeginArray() / EndArray().

Implements plJSONWriter.

◆ WriteUuid()

void plStandardJSONWriter::WriteUuid ( const plUuid & value)
overridevirtual

Outputs the value via WriteBinaryData().

Implements plJSONWriter.

◆ WriteVec2()

void plStandardJSONWriter::WriteVec2 ( const plVec2 & value)
overridevirtual

Outputs the value via WriteBinaryData().

Implements plJSONWriter.

◆ WriteVec2I32()

void plStandardJSONWriter::WriteVec2I32 ( const plVec2I32 & value)
overridevirtual

Outputs the value via WriteBinaryData().

Implements plJSONWriter.

◆ WriteVec3()

void plStandardJSONWriter::WriteVec3 ( const plVec3 & value)
overridevirtual

Outputs the value via WriteBinaryData().

Implements plJSONWriter.

◆ WriteVec3I32()

void plStandardJSONWriter::WriteVec3I32 ( const plVec3I32 & value)
overridevirtual

Outputs the value via WriteBinaryData().

Implements plJSONWriter.

◆ WriteVec4()

void plStandardJSONWriter::WriteVec4 ( const plVec4 & value)
overridevirtual

Outputs the value via WriteBinaryData().

Implements plJSONWriter.

◆ WriteVec4I32()

void plStandardJSONWriter::WriteVec4I32 ( const plVec4I32 & value)
overridevirtual

Outputs the value via WriteBinaryData().

Implements plJSONWriter.


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