export memory allocation functions
This commit is contained in:
@@ -326,7 +326,7 @@ static const size_t yed_graphml_keys_count = sizeof(yed_graphml_keys) / sizeof(G
|
|||||||
* Utility functions
|
* Utility functions
|
||||||
* ----------------------------------------------------------------------------- */
|
* ----------------------------------------------------------------------------- */
|
||||||
|
|
||||||
static int cyberiada_copy_string(char** target, size_t* size, const char* source)
|
int cyberiada_copy_string(char** target, size_t* size, const char* source)
|
||||||
{
|
{
|
||||||
char* target_str;
|
char* target_str;
|
||||||
size_t strsize;
|
size_t strsize;
|
||||||
@@ -432,14 +432,14 @@ static CyberiadaEdge* cyberiada_graph_find_edge_by_id(CyberiadaEdge* root, const
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static CyberiadaCommentData* cyberiada_new_comment_data(void)
|
CyberiadaCommentData* cyberiada_new_comment_data(void)
|
||||||
{
|
{
|
||||||
CyberiadaCommentData* cd = (CyberiadaCommentData*)malloc(sizeof(CyberiadaCommentData));
|
CyberiadaCommentData* cd = (CyberiadaCommentData*)malloc(sizeof(CyberiadaCommentData));
|
||||||
memset(cd, 0, sizeof(CyberiadaCommentData));
|
memset(cd, 0, sizeof(CyberiadaCommentData));
|
||||||
return cd;
|
return cd;
|
||||||
}
|
}
|
||||||
|
|
||||||
static CyberiadaLink* cyberiada_new_link(const char* ref)
|
CyberiadaLink* cyberiada_new_link(const char* ref)
|
||||||
{
|
{
|
||||||
CyberiadaLink* link = (CyberiadaLink*)malloc(sizeof(CyberiadaLink));
|
CyberiadaLink* link = (CyberiadaLink*)malloc(sizeof(CyberiadaLink));
|
||||||
memset(link, 0, sizeof(CyberiadaLink));
|
memset(link, 0, sizeof(CyberiadaLink));
|
||||||
@@ -447,7 +447,7 @@ static CyberiadaLink* cyberiada_new_link(const char* ref)
|
|||||||
return link;
|
return link;
|
||||||
}
|
}
|
||||||
|
|
||||||
static CyberiadaNode* cyberiada_new_node(const char* id)
|
CyberiadaNode* cyberiada_new_node(const char* id)
|
||||||
{
|
{
|
||||||
CyberiadaNode* new_node = (CyberiadaNode*)malloc(sizeof(CyberiadaNode));
|
CyberiadaNode* new_node = (CyberiadaNode*)malloc(sizeof(CyberiadaNode));
|
||||||
memset(new_node, 0, sizeof(CyberiadaNode));
|
memset(new_node, 0, sizeof(CyberiadaNode));
|
||||||
@@ -513,7 +513,7 @@ static int cyberiada_destroy_all_nodes(CyberiadaNode* node)
|
|||||||
return CYBERIADA_NO_ERROR;
|
return CYBERIADA_NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
static CyberiadaCommentSubject* cyberiada_new_comment_subject(CyberiadaCommentSubjectType type)
|
CyberiadaCommentSubject* cyberiada_new_comment_subject(CyberiadaCommentSubjectType type)
|
||||||
{
|
{
|
||||||
CyberiadaCommentSubject* cs = (CyberiadaCommentSubject*)malloc(sizeof(CyberiadaCommentSubject));
|
CyberiadaCommentSubject* cs = (CyberiadaCommentSubject*)malloc(sizeof(CyberiadaCommentSubject));
|
||||||
memset(cs, 0, sizeof(CyberiadaCommentSubject));
|
memset(cs, 0, sizeof(CyberiadaCommentSubject));
|
||||||
@@ -521,7 +521,7 @@ static CyberiadaCommentSubject* cyberiada_new_comment_subject(CyberiadaCommentSu
|
|||||||
return cs;
|
return cs;
|
||||||
}
|
}
|
||||||
|
|
||||||
static CyberiadaEdge* cyberiada_new_edge(const char* id, const char* source, const char* target)
|
CyberiadaEdge* cyberiada_new_edge(const char* id, const char* source, const char* target)
|
||||||
{
|
{
|
||||||
CyberiadaEdge* new_edge = (CyberiadaEdge*)malloc(sizeof(CyberiadaEdge));
|
CyberiadaEdge* new_edge = (CyberiadaEdge*)malloc(sizeof(CyberiadaEdge));
|
||||||
memset(new_edge, 0, sizeof(CyberiadaEdge));
|
memset(new_edge, 0, sizeof(CyberiadaEdge));
|
||||||
@@ -532,10 +532,31 @@ static CyberiadaEdge* cyberiada_new_edge(const char* id, const char* source, con
|
|||||||
return new_edge;
|
return new_edge;
|
||||||
}
|
}
|
||||||
|
|
||||||
static CyberiadaAction* cyberiada_new_action(CyberiadaActionType type,
|
CyberiadaPoint* cyberiada_new_point(void)
|
||||||
const char* trigger,
|
{
|
||||||
const char* guard,
|
CyberiadaPoint* p = (CyberiadaPoint*)malloc(sizeof(CyberiadaPoint));
|
||||||
const char* behavior)
|
memset(p, 0, sizeof(CyberiadaPoint));
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
CyberiadaRect* cyberiada_new_rect(void)
|
||||||
|
{
|
||||||
|
CyberiadaRect* r = (CyberiadaRect*)malloc(sizeof(CyberiadaRect));
|
||||||
|
memset(r, 0, sizeof(CyberiadaRect));
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
CyberiadaPolyline* cyberiada_new_polyline(void)
|
||||||
|
{
|
||||||
|
CyberiadaPolyline* pl = (CyberiadaPolyline*)malloc(sizeof(CyberiadaPolyline));
|
||||||
|
memset(pl, 0, sizeof(CyberiadaPolyline));
|
||||||
|
return pl;
|
||||||
|
}
|
||||||
|
|
||||||
|
CyberiadaAction* cyberiada_new_action(CyberiadaActionType type,
|
||||||
|
const char* trigger,
|
||||||
|
const char* guard,
|
||||||
|
const char* behavior)
|
||||||
{
|
{
|
||||||
CyberiadaAction* action = (CyberiadaAction*)malloc(sizeof(CyberiadaAction));
|
CyberiadaAction* action = (CyberiadaAction*)malloc(sizeof(CyberiadaAction));
|
||||||
memset(action, 0, sizeof(CyberiadaAction));
|
memset(action, 0, sizeof(CyberiadaAction));
|
||||||
@@ -1226,14 +1247,14 @@ static int cyberiada_init_sm(CyberiadaSM* sm)
|
|||||||
return CYBERIADA_NO_ERROR;
|
return CYBERIADA_NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
static CyberiadaSM* cyberiada_create_sm(void)
|
CyberiadaSM* cyberiada_new_sm(void)
|
||||||
{
|
{
|
||||||
CyberiadaSM* sm = (CyberiadaSM*)malloc(sizeof(CyberiadaSM));
|
CyberiadaSM* sm = (CyberiadaSM*)malloc(sizeof(CyberiadaSM));
|
||||||
cyberiada_init_sm(sm);
|
cyberiada_init_sm(sm);
|
||||||
return sm;
|
return sm;
|
||||||
}
|
}
|
||||||
|
|
||||||
CyberiadaDocument* cyberiada_create_sm_document(void)
|
CyberiadaDocument* cyberiada_new_sm_document(void)
|
||||||
{
|
{
|
||||||
CyberiadaDocument* doc = (CyberiadaDocument*)malloc(sizeof(CyberiadaDocument));
|
CyberiadaDocument* doc = (CyberiadaDocument*)malloc(sizeof(CyberiadaDocument));
|
||||||
cyberiada_init_sm_document(doc);
|
cyberiada_init_sm_document(doc);
|
||||||
@@ -1448,7 +1469,7 @@ static int cyberiada_xml_read_coord(xmlNode* xml_node,
|
|||||||
static int cyberiada_xml_read_point(xmlNode* xml_node,
|
static int cyberiada_xml_read_point(xmlNode* xml_node,
|
||||||
CyberiadaPoint** point)
|
CyberiadaPoint** point)
|
||||||
{
|
{
|
||||||
CyberiadaPoint* p = (CyberiadaPoint*)malloc(sizeof(CyberiadaPoint));
|
CyberiadaPoint* p = cyberiada_new_point();
|
||||||
if (cyberiada_xml_read_coord(xml_node,
|
if (cyberiada_xml_read_coord(xml_node,
|
||||||
GRAPHML_GEOM_X_ATTRIBUTE,
|
GRAPHML_GEOM_X_ATTRIBUTE,
|
||||||
&(p->x))) {
|
&(p->x))) {
|
||||||
@@ -1466,7 +1487,7 @@ static int cyberiada_xml_read_point(xmlNode* xml_node,
|
|||||||
static int cyberiada_xml_read_rect(xmlNode* xml_node,
|
static int cyberiada_xml_read_rect(xmlNode* xml_node,
|
||||||
CyberiadaRect** rect)
|
CyberiadaRect** rect)
|
||||||
{
|
{
|
||||||
CyberiadaRect* r = (CyberiadaRect*)malloc(sizeof(CyberiadaRect));
|
CyberiadaRect* r = cyberiada_new_rect();
|
||||||
if (cyberiada_xml_read_coord(xml_node,
|
if (cyberiada_xml_read_coord(xml_node,
|
||||||
GRAPHML_GEOM_X_ATTRIBUTE,
|
GRAPHML_GEOM_X_ATTRIBUTE,
|
||||||
&(r->x)) != CYBERIADA_NO_ERROR) {
|
&(r->x)) != CYBERIADA_NO_ERROR) {
|
||||||
@@ -1513,7 +1534,7 @@ static GraphProcessorState handle_new_graph(xmlNode* xml_node,
|
|||||||
while (sm->next) sm = sm->next;
|
while (sm->next) sm = sm->next;
|
||||||
if (parent == NULL) {
|
if (parent == NULL) {
|
||||||
if (sm->nodes != NULL) {
|
if (sm->nodes != NULL) {
|
||||||
sm->next = cyberiada_create_sm();
|
sm->next = cyberiada_new_sm();
|
||||||
sm = sm->next;
|
sm = sm->next;
|
||||||
}
|
}
|
||||||
sm->nodes = cyberiada_new_node(buffer);
|
sm->nodes = cyberiada_new_node(buffer);
|
||||||
@@ -1602,8 +1623,7 @@ static GraphProcessorState handle_edge_point(xmlNode* xml_node,
|
|||||||
if (cyberiada_xml_read_point(xml_node, &p) != CYBERIADA_NO_ERROR) {
|
if (cyberiada_xml_read_point(xml_node, &p) != CYBERIADA_NO_ERROR) {
|
||||||
return gpsInvalid;
|
return gpsInvalid;
|
||||||
}
|
}
|
||||||
pl = (CyberiadaPolyline*)malloc(sizeof(CyberiadaPolyline));
|
pl = cyberiada_new_polyline();
|
||||||
memset(pl, 0, sizeof(CyberiadaPolyline));
|
|
||||||
pl->point.x = p->x;
|
pl->point.x = p->x;
|
||||||
pl->point.y = p->y;
|
pl->point.y = p->y;
|
||||||
free(p);
|
free(p);
|
||||||
@@ -1694,7 +1714,7 @@ static GraphProcessorState handle_node_geometry(xmlNode* xml_node,
|
|||||||
return gpsInvalid;
|
return gpsInvalid;
|
||||||
}
|
}
|
||||||
if (type == cybNodeInitial) {
|
if (type == cybNodeInitial) {
|
||||||
current->geometry_point = (CyberiadaPoint*)malloc(sizeof(CyberiadaPoint));
|
current->geometry_point = cyberiada_new_point();
|
||||||
current->geometry_point->x = rect->x + rect->width / 2.0f;
|
current->geometry_point->x = rect->x + rect->width / 2.0f;
|
||||||
current->geometry_point->y = rect->y + rect->height / 2.0f;
|
current->geometry_point->y = rect->y + rect->height / 2.0f;
|
||||||
free(rect);
|
free(rect);
|
||||||
@@ -1796,8 +1816,8 @@ static GraphProcessorState handle_edge_geometry(xmlNode* xml_node,
|
|||||||
ERROR("no current edge\n");
|
ERROR("no current edge\n");
|
||||||
return gpsInvalid;
|
return gpsInvalid;
|
||||||
}
|
}
|
||||||
current->geometry_source_point = (CyberiadaPoint*)malloc(sizeof(CyberiadaPoint));
|
current->geometry_source_point = cyberiada_new_point();
|
||||||
current->geometry_target_point = (CyberiadaPoint*)malloc(sizeof(CyberiadaPoint));
|
current->geometry_target_point = cyberiada_new_point();
|
||||||
if (cyberiada_xml_read_coord(xml_node,
|
if (cyberiada_xml_read_coord(xml_node,
|
||||||
GRAPHML_YED_GEOM_SOURCE_X_ATTRIBUTE,
|
GRAPHML_YED_GEOM_SOURCE_X_ATTRIBUTE,
|
||||||
&(current->geometry_source_point->x)) != CYBERIADA_NO_ERROR ||
|
&(current->geometry_source_point->x)) != CYBERIADA_NO_ERROR ||
|
||||||
@@ -1957,6 +1977,19 @@ static MetainfoDeclaration cyberiada_metadata[] = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
CyberiadaMetainformation* cyberiada_new_meta(void)
|
||||||
|
{
|
||||||
|
CyberiadaMetainformation* meta = (CyberiadaMetainformation*)malloc(sizeof(CyberiadaMetainformation));
|
||||||
|
memset(meta, 0, sizeof(CyberiadaMetainformation));
|
||||||
|
|
||||||
|
cyberiada_copy_string(&(meta->standard_version),
|
||||||
|
&(meta->standard_version_len),
|
||||||
|
CYBERIADA_STANDARD_VERSION_CYBERIADAML);
|
||||||
|
meta->transition_order_flag = 1;
|
||||||
|
meta->event_propagation_flag = 1;
|
||||||
|
return meta;
|
||||||
|
}
|
||||||
|
|
||||||
static int cyberiada_add_default_meta(CyberiadaDocument* doc, const char* sm_name)
|
static int cyberiada_add_default_meta(CyberiadaDocument* doc, const char* sm_name)
|
||||||
{
|
{
|
||||||
CyberiadaMetainformation* meta;
|
CyberiadaMetainformation* meta;
|
||||||
@@ -1965,18 +1998,12 @@ static int cyberiada_add_default_meta(CyberiadaDocument* doc, const char* sm_nam
|
|||||||
return CYBERIADA_BAD_PARAMETER;
|
return CYBERIADA_BAD_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
meta = (CyberiadaMetainformation*)malloc(sizeof(CyberiadaMetainformation));
|
meta = cyberiada_new_meta();
|
||||||
memset(meta, 0, sizeof(CyberiadaMetainformation));
|
|
||||||
|
|
||||||
cyberiada_copy_string(&(meta->standard_version),
|
|
||||||
&(meta->standard_version_len),
|
|
||||||
CYBERIADA_STANDARD_VERSION_CYBERIADAML);
|
|
||||||
if (*sm_name) {
|
if (*sm_name) {
|
||||||
cyberiada_copy_string(&(meta->name), &(meta->name_len), sm_name);
|
cyberiada_copy_string(&(meta->name), &(meta->name_len), sm_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
meta->transition_order_flag = 1;
|
|
||||||
meta->event_propagation_flag = 1;
|
|
||||||
|
|
||||||
doc->meta_info = meta;
|
doc->meta_info = meta;
|
||||||
return CYBERIADA_NO_ERROR;
|
return CYBERIADA_NO_ERROR;
|
||||||
@@ -2911,7 +2938,7 @@ int cyberiada_read_sm_document(CyberiadaDocument* cyb_doc, const char* filename,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
cyb_doc->state_machines = cyberiada_create_sm();
|
cyb_doc->state_machines = cyberiada_new_sm();
|
||||||
|
|
||||||
/* DEBUG("reading format %d\n", format); */
|
/* DEBUG("reading format %d\n", format); */
|
||||||
if (format == cybxmlYED) {
|
if (format == cybxmlYED) {
|
||||||
|
|||||||
@@ -244,8 +244,8 @@ typedef enum {
|
|||||||
* The Cyberiada GraphML library functions
|
* The Cyberiada GraphML library functions
|
||||||
* ----------------------------------------------------------------------------- */
|
* ----------------------------------------------------------------------------- */
|
||||||
|
|
||||||
/* Allocate the SM structure in memory (for heap usage) */
|
/* Allocate the SM document structure in memory (for heap usage) */
|
||||||
CyberiadaDocument* cyberiada_create_sm_document(void);
|
CyberiadaDocument* cyberiada_new_sm_document(void);
|
||||||
|
|
||||||
/* Initialize the SM structure */
|
/* Initialize the SM structure */
|
||||||
/* Do not use the structure before the initialization! */
|
/* Do not use the structure before the initialization! */
|
||||||
@@ -268,6 +268,42 @@ typedef enum {
|
|||||||
/* Print the SM structure to stdout */
|
/* Print the SM structure to stdout */
|
||||||
int cyberiada_print_sm_document(CyberiadaDocument* doc);
|
int cyberiada_print_sm_document(CyberiadaDocument* doc);
|
||||||
|
|
||||||
|
/* Allocate and initialize the SM structure in memory */
|
||||||
|
CyberiadaSM* cyberiada_new_sm(void);
|
||||||
|
|
||||||
|
/* Allocate and initialize the SM node structure in memory */
|
||||||
|
CyberiadaNode* cyberiada_new_node(const char* id);
|
||||||
|
|
||||||
|
/* Allocate and initialize the SM edge structure in memory */
|
||||||
|
CyberiadaEdge* cyberiada_new_edge(const char* id, const char* source, const char* target);
|
||||||
|
|
||||||
|
/* Allocate and initialize the SM comment data structure in memory */
|
||||||
|
CyberiadaCommentData* cyberiada_new_comment_data(void);
|
||||||
|
|
||||||
|
/* Allocate and initialize the SM link structure in memory */
|
||||||
|
CyberiadaLink* cyberiada_new_link(const char* ref);
|
||||||
|
|
||||||
|
/* Allocate and initialize the SM comment subject structure in memory */
|
||||||
|
CyberiadaCommentSubject* cyberiada_new_comment_subject(CyberiadaCommentSubjectType type);
|
||||||
|
|
||||||
|
/* Allocate and initialize the SM action structure in memory */
|
||||||
|
CyberiadaAction* cyberiada_new_action(CyberiadaActionType type, const char* trigger, const char* guard, const char* behavior);
|
||||||
|
|
||||||
|
/* Allocate and initialize the SM point structure in memory */
|
||||||
|
CyberiadaPoint* cyberiada_new_point(void);
|
||||||
|
|
||||||
|
/* Allocate and initialize the SM rect structure in memory */
|
||||||
|
CyberiadaRect* cyberiada_new_rect(void);
|
||||||
|
|
||||||
|
/* Allocate and initialize the SM polyline structure in memory */
|
||||||
|
CyberiadaPolyline* cyberiada_new_polyline(void);
|
||||||
|
|
||||||
|
/* Allocate and initialize the SM metainformation structure in memory */
|
||||||
|
CyberiadaMetainformation* cyberiada_new_meta(void);
|
||||||
|
|
||||||
|
/* Initialize and copy string. Use this function to initialize strings in Cyberiada structures */
|
||||||
|
int cyberiada_copy_string(char** target, size_t* size, const char* source);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user