Cyberida-GraphML format support

This commit is contained in:
Alexey Fedoseev
2024-02-10 00:33:56 +03:00
parent d78e581306
commit 6cd5abd2a3
2 changed files with 648 additions and 132 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -30,17 +30,29 @@ extern "C" {
#endif #endif
/* ----------------------------------------------------------------------------- /* -----------------------------------------------------------------------------
* The Cyberiada GraphML library types * The Cyberiada GraphML format library types
* ----------------------------------------------------------------------------- */ * ----------------------------------------------------------------------------- */
/* SM node types: */ /* SM node types: */
typedef enum { typedef enum {
cybNodeInitial = 0, /* initial node */ cybNodeSM = 0, /* state machine */
cybNodeSimple, /* simple node */ cybNodeSimple, /* simple state */
cybNodeComplex, /* complex node */ cybNodeComposite, /* composite state */
cybNodeComment /* comment node */ cybNodeComment, /* comment node */
cybNodeInitial, /* initial pseudostate */
cybNodeFinal, /* final pseudostate */
cybNodeChoice, /* final pseudostate */
cybNodeJunction, /* junction pseudostate */
cybNodeEntry, /* entry pseudostate */
cybNodeExit, /* exit pseudostate */
} CyberiadaNodeType; } CyberiadaNodeType;
/* SM node types: */
typedef enum {
cybEdgeTransition = 0,
cybEdgeComment
} CyberiadaEdgeType;
/* SM node geometry */ /* SM node geometry */
typedef struct { typedef struct {
@@ -58,14 +70,14 @@ typedef struct _CyberiadaPolyline {
/* SM node (state) */ /* SM node (state) */
typedef struct _CyberiadaNode { typedef struct _CyberiadaNode {
CyberiadaNodeType type;
char* id; char* id;
size_t id_len; size_t id_len;
char* title; char* title;
size_t title_len; size_t title_len;
CyberiadaNodeType type;
char* action; char* action;
size_t action_len; size_t action_len;
CyberiadaRect geometry_rect; CyberiadaRect* geometry_rect;
struct _CyberiadaNode* next; struct _CyberiadaNode* next;
struct _CyberiadaNode* parent; struct _CyberiadaNode* parent;
struct _CyberiadaNode* children; struct _CyberiadaNode* children;
@@ -73,6 +85,7 @@ typedef struct _CyberiadaNode {
/* SM edge (transition) */ /* SM edge (transition) */
typedef struct _CyberiadaEdge { typedef struct _CyberiadaEdge {
CyberiadaEdgeType type;
char* id; char* id;
size_t id_len; size_t id_len;
char* source_id; char* source_id;
@@ -83,20 +96,37 @@ typedef struct _CyberiadaEdge {
CyberiadaNode* target; CyberiadaNode* target;
char* action; char* action;
size_t action_len; size_t action_len;
CyberiadaPoint geometry_source_point; CyberiadaPoint* geometry_source_point;
CyberiadaPoint geometry_target_point; CyberiadaPoint* geometry_target_point;
CyberiadaPolyline* geometry_polyline; CyberiadaPolyline* geometry_polyline;
CyberiadaPoint* geometry_label;
char* color;
size_t color_len;
struct _CyberiadaEdge* next; struct _CyberiadaEdge* next;
} CyberiadaEdge; } CyberiadaEdge;
/* SM extentions
typedef struct _CyberiadaExtension {
char* id;
size_t id_len;
char* title;
size_t title_len;
char* data;
size_t data_len;
struct _CyberiadaExtension* next;
} CyberiadaExtension;*/
/* SM graph (state machine) */ /* SM graph (state machine) */
typedef struct { typedef struct {
char* name; char* name;
size_t name_len; size_t name_len;
char* version; char* version;
size_t version_len; size_t version_len;
char* info;
size_t info_len;
CyberiadaNode* nodes; CyberiadaNode* nodes;
CyberiadaEdge* edges; CyberiadaEdge* edges;
/* CyberiadaExtension* extensions;*/
} CyberiadaSM; } CyberiadaSM;
/* SM GraphML supported formats */ /* SM GraphML supported formats */
@@ -115,6 +145,7 @@ typedef enum {
#define CYBERIADA_FORMAT_ERROR 2 #define CYBERIADA_FORMAT_ERROR 2
#define CYBERIADA_NOT_FOUND 3 #define CYBERIADA_NOT_FOUND 3
#define CYBERIADA_BAD_PARAMETER 4 #define CYBERIADA_BAD_PARAMETER 4
#define CYBERIADA_ASSERT 5
/* ----------------------------------------------------------------------------- /* -----------------------------------------------------------------------------
* The Cyberiada GraphML library functions * The Cyberiada GraphML library functions