0030997: Foundation Classes - name correction of dump macros
[occt.git] / src / Standard / Standard_Dump.hxx
index 6cb7dd7..ba5d4ae 100644 (file)
 class Standard_DumpSentry;
 
 //! The file contains interface to prepare dump output for OCCT objects. Format of the dump is JSON.
-//! To prepare this output, implement method Dump in the object and use macro functions from this file.
+//! 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.
 //!
-//! - DUMP_FIELD_VALUE_NUMERICAL. Use it for fields of numerical C++ types, like int, float, double. It creates a pair "key", "value",
-//! - DUMP_FIELD_VALUE_STRING. Use it for char* type. It creates a pair "key", "value",
-//! - DUMP_FIELD_VALUE_POINTER. Use it for pointer fields. It creates a pair "key", "value", where the value is the pointer address,
-//! - DUMP_FIELD_VALUES_DUMPED. Use it for fields that has own Dump implementation. It expects the pointer to the class instance.
+//! - 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 }
-//! - DUMP_FIELD_VALUES_NUMERICAL. Use it for unlimited list of fields of C++ double type.
+//! - 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, ...]
-//! - DUMP_FIELD_VALUES_STRING. Use it for unlimited list of fields of TCollection_AsciiString types.
+//! - 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", ...]
-//! - DUMP_FIELD_VALUES_BY_KIND. Use if Dump implementation of the class is virtual, to perform ClassName::Dump() of the parent class,
+//! - 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 }
-//! - 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 DUMP_CLASS_BEGIN call.
+//! - 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
-#define CLASS_NAME(theClass) #theClass
+#define OCCT_CLASS_NAME(theClass) #theClass
 
-//! @def DUMP_CLASS_BEGIN
+//! @def OCCT_DUMP_CLASS_BEGIN
 //! 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).
-#define DUMP_CLASS_BEGIN(theOStream, theName) \
-  Standard_DumpSentry aSentry (theOStream, CLASS_NAME(theName)); \
+#define OCCT_DUMP_CLASS_BEGIN(theOStream, theName) \
+  Standard_DumpSentry aSentry (theOStream, OCCT_CLASS_NAME(theName));
 
-//! @def DUMP_FIELD_VALUE_NUMERICAL
+//! @def OCCT_DUMP_FIELD_VALUE_NUMERICAL
 //! Append into output value: "Name": Field
