UML 2.0 / CyberiadaML standatd compliance
This commit is contained in:
2
Makefile
2
Makefile
@@ -8,7 +8,7 @@ else
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
TEST_TARGET := cyberiada_test
|
TEST_TARGET := cyberiada_test
|
||||||
LIB_SOURCES := cyberiadaml.c
|
LIB_SOURCES := cyberiadaml.c utf8enc.c
|
||||||
TEST_SOURCES := test.c
|
TEST_SOURCES := test.c
|
||||||
LIB_OBJECTS := $(patsubst %.c, %.o, $(LIB_SOURCES))
|
LIB_OBJECTS := $(patsubst %.c, %.o, $(LIB_SOURCES))
|
||||||
TEST_OBJECTS := $(patsubst %.c, %.o, $(TEST_SOURCES))
|
TEST_OBJECTS := $(patsubst %.c, %.o, $(TEST_SOURCES))
|
||||||
|
|||||||
813
cyberiadaml.c
813
cyberiadaml.c
File diff suppressed because it is too large
Load Diff
111
cyberiadaml.h
111
cyberiadaml.h
@@ -23,8 +23,6 @@
|
|||||||
#ifndef __CYBERIADA_ML_H
|
#ifndef __CYBERIADA_ML_H
|
||||||
#define __CYBERIADA_ML_H
|
#define __CYBERIADA_ML_H
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
@@ -35,25 +33,38 @@ extern "C" {
|
|||||||
|
|
||||||
/* SM node types: */
|
/* SM node types: */
|
||||||
typedef enum {
|
typedef enum {
|
||||||
cybNodeSM = 0, /* state machine */
|
cybNodeSM = 0, /* state machine */
|
||||||
cybNodeSimple, /* simple state */
|
cybNodeSimpleState, /* simple state */
|
||||||
cybNodeComposite, /* composite state */
|
cybNodeCompositeState, /* composite state */
|
||||||
|
cybNodeSubmachineState, /* submachine state */
|
||||||
cybNodeComment, /* comment node */
|
cybNodeComment, /* comment node */
|
||||||
cybNodeInitial, /* initial pseudostate */
|
cybNodeInitial, /* initial pseudostate */
|
||||||
cybNodeFinal, /* final pseudostate */
|
cybNodeFinal, /* final pseudostate */
|
||||||
cybNodeChoice, /* final pseudostate */
|
cybNodeChoice, /* final pseudostate */
|
||||||
cybNodeJunction, /* junction pseudostate */
|
cybNodeJunction, /* junction pseudostate */
|
||||||
cybNodeEntry, /* entry pseudostate */
|
cybNodeEntry, /* entry pseudostate */
|
||||||
cybNodeExit, /* exit pseudostate */
|
cybNodeExit, /* exit pseudostate */
|
||||||
|
cybNodeHistory, /* shallow history pseudostate */
|
||||||
|
cybNodeDeepHistory, /* deep history pseudostate */
|
||||||
|
cybNodeFork, /* fork pseudostate */
|
||||||
|
cybNodeJoin, /* join pseudostate */
|
||||||
|
cybNodeTerminate, /* terminate pseudostate */
|
||||||
} CyberiadaNodeType;
|
} CyberiadaNodeType;
|
||||||
|
|
||||||
/* SM node types: */
|
/* SM node types: */
|
||||||
typedef enum {
|
typedef enum {
|
||||||
cybEdgeTransition = 0,
|
cybEdgeTransition = 0,
|
||||||
cybEdgeComment
|
|
||||||
} CyberiadaEdgeType;
|
} CyberiadaEdgeType;
|
||||||
|
|
||||||
/* SM node geometry */
|
/* SM behavior types: */
|
||||||
|
typedef enum {
|
||||||
|
cybBehaviorTransition = 0,
|
||||||
|
cybBehaviorEntry = 1,
|
||||||
|
cybBehaviorExit = 2,
|
||||||
|
cybBehaviorDo = 3,
|
||||||
|
} CyberiadaBehaviorType;
|
||||||
|
|
||||||
|
/* SM node & transitions geometry */
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
double x, y;
|
double x, y;
|
||||||
@@ -68,6 +79,18 @@ typedef struct _CyberiadaPolyline {
|
|||||||
struct _CyberiadaPolyline* next;
|
struct _CyberiadaPolyline* next;
|
||||||
} CyberiadaPolyline;
|
} CyberiadaPolyline;
|
||||||
|
|
||||||
|
/* SM behavior */
|
||||||
|
typedef struct _CyberiadaBehavior {
|
||||||
|
CyberiadaBehaviorType type;
|
||||||
|
char* trigger;
|
||||||
|
size_t trigger_len;
|
||||||
|
char* guard;
|
||||||
|
size_t guard_len;
|
||||||
|
char* action;
|
||||||
|
size_t action_len;
|
||||||
|
struct _CyberiadaBehavior* next;
|
||||||
|
} CyberiadaBehavior;
|
||||||
|
|
||||||
/* SM node (state) */
|
/* SM node (state) */
|
||||||
typedef struct _CyberiadaNode {
|
typedef struct _CyberiadaNode {
|
||||||
CyberiadaNodeType type;
|
CyberiadaNodeType type;
|
||||||
@@ -75,8 +98,7 @@ typedef struct _CyberiadaNode {
|
|||||||
size_t id_len;
|
size_t id_len;
|
||||||
char* title;
|
char* title;
|
||||||
size_t title_len;
|
size_t title_len;
|
||||||
char* action;
|
CyberiadaBehavior* behavior;
|
||||||
size_t action_len;
|
|
||||||
CyberiadaRect* geometry_rect;
|
CyberiadaRect* geometry_rect;
|
||||||
struct _CyberiadaNode* next;
|
struct _CyberiadaNode* next;
|
||||||
struct _CyberiadaNode* parent;
|
struct _CyberiadaNode* parent;
|
||||||
@@ -85,67 +107,67 @@ typedef struct _CyberiadaNode {
|
|||||||
|
|
||||||
/* SM edge (transition) */
|
/* SM edge (transition) */
|
||||||
typedef struct _CyberiadaEdge {
|
typedef struct _CyberiadaEdge {
|
||||||
CyberiadaEdgeType type;
|
CyberiadaEdgeType type;
|
||||||
char* id;
|
char* id;
|
||||||
size_t id_len;
|
size_t id_len;
|
||||||
char* source_id;
|
char* source_id;
|
||||||
size_t source_id_len;
|
size_t source_id_len;
|
||||||
char* target_id;
|
char* target_id;
|
||||||
size_t target_id_len;
|
size_t target_id_len;
|
||||||
CyberiadaNode* source;
|
CyberiadaNode* source;
|
||||||
CyberiadaNode* target;
|
CyberiadaNode* target;
|
||||||
char* action;
|
CyberiadaBehavior* behavior;
|
||||||
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;
|
CyberiadaPoint* geometry_label;
|
||||||
char* color;
|
char* color;
|
||||||
size_t color_len;
|
size_t color_len;
|
||||||
struct _CyberiadaEdge* next;
|
struct _CyberiadaEdge* next;
|
||||||
} CyberiadaEdge;
|
} CyberiadaEdge;
|
||||||
|
|
||||||
/* SM extentions
|
/* SM extentions
|
||||||
typedef struct _CyberiadaExtension {
|
typedef struct _CyberiadaExtension {
|
||||||
char* id;
|
char* id;
|
||||||
size_t id_len;
|
size_t id_len;
|
||||||
char* title;
|
char* title;
|
||||||
size_t title_len;
|
size_t title_len;
|
||||||
char* data;
|
char* data;
|
||||||
size_t data_len;
|
size_t data_len;
|
||||||
struct _CyberiadaExtension* next;
|
struct _CyberiadaExtension* next;
|
||||||
} CyberiadaExtension;*/
|
} 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;
|
char* info;
|
||||||
size_t info_len;
|
size_t info_len;
|
||||||
CyberiadaNode* nodes;
|
CyberiadaNode* nodes;
|
||||||
CyberiadaEdge* edges;
|
CyberiadaEdge* edges;
|
||||||
/* CyberiadaExtension* extensions;*/
|
/* CyberiadaExtension* extensions;*/
|
||||||
} CyberiadaSM;
|
} CyberiadaSM;
|
||||||
|
|
||||||
/* SM GraphML supported formats */
|
/* SM GraphML supported formats */
|
||||||
typedef enum {
|
typedef enum {
|
||||||
cybxmlYED = 0,
|
cybxmlYED = 0,
|
||||||
cybxmlCyberiada,
|
cybxmlCyberiada,
|
||||||
cybxmlUnknown
|
cybxmlUnknown
|
||||||
} CyberiadaXMLFormat;
|
} CyberiadaXMLFormat;
|
||||||
|
|
||||||
/* -----------------------------------------------------------------------------
|
/* -----------------------------------------------------------------------------
|
||||||
* The Cyberiada GraphML error codes
|
* The Cyberiada GraphML error codes
|
||||||
* ----------------------------------------------------------------------------- */
|
* ----------------------------------------------------------------------------- */
|
||||||
|
|
||||||
#define CYBERIADA_NO_ERROR 0
|
#define CYBERIADA_NO_ERROR 0
|
||||||
#define CYBERIADA_XML_ERROR 1
|
#define CYBERIADA_XML_ERROR 1
|
||||||
#define CYBERIADA_FORMAT_ERROR 2
|
#define CYBERIADA_FORMAT_ERROR 2
|
||||||
#define CYBERIADA_NOT_FOUND 3
|
#define CYBERIADA_BEHAVIOR_FORMAT_ERROR 3
|
||||||
#define CYBERIADA_BAD_PARAMETER 4
|
#define CYBERIADA_NOT_FOUND 4
|
||||||
#define CYBERIADA_ASSERT 5
|
#define CYBERIADA_BAD_PARAMETER 5
|
||||||
|
#define CYBERIADA_ASSERT 6
|
||||||
|
|
||||||
/* -----------------------------------------------------------------------------
|
/* -----------------------------------------------------------------------------
|
||||||
* The Cyberiada GraphML library functions
|
* The Cyberiada GraphML library functions
|
||||||
@@ -165,7 +187,10 @@ typedef enum {
|
|||||||
|
|
||||||
/* Read an XML file and decode the SM structure */
|
/* Read an XML file and decode the SM structure */
|
||||||
int cyberiada_read_sm(CyberiadaSM* sm, const char* filename, CyberiadaXMLFormat format);
|
int cyberiada_read_sm(CyberiadaSM* sm, const char* filename, CyberiadaXMLFormat format);
|
||||||
|
|
||||||
|
/* Encode the SM structure and write the data to an XML file */
|
||||||
|
int cyberiada_write_sm(CyberiadaSM* sm, const char* filename, CyberiadaXMLFormat format);
|
||||||
|
|
||||||
/* Print the SM structure to stdout */
|
/* Print the SM structure to stdout */
|
||||||
int cyberiada_print_sm(CyberiadaSM* sm);
|
int cyberiada_print_sm(CyberiadaSM* sm);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user