Open CASCADE Technology  7.4.0
Data Structures | Macros

Standard_Dump.hxx File Reference

#include <Standard_SStream.hxx>
#include <TCollection_AsciiString.hxx>

Data Structures

class  Standard_DumpSentry
 Simple sentry class providing convenient interface to dump. Appends start and last rows in dump with class name key. An example of the using: for ClassName, the result is: "ClassName" { ... } Create instance of that class in the first row of Dump. More...
 
class  Standard_Dump
 This interface has some tool methods for stream (in JSON format) processing. More...
 

Macros

#define OCCT_CLASS_NAME(theClass)   #theClass
 The file contains interface to prepare dump output for OCCT objects. Format of the dump is JSON. To prepare this output, implement method DumpJson in the object and use macro functions from this file. Macros have one parameter for both, key and the value. It is a field of the current class. Macro has internal analyzer that uses the variable name to generate key. If the parameter has prefix symbols "&", "*" and "my", it is cut. More...
 
#define OCCT_DUMP_CLASS_BEGIN(theOStream, theName)   Standard_DumpSentry aSentry (theOStream, OCCT_CLASS_NAME(theName));
 Creates an instance of Sentry to cover the current Dump implementation with keys of start and end. This row should be inserted before other macros. The end key will be added by the sentry remove, (exit of the method). More...
 
#define OCCT_DUMP_FIELD_VALUE_NUMERICAL(theOStream, theField)
 Append into output value: "Name": Field. More...
 
#define OCCT_DUMP_FIELD_VALUE_STRING(theOStream, theField)
 Append into output value: "Name": "Field". More...
 
#define OCCT_DUMP_FIELD_VALUE_POINTER(theOStream, theField)
 Append into output value: "Name": "address of the pointer". More...
 
#define OCCT_DUMP_FIELD_VALUES_DUMPED(theOStream, theDepth, theField)
 Append into output value: "Name": { field dumped values } It computes Dump of the fields. The expected field is a pointer. Use this macro for fields of the dumped class which has own Dump implementation. The macros is recursive. Recursion is stopped when the depth value becomes equal to zero. Depth = -1 is the default value, dump here is unlimited. More...
 
#define OCCT_DUMP_FIELD_VALUES_NUMERICAL(theOStream, theName, theCount, ...)
 Append real values into output values in an order: [value_1, value_2, ...] It computes Dump of the parent. The expected field is a parent class name to call ClassName::Dump. More...
 
#define OCCT_DUMP_FIELD_VALUES_STRING(theOStream, theName, theCount, ...)
 Append real values into output values in an order: ["value_1", "value_2", ...] It computes Dump of the parent. The expected field is a parent class name to call ClassName::Dump. More...
 
#define OCCT_DUMP_BASE_CLASS(theOStream, theDepth, theField)
 Append into output value: "Name": { field dumped values } It computes Dump of the parent. The expected field is a parent class name to call ClassName::Dump. Use this macro for parent of the current class. The macros is recursive. Recursive is stoped when the depth value becomes equal to zero. Depth = -1 is the default value, dump here is unlimited. More...
 
#define OCCT_DUMP_VECTOR_CLASS(theOStream, theName, theCount, ...)
 Append vector values into output value: "Name": [value_1, value_2, ...] This macro is intended to have only one row for dumped object in Json. It's possible to use it without necessity of OCCT_DUMP_CLASS_BEGIN call, but pay attention that it should be only one row in the object dump. More...
 

Macro Definition Documentation

◆ OCCT_CLASS_NAME

#define OCCT_CLASS_NAME (   theClass)    #theClass

The file contains interface to prepare dump output for OCCT objects. Format of the dump is JSON. To prepare this output, implement method DumpJson in the object and use macro functions from this file. Macros have one parameter for both, key and the value. It is a field of the current class. Macro has internal analyzer that uses the variable name to generate key. If the parameter has prefix symbols "&", "*" and "my", it is cut.

  • OCCT_DUMP_FIELD_VALUE_NUMERICAL. Use it for fields of numerical C++ types, like int, float, double. It creates a pair "key", "value",
  • OCCT_DUMP_FIELD_VALUE_STRING. Use it for char* type. It creates a pair "key", "value",
  • OCCT_DUMP_FIELD_VALUE_POINTER. Use it for pointer fields. It creates a pair "key", "value", where the value is the pointer address,
  • OCCT_DUMP_FIELD_VALUES_DUMPED. Use it for fields that has own Dump implementation. It expects the pointer to the class instance. It creates "key": { result of dump of the field }
  • OCCT_DUMP_FIELD_VALUES_NUMERICAL. Use it for unlimited list of fields of C++ double type. It creates massive of values [value_1, value_2, ...]
  • OCCT_DUMP_FIELD_VALUES_STRING. Use it for unlimited list of fields of TCollection_AsciiString types. It creates massive of values ["value_1", "value_2", ...]
  • OCCT_DUMP_BASE_CLASS. Use if Dump implementation of the class is virtual, to perform ClassName::Dump() of the parent class, expected parameter is the parent class name. It creates "key": { result of dump of the field }
  • OCCT_DUMP_VECTOR_CLASS. Use it as a single row in some object dump to have one row in output. It's possible to use it without necessity of OCCT_DUMP_CLASS_BEGIN call. It creates massive of values [value_1, value_2, ...]