-#define DUMP_FIELD_VALUE_NUMERICAL(theOStream, theField) \
+#define OCCT_DUMP_FIELD_VALUE_NUMERICAL(theOStream, theField) \
 { \
-  const char* aName = NULL; \
-  Standard_Dump::DumpFieldToName (#theField, aName); \
-  if (!Standard_Dump::EndsWith (theOStream, "{")) \
-    theOStream << ", "; \
+  const char* aName = Standard_Dump::DumpFieldToName (#theField); \
+  Standard_Dump::AddValuesSeparator (theOStream); \
   theOStream << "\"" << aName << "\": " << theField; \
 }
 
-//! @def DUMP_FIELD_VALUE_STRING
+//! @def OCCT_DUMP_FIELD_VALUE_STRING
 //! Append into output value: "Name": "Field"
-#define DUMP_FIELD_VALUE_STRING(theOStream, theField) \
+#define OCCT_DUMP_FIELD_VALUE_STRING(theOStream, theField) \
 { \
-  const char* aName = NULL; \
-  Standard_Dump::DumpFieldToName (#theField, aName); \
-  if (!Standard_Dump::EndsWith (theOStream, "{")) \
-    theOStream << ", "; \
+  const char* aName = Standard_Dump::DumpFieldToName (#theField); \
+  Standard_Dump::AddValuesSeparator (theOStream); \
   theOStream << "\"" << aName << "\": \"" << theField << "\""; \
 }
 
-//! @def DUMP_FIELD_VALUE_POINTER
+//! @def OCCT_DUMP_FIELD_VALUE_POINTER
 //! Append into output value: "Name": "address of the pointer"
-#define DUMP_FIELD_VALUE_POINTER(theOStream, theField) \
+#define OCCT_DUMP_FIELD_VALUE_POINTER(theOStream, theField) \
 { \
-  const char* aName = NULL; \
-  Standard_Dump::DumpFieldToName (#theField, aName); \
-  if (!Standard_Dump::EndsWith (theOStream, "{")) \
-    theOStream << ", "; \
+  const char* aName = Standard_Dump::DumpFieldToName (#theField); \
+  Standard_Dump::AddValuesSeparator (theOStream); \
   theOStream << "\"" << aName << "\": \"" << Standard_Dump::GetPointerInfo (theField) << "\""; \
 }
 
-//! @def DUMP_FIELD_VALUES_DUMPED
+//! @def OCCT_DUMP_FIELD_VALUES_DUMPED
 //! 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.
-#define DUMP_FIELD_VALUES_DUMPED(theOStream, theDepth, theField) \
+#define OCCT_DUMP_FIELD_VALUES_DUMPED(theOStream, theDepth, theField) \
 { \
   if (theDepth != 0) \
   { \
     Standard_SStream aFieldStream; \
     if ((theField) != NULL) \
       (theField)->DumpJson (aFieldStream, theDepth - 1); \
-    const char* aName = NULL; \
-    Standard_Dump::DumpFieldToName (#theField, aName); \
+    const char* aName = Standard_Dump::DumpFieldToName (#theField); \
     Standard_Dump::DumpKeyToClass (theOStream, aName, Standard_Dump::Text (aFieldStream)); \
   } \
 }
 
-//! @def DUMP_FIELD_VALUES_NUMERICAL
+//! @def OCCT_DUMP_FIELD_VALUES_NUMERICAL
 //! 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.
-#define DUMP_FIELD_VALUES_NUMERICAL(theOStream, theName, theCount, ...) \
+#define OCCT_DUMP_FIELD_VALUES_NUMERICAL(theOStream, theName, theCount, ...) \
 { \
-  if (!Standard_Dump::EndsWith (theOStream, "{")) \
-    theOStream << ", "; \
+  Standard_Dump::AddValuesSeparator (theOStream); \
   theOStream << "\"" << theName << "\": ["; \
   Standard_Dump::DumpRealValues (theOStream, theCount, __VA_ARGS__);\
   theOStream << "]"; \
 }
 
-//! @def DUMP_FIELD_VALUES_STRING
+//! @def OCCT_DUMP_FIELD_VALUES_STRING
 //! 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.
-#define DUMP_FIELD_VALUES_STRING(theOStream, theName, theCount, ...) \
+#define OCCT_DUMP_FIELD_VALUES_STRING(theOStream, theName, theCount, ...) \
 { \
-  if (!Standard_Dump::EndsWith (theOStream, "{")) \
-    theOStream << ", "; \
+  Standard_Dump::AddValuesSeparator (theOStream); \
   theOStream << "\"" << theName << "\": ["; \
   Standard_Dump::DumpCharacterValues (theOStream, theCount, __VA_ARGS__);\
   theOStream << "]"; \
 }
 
-//! @def DUMP_FIELD_VALUES_BY_KIND
+//! @def OCCT_DUMP_BASE_CLASS
 //! 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.
-#define DUMP_FIELD_VALUES_BY_KIND(theOStream, theDepth, theField) \
+#define OCCT_DUMP_BASE_CLASS(theOStream, theDepth, theField) \
 { \
   if (theDepth != 0) \
   { \
     Standard_SStream aFieldStream; \
     theField::DumpJson (aFieldStream, theDepth - 1); \
-    const char* aName = NULL; \
-    Standard_Dump::DumpFieldToName (#theField, aName); \
+    const char* aName = Standard_Dump::DumpFieldToName (#theField); \
     Standard_Dump::DumpKeyToClass (theOStream, aName, Standard_Dump::Text (aFieldStream)); \
   } \
 }
 
-//! @def DUMP_VECTOR_CLASS
+//! @def OCCT_DUMP_VECTOR_CLASS
 //! 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 DUMP_CLASS_BEGIN call, but pay attention that it should be only one row in the object dump.
-#define DUMP_VECTOR_CLASS(theOStream, theName, theCount, ...) \
+//! 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.
+#define OCCT_DUMP_VECTOR_CLASS(theOStream, theName, theCount, ...) \
 { \
-  theOStream << "\"" << CLASS_NAME(theName) << "\": ["; \
+  theOStream << "\"" << OCCT_CLASS_NAME(theName) << "\": ["; \
   Standard_Dump::DumpRealValues (theOStream, theCount, __VA_ARGS__);\
   theOStream << "]"; \
 }
@@ -193,12 +183,9 @@ public:
   //! @return text presentation
   Standard_EXPORT static TCollection_AsciiString FormatJson (const Standard_SStream& theStream, const Standard_Integer theIndent = 3);
 
-  //! Determines whether the end of this stream matches the specified string.
+  //! Add Json values separator if the stream last symbol is not an open brace.
   //! @param theStream source value
-  //! @param theEndString text value to find
-  //! @return true if matches
-  static Standard_EXPORT Standard_Boolean EndsWith (const Standard_OStream& theOStream,
-                                                    const TCollection_AsciiString& theEndString);
+  static Standard_EXPORT void AddValuesSeparator (Standard_OStream& theOStream);
 
   //! Returns default prefix added for each pointer info string if short presentation of pointer used
   Standard_EXPORT static TCollection_AsciiString GetPointerPrefix() { return "0x"; }
@@ -239,7 +226,7 @@ public:
   //! An example, for field myValue, theName is Value, for &myCLass, the name is Class
   //! @param theField a source value 
   //! @param theName [out] an updated name 
-  Standard_EXPORT static void DumpFieldToName (const char* theField, const char*& theName);
+  Standard_EXPORT static const char* DumpFieldToName (const char* theField);
 };
 
 #endif // _Standard_Dump_HeaderFile