Even this framework has been designed for generic purposes, it will be used to program basically graphics applications. In this perspective, I implemented a full set of serializable classes to handle complex numbers, vectors and matrices and all the geometric operations that will be used to realize a 3D engine.
To serialize some enum variables that want constants instead of numbers, I introduced "constant strings" (i.e. LEFT, GREATER, NULL) in human readable formats like xml or json. In this case, when the variable is deserialized by the framework, a constant string will be translated into his respective numberic value, on the contrary the numberic value will be translated into his constant string during the serialization process.
For instance, an extended vector 2D with anchor variables:
enum PositionAnchorEnum { TMD_POSITION_ANCHOR_LEFT = 0, TMD_POSITION_ANCHOR_RIGHT = 1, TMD_POSITION_ANCHOR_TOP = 2, TMD_POSITION_ANCHOR_BOTTOM = 3, TMD_POSITION_ANCHOR_NEAR = 4, TMD_POSITION_ANCHOR_FAR = 5 }; template <class T> class ExtVector2 : public Vector2<T> { public: [...] T m_x: T m_y; PositionAnchorEnum m_xAnchor; PositionAnchorEnum m_yAnchor; }; [...] ExtVector origin; origin.m_x = 0; origin.m_y = 0; origin.m_xAnchor = TMD_POSITION_ANCHOR_LEFT; origin.m_yAnchor = TMD_POSITION_ANCHOR_TOP;
is saved to:
<origin x="0" y="0" xAnchor="LEFT" yAnchor="TOP" />