The Dump result prepared by these macros is an output stream, it is not arranged with spaces and line feed. To have output in a more readable way, use ConvertToAlignedString method for obtained stream. Converts the class type into a string value

◆ OCCT_DUMP_BASE_CLASS

#define OCCT_DUMP_BASE_CLASS (   theOStream,
  theDepth,
  theField 
)
Value:
{ \
if (theDepth != 0) \
{ \
Standard_SStream aFieldStream; \
theField::DumpJson (aFieldStream, theDepth - 1); \
const char* aName = Standard_Dump::DumpFieldToName (#theField); \
Standard_Dump::DumpKeyToClass (theOStream, aName, Standard_Dump::Text (aFieldStream)); \
} \
}
static void DumpKeyToClass(Standard_OStream &theOStream, const char *theKey, const TCollection_AsciiString &theField)
Append into output value: "Name": { Field }.
static const char * DumpFieldToName(const char *theField)
Convert field name into dump text value, removes "&" and "my" prefixes An example, for field myValue, theName is Value, for &myCLass, the name is Class.
static TCollection_AsciiString Text(const Standard_SStream &theStream)
Converts stream value to string value. The result is original stream value.

Append into output value: "Name": { field dumped values } It computes Dump of the parent. The expected field is a parent class name to call ClassName::Dump. Use this macro for parent of the current class. The macros is recursive. Recursive is stoped when the depth value becomes equal to zero. Depth = -1 is the default value, dump here is unlimited.

◆ OCCT_DUMP_CLASS_BEGIN

#define OCCT_DUMP_CLASS_BEGIN (   theOStream,
  theName 
)    Standard_DumpSentry aSentry (theOStream, OCCT_CLASS_NAME(theName));

Creates an instance of Sentry to cover the current Dump implementation with keys of start and end. This row should be inserted before other macros. The end key will be added by the sentry remove, (exit of the method).

◆ OCCT_DUMP_FIELD_VALUE_NUMERICAL

