129 std::string _message;
133 static const char* _stdErrorMsg[];
142#define TREE_NODE_CHECK_THROW(x) { if (!(x)) throw TreeNodeException(TNE_UserDefined, #x); }
162#define VOID_IMPLEMENTATION(which) { throw TreeNodeException(TNE_VoidImplementation, which); }
168#define VOID_IMPLEMENTATION_RET(which, R) { if (MLAlwaysTrue){ throw TreeNodeException(TNE_VoidImplementation, which); } return R; }
171#define ADD_LONG_CHILD { addChild(static_cast<long>(val), name); }
174#define ADD_ULONG_CHILD { addChild(static_cast<unsigned long>(val), name); }
177#define ADD_LDOUBLE_CHILD { addChild(static_cast<long double>(val), name); }
181#define READ_LONG_CHILD(DST_TYPE) { long lval=0; readChild(lval, name); val = static_cast<DST_TYPE>(lval); }
185#define READ_ULONG_CHILD(DST_TYPE) { unsigned long lval=0; readChild(lval, name); val = static_cast<DST_TYPE>(lval); }
189#define READ_LDOUBLE_CHILD(DST_TYPE){ long double ldval=0; readChild(ldval, name); val = static_cast<DST_TYPE>(ldval); }
193#define READ_LONG_CHILD_FOR_BOOL { long lval=0; readChild(lval, name); val = (lval!=0); }
302 virtual void addChild(
const std::string& ,
const char* )
VOID_IMPLEMENTATION(
"addChild(const std::string&)");
333 virtual void addChild (
const void*
const ,
size_t ,
const char* )
VOID_IMPLEMENTATION(
"addChild(void*)");
464 if (hasChild(name)) {
465 readChild(value, name);
498 TreeNode* node =
nullptr;
499 readChild(node, name);
514 Base*
objP =
nullptr;
515 readChild(
objP, name);
534 virtual const char* getLastReadChildName()
const {
VOID_IMPLEMENTATION_RET(
"getLastReadChildName()",
nullptr); }
549 virtual void deleteMemory(
void* ){};
566 TreeNode(ConstructionMode ) :
630#undef VOID_IMPLEMENTATION
631#undef ADD_ULONG_CHILD
633#undef ADD_LDOUBLE_CHILD
634#undef READ_ULONG_CHILD
635#undef READ_LONG_CHILD
636#undef READ_LDOUBLE_CHILD
637#undef READ_LONG_CHILD_FOR_BOOL
651#define ML_READCHILD_OPTIONAL(obj, tagName, defaultVal) \
652if (parent->hasChild(tagName)) { \
653 parent->readChild(obj, tagName); \
660#define ML_ADDSTATE_VERSION(ThisClass) parent->setVersion("#ThisClass#", ThisClass::getAddStateVersion());
664#define ML_ADDSTATE_SUPER(SuperClass) { \
665TreeNode* superClassNode = parent->addChild("_" #SuperClass); \
666SuperClass::addStateToTree(superClassNode); \
671#define ML_READSTATE_SUPER(SuperClass) { \
672TreeNode* superClassNode = parent->readContainerChild("_" #SuperClass); \
673SuperClass::readStateFromTree(superClassNode); \
684#define ML_TREE_NODE_SUPPORT_VIA_PERSISTENT_STATE \
685virtual void addStateToTree(TreeNode* parent) const \
687auto state = persistentState(); \
688if (state.empty()){ state = "Could not read object state."; } \
689parent->addChild(state, "State"); \
692virtual void readStateFromTree(TreeNode* parent) \
695parent->readChild(state, "State"); \
696setPersistentState(state); \
Class representing general ML objects that support import/export via strings (setPersistentState() an...
SubImageBoxd - SubImageBox with coordinates of float data type.
The class TreeNodeException is the base class for all exceptions thrown by the class TreeNode and all...
virtual ~TreeNodeException()
Destructor.
int getCode() const
Returns the error code.
int _errorCode
The error code of the exception.
TreeNodeException(int errorCode=0, const char *msg=nullptr)
Creates a new exception object with code errorCode and an optional error message.
virtual const char * getMessage() const
Returns the error string.
The class TreeNode is the abstract base class for the import/export of ML objects.
virtual void addChild(char val, const char *name) ADD_LONG_CHILD
Factory method for adding a child encapsulating a variable of type char.
@ CM_readerRoot
Construct as root node for reading.
@ CM_writerRoot
Construct as root node for writing.
virtual ~TreeNode()
Destructor deleting all children of this node.
virtual void addChild(int val, const char *name) ADD_LONG_CHILD
Factory method for adding a child encapsulating a variable of type int.
virtual void addChild(MLint64, const char *) VOID_IMPLEMENTATION("addChild(MLint64)")
Factory method for adding a child encapsulating a variable of type MLint64.
virtual void addChild(unsigned short val, const char *name) ADD_ULONG_CHILD
Factory method for adding a child encapsulating a variable of type unsigned short.
virtual void addChild(double val, const char *name) ADD_LDOUBLE_CHILD
Factory method for adding a child encapsulating a variable of type double.
virtual void addChild(short val, const char *name) ADD_LONG_CHILD
Factory method for adding a child encapsulating a variable of type short.
virtual void writeToString(std::string &) VOID_IMPLEMENTATION("writeToString")
Generates a string representation of the subtree represented by this node to a file.
virtual void writeToFile(const char *) VOID_IMPLEMENTATION("writeToFile")
Writes the subtree represented by this node to a file.
virtual void addChild(unsigned int val, const char *name) ADD_ULONG_CHILD
Factory method for adding a child encapsulating a variable of type unsigned int.
virtual void addChild(unsigned char val, const char *name) ADD_ULONG_CHILD
Factory method for adding a child encapsulating a variable of type unsigned char.
virtual void addChild(long, const char *) VOID_IMPLEMENTATION("addChild(long)")
Factory method for adding a child encapsulating a variable of type long.
virtual void addChild(bool val, const char *name) ADD_ULONG_CHILD
Factory method for adding a child encapsulating a variable of type bool.
virtual void addChild(unsigned long, const char *) VOID_IMPLEMENTATION("addChild(unsigned long)")
Factory method for adding a child encapsulating a variable of type long.
virtual void addChild(MLuint64, const char *) VOID_IMPLEMENTATION("addChild(MLuint64)")
Factory method for adding a child encapsulating a variable of type MLuint64.
virtual void readFromFile(const char *) VOID_IMPLEMENTATION("readFromFile")
Reads the subtree represented by this node from a file.
virtual void addChild(float val, const char *name) ADD_LDOUBLE_CHILD
Factory method for adding a child encapsulating a variable of type float.
virtual void addChild(long double, const char *) VOID_IMPLEMENTATION("addChild(long double)")
Factory method for adding a child encapsulating a variable of type long double.
virtual void readFromString(const std::string &) VOID_IMPLEMENTATION("readFromString")
Reads the subtree represented by this node from a string.
#define MLEXPORT
To export symbols from a DLL/shared object, we need to mark them with the MLEXPORT symbol.
Target mlrange_cast(Source arg)
Generic version of checked ML casts.
#define ML_ABSTRACT_ROOT_CLASS_HEADER(className)
#define ML_ROOT_CLASS_HEADER(className)
#define ADD_LONG_CHILD
For each signed integer type, addChild(long) is called by default.
#define READ_LDOUBLE_CHILD(DST_TYPE)
For each floating point type, readChild(LDouble) is called by default and the results is simply cast ...
#define VOID_IMPLEMENTATION(which)
Standard body for a method in this interface class.
#define VOID_IMPLEMENTATION_RET(which, R)
Standard body for a method in this interface class.
#define READ_LONG_CHILD_FOR_BOOL
For each signed integer type, readChild(Long) is called by default and the results is simply cast to ...
#define ADD_LDOUBLE_CHILD
For each floating point type, addChild(LDouble) is called by default.
#define READ_LONG_CHILD(DST_TYPE)
For each signed integer type, readChild(Long) is called by default and the results is simply cast to ...
#define READ_ULONG_CHILD(DST_TYPE)
For each unsigned integer type, readChild(ULong) is called by default and the results is simply cast ...
#define ADD_ULONG_CHILD
For each unsigned integer type, addChild(ulong) is called by default.
UINT64 MLuint64
Introduce platform-independent 64-bit unsigned integer type.
INT64 MLint64
Include 64-bit integer support for Windows or Unix.
@ TNE_UnsupportedClassVersion
@ TNE_ReadingSubImageBoxd