ezEngine Release 26.3
Loading...
Searching...
No Matches
ezOpenDdlWriter Class Reference

Writes OpenDDL documents to a stream with configurable formatting. More...

#include <OpenDdlWriter.h>

Classes

struct  DdlState
 

Public Types

enum class  TypeStringMode { Compliant , ShortenedUnsignedInt , Shortest }
 Controls how primitive type names are written in the output. More...
 
enum class  FloatPrecisionMode { Readable , Exact }
 Controls how floating-point values are formatted in the output. More...
 

Public Member Functions

 ezOpenDdlWriter ()
 Constructor.
 
void SetOutputStream (ezStreamWriter *pOutput)
 All output is written to this binary stream.
 
void SetCompactMode (bool bCompact)
 Configures how much whitespace is output.
 
void SetPrimitiveTypeStringMode (TypeStringMode mode)
 Configures how verbose the type strings are going to be written.
 
void SetFloatPrecisionMode (FloatPrecisionMode mode)
 Configures how float values are output.
 
FloatPrecisionMode GetFloatPrecisionMode () const
 Returns how float values are output.
 
void SetIndentation (ezInt8 iIndentation)
 Sets the base indentation level for output formatting.
 
void BeginObject (ezStringView sType, ezStringView sName={}, bool bGlobalName=false, bool bSingleLine=false)
 Begins outputting an object.
 
void EndObject ()
 Ends outputting an object.
 
void BeginPrimitiveList (ezOpenDdlPrimitiveType type, ezStringView sName={}, bool bGlobalName=false)
 Begins outputting a list of primitives of the given type.
 
void EndPrimitiveList ()
 Ends outputting the list of primitives.
 
void WriteBool (const bool *pValues, ezUInt32 uiCount=1)
 Writes a number of values to the primitive list. Can be called multiple times between BeginPrimitiveList() / EndPrimitiveList().
 
void WriteInt8 (const ezInt8 *pValues, ezUInt32 uiCount=1)
 Writes a number of values to the primitive list. Can be called multiple times between BeginPrimitiveList() / EndPrimitiveList().
 
void WriteInt16 (const ezInt16 *pValues, ezUInt32 uiCount=1)
 Writes a number of values to the primitive list. Can be called multiple times between BeginPrimitiveList() / EndPrimitiveList().
 
void WriteInt32 (const ezInt32 *pValues, ezUInt32 uiCount=1)
 Writes a number of values to the primitive list. Can be called multiple times between BeginPrimitiveList() / EndPrimitiveList().
 
void WriteInt64 (const ezInt64 *pValues, ezUInt32 uiCount=1)
 Writes a number of values to the primitive list. Can be called multiple times between BeginPrimitiveList() / EndPrimitiveList().
 
void WriteUInt8 (const ezUInt8 *pValues, ezUInt32 uiCount=1)
 Writes a number of values to the primitive list. Can be called multiple times between BeginPrimitiveList() / EndPrimitiveList().
 
void WriteUInt16 (const ezUInt16 *pValues, ezUInt32 uiCount=1)
 Writes a number of values to the primitive list. Can be called multiple times between BeginPrimitiveList() / EndPrimitiveList().
 
void WriteUInt32 (const ezUInt32 *pValues, ezUInt32 uiCount=1)
 Writes a number of values to the primitive list. Can be called multiple times between BeginPrimitiveList() / EndPrimitiveList().
 
void WriteUInt64 (const ezUInt64 *pValues, ezUInt32 uiCount=1)
 Writes a number of values to the primitive list. Can be called multiple times between BeginPrimitiveList() / EndPrimitiveList().
 
void WriteFloat (const float *pValues, ezUInt32 uiCount=1)
 Writes a number of values to the primitive list. Can be called multiple times between BeginPrimitiveList() / EndPrimitiveList().
 
void WriteDouble (const double *pValues, ezUInt32 uiCount=1)
 Writes a number of values to the primitive list. Can be called multiple times between BeginPrimitiveList() / EndPrimitiveList().
 
void WriteString (const ezStringView &sString)
 Writes a single string to the primitive list. Can be called multiple times between BeginPrimitiveList() / EndPrimitiveList().
 