#define OCCT_DUMP_FIELD_VALUE_NUMERICAL (   theOStream,
  theField 
)
Value:
{ \
const char* aName = Standard_Dump::DumpFieldToName (#theField); \
theOStream << "\"" << aName << "\": " << theField; \
}
static void AddValuesSeparator(Standard_OStream &theOStream)
Add Json values separator if the stream last symbol is not an open brace.
static const char * DumpFieldToName(const char *theField)
Convert field name into dump text value, removes "&" and "my" prefixes An example, for field myValue, theName is Value, for &myCLass, the name is Class.

Append into output value: "Name": Field.

◆ OCCT_DUMP_FIELD_VALUE_POINTER

#define OCCT_DUMP_FIELD_VALUE_POINTER (   theOStream,
  theField 
)
Value:
{ \
const char* aName = Standard_Dump::DumpFieldToName (#theField); \
theOStream << "\"" << aName << "\": \"" << Standard_Dump::GetPointerInfo (theField) << "\""; \
}
static TCollection_AsciiString GetPointerInfo(const Handle< Standard_Transient > &thePointer, const bool isShortInfo=true)
Convert handle pointer to address of the pointer. If the handle is NULL, the result is an empty strin...
static void AddValuesSeparator(Standard_OStream &theOStream)
Add Json values separator if the stream last symbol is not an open brace.
static const char * DumpFieldToName(const char *theField)
Convert field name into dump text value, removes "&" and "my" prefixes An example, for field myValue, theName is Value, for &myCLass, the name is Class.

Append into output value: "Name": "address of the pointer".

◆ OCCT_DUMP_FIELD_VALUE_STRING

#define OCCT_DUMP_FIELD_VALUE_STRING (   theOStream,
  theField 
)
Value:
{ \
const char* aName = Standard_Dump::DumpFieldToName (#theField); \
theOStream << "\"" << aName << "\": \"" << theField << "\""; \
}
static void AddValuesSeparator(Standard_OStream &theOStream)
Add Json values separator if the stream last symbol is not an open brace.
static const char * DumpFieldToName(const char *theField)
Convert field name into dump text value, removes "&" and "my" prefixes An example, for field myValue, theName is Value, for &myCLass, the name is Class.

Append into output value: "Name": "Field".

◆ OCCT_DUMP_FIELD_VALUES_DUMPED

#define OCCT_DUMP_FIELD_VALUES_DUMPED (   theOStream,
  theDepth,
  theField 
)
Value:
{ \
if (theDepth != 0) \
{ \
Standard_SStream aFieldStream; \
if ((theField) != NULL) \
(theField)->DumpJson (aFieldStream, theDepth - 1); \
const char* aName = Standard_Dump::DumpFieldToName (#theField); \
Standard_Dump::DumpKeyToClass (theOStream, aName, Standard_Dump::Text (aFieldStream)); \
} \
}
static void DumpKeyToClass(Standard_OStream &theOStream, const char *theKey, const TCollection_AsciiString &theField)
Append into output value: "Name": { Field }.
static const char * DumpFieldToName(const char *theField)
Convert field name into dump text value, removes "&" and "my" prefixes An example, for field myValue, theName is Value, for &myCLass, the name is Class.
static TCollection_AsciiString Text(const Standard_SStream &theStream)
Converts stream value to string value. The result is original stream value.

Append into output value: "Name": { field dumped values } It computes Dump of the fields. The expected field is a pointer. Use this macro for fields of the dumped class which has own Dump implementation. The macros is recursive. Recursion is stopped when the depth value becomes equal to zero. Depth = -1 is the default value, dump here is unlimited.

◆ OCCT_DUMP_FIELD_VALUES_NUMERICAL

#define OCCT_DUMP_FIELD_VALUES_NUMERICAL (   theOStream,
  theName,
  theCount,
  ... 
)
Value:
{ \
theOStream << "\"" << theName << "\": ["; \
Standard_Dump::DumpRealValues (theOStream, theCount, __VA_ARGS__);\
theOStream << "]"; \
}
static void AddValuesSeparator(Standard_OStream &theOStream)
Add Json values separator if the stream last symbol is not an open brace.
static void DumpRealValues(Standard_OStream &theOStream, int theCount,...)
Unite values in one value using template: value_1, value_2, ..., value_n.

Append real values into output values in an order: [value_1, value_2, ...] It computes Dump of the parent. The expected field is a parent class name to call ClassName::Dump.

◆ OCCT_DUMP_FIELD_VALUES_STRING

#define OCCT_DUMP_FIELD_VALUES_STRING (   theOStream,
  theName,
  theCount,
  ... 
)
Value:
{ \
theOStream << "\"" << theName << "\": ["; \
Standard_Dump::DumpCharacterValues (theOStream, theCount, __VA_ARGS__);\
theOStream << "]"; \
}
static void AddValuesSeparator(Standard_OStream &theOStream)
Add Json values separator if the stream last symbol is not an open brace.
static void DumpCharacterValues(Standard_OStream &theOStream, int theCount,...)
Unite values in one value using template: "value_1", "value_2", ..., "value_n".

Append real values into output values in an order: ["value_1", "value_2", ...] It computes Dump of the parent. The expected field is a parent class name to call ClassName::Dump.

◆ OCCT_DUMP_VECTOR_CLASS

#define OCCT_DUMP_VECTOR_CLASS (   theOStream,
  theName,
  theCount,
  ... 
)
Value:
{ \
theOStream << "\"" << OCCT_CLASS_NAME(theName) << "\": ["; \
Standard_Dump::DumpRealValues (theOStream, theCount, __VA_ARGS__);\
theOStream << "]"; \
}
#define OCCT_CLASS_NAME(theClass)
The file contains interface to prepare dump output for OCCT objects. Format of the dump is JSON...
Definition: Standard_Dump.hxx:47
static void DumpRealValues(Standard_OStream &theOStream, int theCount,...)
Unite values in one value using template: value_1, value_2, ..., value_n.

Append vector values into output value: "Name": [value_1, value_2, ...] This macro is intended to have only one row for dumped object in Json. It's possible to use it without necessity of OCCT_DUMP_CLASS_BEGIN call, but pay attention that it should be only one row in the object dump.