export memory allocation functions

This commit is contained in:
Alexey Fedoseev
2024-04-13 12:37:38 +03:00
parent 65e1a88681
commit ab13bbf4b1
2 changed files with 93 additions and 30 deletions

View File

@@ -326,7 +326,7 @@ static const size_t yed_graphml_keys_count = sizeof(yed_graphml_keys) / sizeof(G
* 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;
size_t strsize;
@@ -432,14 +432,14 @@ static CyberiadaEdge* cyberiada_graph_find_edge_by_id(CyberiadaEdge* root, const
return NULL;
}
static CyberiadaCommentData* cyberiada_new_comment_data(void)
CyberiadaCommentData* cyberiada_new_comment_data(void)
{
CyberiadaCommentData* cd = (CyberiadaCommentData*)malloc(sizeof(CyberiadaCommentData));
memset(cd, 0, sizeof(CyberiadaCommentData));
return cd;
}
static CyberiadaLink* cyberiada_new_link(const char* ref)
CyberiadaLink* cyberiada_new_link(const char* ref)
{
CyberiadaLink* link = (CyberiadaLink*)malloc(sizeof(CyberiadaLink));
memset(link, 0, sizeof(CyberiadaLink));
@@ -447,7 +447,7 @@ static CyberiadaLink* cyberiada_new_link(const char* ref)
return link;
}
static CyberiadaNode* cyberiada_new_node(const char* id)
CyberiadaNode* cyberiada_new_node(const char* id)
{
CyberiadaNode* new_node = (CyberiadaNode*)malloc(sizeof(CyberiadaNode));
memset(new_node, 0, sizeof(CyberiadaNode));
@@ -513,7 +513,7 @@ static int cyberiada_destroy_all_nodes(CyberiadaNode* node)
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));
memset(cs, 0, sizeof(CyberiadaCommentSubject));
@@ -521,7 +521,7 @@ static CyberiadaCommentSubject* cyberiada_new_comment_subject(CyberiadaCommentSu
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));
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;
}
static CyberiadaAction* cyberiada_new_action(CyberiadaActionType type,
const char* trigger,
const char* guard,
const char* behavior)
CyberiadaPoint* cyberiada_new_point(void)
{
CyberiadaPoint* p = (CyberiadaPoint*)malloc(sizeof(CyberiadaPoint));
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));
memset(action, 0, sizeof(CyberiadaAction));
@@ -1226,14 +1247,14 @@ static int cyberiada_init_sm(CyberiadaSM* sm)
return CYBERIADA_NO_ERROR;
}
static CyberiadaSM* cyberiada_create_sm(void)
CyberiadaSM* cyberiada_new_sm(void)
{
CyberiadaSM* sm = (CyberiadaSM*)malloc(sizeof(CyberiadaSM));
cyberiada_init_sm(sm);
return sm;
}
CyberiadaDocument* cyberiada_create_sm_document(void)
CyberiadaDocument* cyberiada_new_sm_document(void)
{
CyberiadaDocument* doc = (CyberiadaDocument*)malloc(sizeof(CyberiadaDocument));
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,
CyberiadaPoint** point)
{
CyberiadaPoint* p = (CyberiadaPoint*)malloc(sizeof(CyberiadaPoint));
CyberiadaPoint* p = cyberiada_new_point();
if (cyberiada_xml_read_coord(xml_node,
GRAPHML_GEOM_X_ATTRIBUTE,
&(p->x))) {
@@ -1466,7 +1487,7 @@ static int cyberiada_xml_read_point(xmlNode* xml_node,
static int cyberiada_xml_read_rect(xmlNode* xml_node,
CyberiadaRect** rect)
{
CyberiadaRect* r = (CyberiadaRect*)malloc(sizeof(CyberiadaRect));
CyberiadaRect* r = cyberiada_new_rect();
if (cyberiada_xml_read_coord(xml_node,
GRAPHML_GEOM_X_ATTRIBUTE,
&(r->x)) != CYBERIADA_NO_ERROR) {
@@ -1513,7 +1534,7 @@ static GraphProcessorState handle_new_graph(xmlNode* xml_node,
while (sm->next) sm = sm->next;
if (parent == NULL) {
if (sm->nodes != NULL) {
sm->next = cyberiada_create_sm();
sm->next = cyberiada_new_sm();
sm = sm->next;
}
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) {
return gpsInvalid;
}
pl = (CyberiadaPolyline*)malloc(sizeof(CyberiadaPolyline));
memset(pl, 0, sizeof(CyberiadaPolyline));
pl = cyberiada_new_polyline();
pl->point.x = p->x;
pl->point.y = p->y;
free(p);
@@ -1694,7 +1714,7 @@ static GraphProcessorState handle_node_geometry(xmlNode* xml_node,
return gpsInvalid;
}
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->y = rect->y + rect->height / 2.0f;
free(rect);
@@ -1796,8 +1816,8 @@ static GraphProcessorState handle_edge_geometry(xmlNode* xml_node,
ERROR("no current edge\n");
return gpsInvalid;
}
current->geometry_source_point = (CyberiadaPoint*)malloc(sizeof(CyberiadaPoint));
current->geometry_target_point = (CyberiadaPoint*)malloc(sizeof(CyberiadaPoint));
current->geometry_source_point = cyberiada_new_point();
current->geometry_target_point = cyberiada_new_point();
if (cyberiada_xml_read_coord(xml_node,
GRAPHML_YED_GEOM_SOURCE_X_ATTRIBUTE,
&(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)
{
CyberiadaMetainformation* meta;
@@ -1965,18 +1998,12 @@ static int cyberiada_add_default_meta(CyberiadaDocument* doc, const char* sm_nam
return CYBERIADA_BAD_PARAMETER;
}
meta = (CyberiadaMetainformation*)malloc(sizeof(CyberiadaMetainformation));
memset(meta, 0, sizeof(CyberiadaMetainformation));
meta = cyberiada_new_meta();
cyberiada_copy_string(&(meta->standard_version),
&(meta->standard_version_len),
CYBERIADA_STANDARD_VERSION_CYBERIADAML);
if (*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;
return CYBERIADA_NO_ERROR;
@@ -2911,7 +2938,7 @@ int cyberiada_read_sm_document(CyberiadaDocument* cyb_doc, const char* filename,
break;
}
cyb_doc->state_machines = cyberiada_create_sm();
cyb_doc->state_machines = cyberiada_new_sm();
/* DEBUG("reading format %d\n", format); */
if (format == cybxmlYED) {

View File

@@ -244,8 +244,8 @@ typedef enum {
* The Cyberiada GraphML library functions
* ----------------------------------------------------------------------------- */
/* Allocate the SM structure in memory (for heap usage) */
CyberiadaDocument* cyberiada_create_sm_document(void);
/* Allocate the SM document structure in memory (for heap usage) */
CyberiadaDocument* cyberiada_new_sm_document(void);
/* Initialize the SM structure */
/* Do not use the structure before the initialization! */
@@ -268,6 +268,42 @@ typedef enum {
/* Print the SM structure to stdout */
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
}
#endif