void WriteBinaryAsString (const void *pData, ezUInt32 uiBytes)
 Writes binary data as a hexadecimal string to the primitive list.
 

Protected Types

enum  State {
  Invalid = -5 , Empty = -4 , ObjectSingleLine = -3 , ObjectMultiLine = -2 ,
  ObjectStart = -1 , PrimitivesBool = 0 , PrimitivesInt8 , PrimitivesInt16 ,
  PrimitivesInt32 , PrimitivesInt64 , PrimitivesUInt8 , PrimitivesUInt16 ,
  PrimitivesUInt32 , PrimitivesUInt64 , PrimitivesFloat , PrimitivesDouble ,
  PrimitivesString
}
 

Protected Member Functions

EZ_ALWAYS_INLINE void OutputString (ezStringView s)
 
EZ_ALWAYS_INLINE void OutputString (ezStringView s, ezUInt32 uiElementCount)
 
void OutputEscapedString (const ezStringView &string)
 
void OutputIndentation ()
 
void OutputPrimitiveTypeNameCompliant (ezOpenDdlPrimitiveType type)
 
void OutputPrimitiveTypeNameShort (ezOpenDdlPrimitiveType type)
 
void OutputPrimitiveTypeNameShortest (ezOpenDdlPrimitiveType type)
 
void WritePrimitiveType (ezOpenDdlWriter::State exp)
 
void OutputObjectName (ezStringView sName, bool bGlobalName)
 
void WriteBinaryAsHex (const void *pData, ezUInt32 uiBytes)
 
void OutputObjectBeginning ()
 

Protected Attributes

ezInt32 m_iIndentation = 0
 
bool m_bCompactMode = false
 
TypeStringMode m_TypeStringMode = TypeStringMode::ShortenedUnsignedInt
 
FloatPrecisionMode m_FloatPrecisionMode = FloatPrecisionMode::Exact
 
ezStreamWriterm_pOutput = nullptr
 
ezStringBuilder m_sTemp
 
ezHybridArray< DdlState, 16 > m_StateStack
 

Detailed Description

Writes OpenDDL documents to a stream with configurable formatting.

OpenDDL (Open Data Description Language) is a text format for describing structured data. This writer generates OpenDDL text from programmatically created object hierarchies and primitive data. Supports various output modes including compact/verbose formatting, different type name styles, and precise floating-point representation. Objects and primitive lists can be nested arbitrarily. Call SetOutputStream() first, then use BeginObject/EndObject and BeginPrimitiveList/EndPrimitiveList pairs.

Member Enumeration Documentation

◆ FloatPrecisionMode

Controls how floating-point values are formatted in the output.

Enumerator
Readable 

Float values are printed as readable numbers. Precision might get lost though.

Exact 

Float values are printed as HEX, representing the exact binary data.

◆ TypeStringMode

Controls how primitive type names are written in the output.

Enumerator
Compliant 

All primitive types are written as the OpenDDL standard defines them (very verbose)

ShortenedUnsignedInt 

unsigned_intX is shortened to uintX

Shortest 

All primitive type names are shortened to one or two characters: i1, i2, i3, i4, u1, u2, u3, u4, b, s, f, d (int, uint, bool, string, float, double)

Member Function Documentation

◆ OutputObjectName()

void ezOpenDdlWriter::OutputObjectName ( ezStringView  sName,
bool  bGlobalName 
)
protected
Test:
This code path is untested

◆ SetIndentation()

void ezOpenDdlWriter::SetIndentation ( ezInt8  iIndentation)
inline

Sets the base indentation level for output formatting.

Negative values are allowed to delay indentation until deeper nesting levels. For example, setting -2 means indentation only starts at nesting level 3.

◆ WriteBinaryAsString()

void ezOpenDdlWriter::WriteBinaryAsString ( const void *  pData,
ezUInt32  uiBytes 
)

Writes binary data as a hexadecimal string to the primitive list.

Converts the binary data to a hex string representation and writes it as a string primitive. Useful for embedding binary data within OpenDDL text format.

Test:
ezOpenDdlWriter::WriteBinaryAsString

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