Skip to content
Snippets Groups Projects
Commit 492d0676 authored by Marc-Jan Szpineter's avatar Marc-Jan Szpineter
Browse files

Replace syntree.c

parent 20b5aed7
No related merge requests found
...@@ -10,9 +10,11 @@ Sheung Tung Tony Tam ...@@ -10,9 +10,11 @@ Sheung Tung Tony Tam
Eine dynamische liste (node_list) enthaelt die nodes des syntrees. Eine dynamische liste (node_list) enthaelt die nodes des syntrees.
Jedem Knoten wird eine ID in Form eines unsigned int zugewiesen (beginnend bei 0) und ueber diese ID ist Jedem Knoten wird eine ID in Form eines unsigned int zugewiesen (beginnend bei 0) und ueber diese ID ist
der node auch direkt in der Liste referenzierbar (z.B. node_list[5]). der node auch direkt in der Liste referenzierbar (z.B. node_list[5]).
Der root node hat ID 0 und wird erstmal nicht gebraucht, hat aber den Effekt, dass damit die Rechnung bei 1 beginnt.
(Der root node ist ein dummy node, denn der Baum waechst von den Blaettern zur Wurzel
und es kann isolierte Knoten geben).
Der aktuelle ID-Wert wird im syntree gespeichert und bei jedem Knoten einfach hochgezaehlt. Der aktuelle ID-Wert wird im syntree gespeichert und bei jedem Knoten einfach hochgezaehlt.
Der root node ist ein dummy node, denn der Baum waechst von den Blaettern zur Wurzel
und es kann isolierte Knoten geben.
Jeder node hat eine Liste an children (dynamisch). Jeder node hat eine Liste an children (dynamisch).
Dabei wird einfach eine Liste an SyntreeNodeIDs gespeichert. Dabei wird einfach eine Liste an SyntreeNodeIDs gespeichert.
...@@ -40,9 +42,6 @@ int syntreeInit(Syntree *self) { ...@@ -40,9 +42,6 @@ int syntreeInit(Syntree *self) {
self->next_ID = 0; self->next_ID = 0;
self->root = self->next_ID++; self->root = self->next_ID++;
/* DEBUG */
//printf("syntreeInit(...), size: %d\n", self->size);
self->node_list = malloc(SIZE_OF_UNIT * NODE_LIST_INIT_CAPACITY_IN_UNITS); self->node_list = malloc(SIZE_OF_UNIT * NODE_LIST_INIT_CAPACITY_IN_UNITS);
self->capacity = NODE_LIST_INIT_CAPACITY_IN_UNITS; self->capacity = NODE_LIST_INIT_CAPACITY_IN_UNITS;
...@@ -64,9 +63,6 @@ int syntreeInit(Syntree *self) { ...@@ -64,9 +63,6 @@ int syntreeInit(Syntree *self) {
void syntreeRelease(Syntree *self) { void syntreeRelease(Syntree *self) {
/* DEBUG */
//printf("syntreeRelease(...), size: %d\n", self->size);
for (int i = 0; i < self->size; ++i) { for (int i = 0; i < self->size; ++i) {
free(self->node_list[i].children); // free all references to children from all nodes free(self->node_list[i].children); // free all references to children from all nodes
} }
...@@ -79,9 +75,6 @@ void syntreeRelease(Syntree *self) { ...@@ -79,9 +75,6 @@ void syntreeRelease(Syntree *self) {
SyntreeNodeID syntreeNodeNumber(Syntree *self, int number) { SyntreeNodeID syntreeNodeNumber(Syntree *self, int number) {
/* DEBUG */
//printf("syntreeNodeNumber(...), size: %d\n", self->size);
SyntreeNodeID id = self->next_ID++; SyntreeNodeID id = self->next_ID++;
// realloc() on node_list // realloc() on node_list
...@@ -102,9 +95,6 @@ SyntreeNodeID syntreeNodeNumber(Syntree *self, int number) { ...@@ -102,9 +95,6 @@ SyntreeNodeID syntreeNodeNumber(Syntree *self, int number) {
SyntreeNodeID syntreeNodeTag(Syntree *self, SyntreeNodeID id) { SyntreeNodeID syntreeNodeTag(Syntree *self, SyntreeNodeID id) {
/* DEBUG */
//printf("syntreeNodeTag(...), size: %d\n", self->size);
SyntreeNodeID new_id = self->next_ID++; SyntreeNodeID new_id = self->next_ID++;
// realloc() on node_list // realloc() on node_list
...@@ -127,30 +117,18 @@ SyntreeNodeID syntreeNodeTag(Syntree *self, SyntreeNodeID id) { ...@@ -127,30 +117,18 @@ SyntreeNodeID syntreeNodeTag(Syntree *self, SyntreeNodeID id) {
self->node_list[new_id].children[0] = id; self->node_list[new_id].children[0] = id;
/*
if (self->root == 0) {
self->root = new_id;
}
*/
return new_id; return new_id;
} }
SyntreeNodeID syntreeNodePair(Syntree *self, SyntreeNodeID id1, SyntreeNodeID id2) { SyntreeNodeID syntreeNodePair(Syntree *self, SyntreeNodeID id1, SyntreeNodeID id2) {
/* DEBUG */
//printf("syntreeNodePair(...), size: %d\n", self->size);
return syntreeNodeAppend(self, syntreeNodeTag(self,id1), id2); return syntreeNodeAppend(self, syntreeNodeTag(self,id1), id2);
} }
SyntreeNodeID syntreeNodeAppend(Syntree *self, SyntreeNodeID list, SyntreeNodeID elem) { SyntreeNodeID syntreeNodeAppend(Syntree *self, SyntreeNodeID list, SyntreeNodeID elem) {
/* DEBUG */
//printf("syntreeNodeAppend(...), size: %d\n", self->size);
// 'list' is no list node? // 'list' is no list node?
if (self->node_list[list].amount_of_children <= 0) { if (self->node_list[list].amount_of_children <= 0) {
fprintf(stderr, "ERROR in syntreeNodeAppend(...): list node with ID %d is no list node. The function didn't append element with ID %d.\n", list, elem); fprintf(stderr, "ERROR in syntreeNodeAppend(...): list node with ID %d is no list node. The function didn't append element with ID %d.\n", list, elem);
...@@ -169,9 +147,6 @@ SyntreeNodeID syntreeNodeAppend(Syntree *self, SyntreeNodeID list, SyntreeNodeID ...@@ -169,9 +147,6 @@ SyntreeNodeID syntreeNodeAppend(Syntree *self, SyntreeNodeID list, SyntreeNodeID
SyntreeNodeID syntreeNodePrepend(Syntree *self, SyntreeNodeID elem, SyntreeNodeID list) { SyntreeNodeID syntreeNodePrepend(Syntree *self, SyntreeNodeID elem, SyntreeNodeID list) {
/* DEBUG */
//printf("syntreeNodePrepend(...), size: %d\n", self->size);
// 'list' is no list node? // 'list' is no list node?
if (self->node_list[list].amount_of_children <= 0) { if (self->node_list[list].amount_of_children <= 0) {
fprintf(stderr, "ERROR in syntreeNodePrepend(...): list node with ID %d is no list node. The function didn't append element with ID %d.\n", list, elem); fprintf(stderr, "ERROR in syntreeNodePrepend(...): list node with ID %d is no list node. The function didn't append element with ID %d.\n", list, elem);
...@@ -196,9 +171,6 @@ SyntreeNodeID syntreeNodePrepend(Syntree *self, SyntreeNodeID elem, SyntreeNodeI ...@@ -196,9 +171,6 @@ SyntreeNodeID syntreeNodePrepend(Syntree *self, SyntreeNodeID elem, SyntreeNodeI
void syntreePrint(const Syntree *self, SyntreeNodeID root) { void syntreePrint(const Syntree *self, SyntreeNodeID root) {
/* DEBUG */
//printf("syntreePrint(...)\n");
syntreePrint_rec(self, root); syntreePrint_rec(self, root);
if (self != NULL) { if (self != NULL) {
...@@ -232,9 +204,6 @@ void syntreePrint_rec(const Syntree *self, SyntreeNodeID root) { ...@@ -232,9 +204,6 @@ void syntreePrint_rec(const Syntree *self, SyntreeNodeID root) {
void syntree_allocateNewSpaceForNodes(Syntree *self) { void syntree_allocateNewSpaceForNodes(Syntree *self) {
/* DEBUG */
//printf("syntree_allocateNewSpaceForNodes(...), size: %d\n", self->size);
Node * new_space = realloc(self->node_list, (self->capacity + NODE_LIST_ADD_WHEN_FULL_IN_UNITS) * SIZE_OF_UNIT); Node * new_space = realloc(self->node_list, (self->capacity + NODE_LIST_ADD_WHEN_FULL_IN_UNITS) * SIZE_OF_UNIT);
if (new_space == NULL) { if (new_space == NULL) {
...@@ -250,9 +219,6 @@ void syntree_allocateNewSpaceForNodes(Syntree *self) { ...@@ -250,9 +219,6 @@ void syntree_allocateNewSpaceForNodes(Syntree *self) {
void syntree_allocateNewSpaceForChildren(Syntree *self, SyntreeNodeID id) { void syntree_allocateNewSpaceForChildren(Syntree *self, SyntreeNodeID id) {
/* DEBUG */
//printf("syntree_allocateNewSpaceForChildren(...), size: %d\n", self->size);
SyntreeNodeID * new_space = realloc( self->node_list[id].children, (self->node_list[id].capacity_children + NODE_CHILDREN_LIST_ADD_WHEN_FULL_IN_UNITS) * (sizeof (SyntreeNodeID)) ); SyntreeNodeID * new_space = realloc( self->node_list[id].children, (self->node_list[id].capacity_children + NODE_CHILDREN_LIST_ADD_WHEN_FULL_IN_UNITS) * (sizeof (SyntreeNodeID)) );
if (new_space == NULL) { if (new_space == NULL) {
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment