Implement node tree printing
This commit is contained in:
		
							parent
							
								
									1559a0d51c
								
							
						
					
					
						commit
						1408cca6b7
					
				
							
								
								
									
										49
									
								
								src/main.c
								
								
								
								
							
							
						
						
									
										49
									
								
								src/main.c
								
								
								
								
							| 
						 | 
				
			
			@ -3,40 +3,31 @@
 | 
			
		|||
#include "node.h"
 | 
			
		||||
 | 
			
		||||
int main(int argc, char** argv){
 | 
			
		||||
    NOD_Node* node = NOD_CreateNode("test node");
 | 
			
		||||
    NOD_Node* testchild = NOD_CreateNode("I'm just a child");
 | 
			
		||||
    NOD_Node* otherchild = NOD_CreateNode("Another child");
 | 
			
		||||
    NOD_Node* justtotest = NOD_CreateNode("This one is a test");
 | 
			
		||||
    NOD_Node* node = NOD_CreateNode("Main Node");
 | 
			
		||||
    NOD_Node* child1 = NOD_CreateNode("First child");
 | 
			
		||||
    NOD_Node* child1child1 = NOD_CreateNode("Child of first child");
 | 
			
		||||
    NOD_Node* child2 = NOD_CreateNode("Second child");
 | 
			
		||||
    NOD_Node* child3 = NOD_CreateNode("Third child");
 | 
			
		||||
    NOD_Node* child3child1 = NOD_CreateNode("First child of third child");
 | 
			
		||||
    NOD_Node* child3child2 = NOD_CreateNode("Second child of third child");
 | 
			
		||||
 | 
			
		||||
    NOD_NodeAddChild(node, testchild);
 | 
			
		||||
    NOD_NodeAddChild(node, otherchild);
 | 
			
		||||
    NOD_NodeAddChild(node, justtotest);
 | 
			
		||||
    NOD_NodeAddChild(node, justtotest);
 | 
			
		||||
    NOD_NodeAddChild(node, justtotest);
 | 
			
		||||
    NOD_NodeAddChild(node, node);
 | 
			
		||||
    NOD_NodeAddChild(testchild, node);
 | 
			
		||||
    NOD_NodeAddChild(node, child1);
 | 
			
		||||
    NOD_NodeAddChild(child1, child1child1);
 | 
			
		||||
    NOD_NodeAddChild(node, child2);
 | 
			
		||||
    NOD_NodeAddChild(node, child3);
 | 
			
		||||
    NOD_NodeAddChild(child3, child3child1);
 | 
			
		||||
    NOD_NodeAddChild(child3, child3child2);
 | 
			
		||||
 | 
			
		||||
    NOD_NodeUnparent(justtotest);
 | 
			
		||||
    NOD_NodeUnparent(child2);
 | 
			
		||||
 | 
			
		||||
    printf("\nThe name of the node is \"%s\"\n", node->name);
 | 
			
		||||
    for(int i = 0; i < NOD_NodeChildCount(node); i++){
 | 
			
		||||
        printf("Childnode: \"%s\"\n", node->childv[i]->name);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    printf("\nThe name of the node is \"%s\"\n", node->name);
 | 
			
		||||
    for(int i = 0; i < NOD_NodeChildCount(node); i++){
 | 
			
		||||
        printf("Childnode: \"%s\"\n", node->childv[i]->name);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    printf("\nThe amount of children is %d, the real size is %d\n",
 | 
			
		||||
           NOD_NodeChildCount(node),
 | 
			
		||||
           (int)sizeof(testchild)
 | 
			
		||||
           );
 | 
			
		||||
 | 
			
		||||
    printf("\n");
 | 
			
		||||
    NOD_PrintNodeTree(node);
 | 
			
		||||
 | 
			
		||||
    NOD_DestroyNode(node);
 | 
			
		||||
    NOD_DestroyNode(testchild);
 | 
			
		||||
    NOD_DestroyNode(child1);
 | 
			
		||||
    NOD_DestroyNode(child1child1);
 | 
			
		||||
    NOD_DestroyNode(child2);
 | 
			
		||||
    NOD_DestroyNode(child3);
 | 
			
		||||
    NOD_DestroyNode(child3child1);
 | 
			
		||||
    NOD_DestroyNode(child3child2);
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										23
									
								
								src/node.c
								
								
								
								
							
							
						
						
									
										23
									
								
								src/node.c
								
								
								
								
							| 
						 | 
				
			
			@ -97,8 +97,8 @@ void NOD_NodeUnparent(NOD_Node* node){
 | 
			
		|||
 | 
			
		||||
        /* Free allocated memory if last child */
 | 
			
		||||
        if(i + 1 == parent->childc){
 | 
			
		||||
          fprintf(stderr,
 | 
			
		||||
                  "NOD_Debug: Freeing last child of vector...\n");
 | 
			
		||||
          //fprintf(stderr,
 | 
			
		||||
                  //"NOD_Debug: Freeing last child of vector...\n");
 | 
			
		||||
          parent->childv = realloc(parent->childv, sizeof(node) * parent->childc);
 | 
			
		||||
          parent->childc--;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -109,13 +109,26 @@ void NOD_NodeUnparent(NOD_Node* node){
 | 
			
		|||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void nodetree_print_branch(NOD_Node* node, int level, int pos){
 | 
			
		||||
  if(node != NULL){
 | 
			
		||||
 | 
			
		||||
    if(pos+1 != node->parent->childc) printf("├── ");
 | 
			
		||||
    else printf("└── ");
 | 
			
		||||
    printf("\"%s\"\n", node->name);
 | 
			
		||||
    for(int i = 0; i < node->childc; i++){
 | 
			
		||||
      if(pos+1 != node->parent->childc) printf("│   ");
 | 
			
		||||
      else printf("    ");
 | 
			
		||||
      nodetree_print_branch(node->childv[i], level+1, i);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void NOD_PrintNodeTree(NOD_Node* node){
 | 
			
		||||
  if(node != NULL){
 | 
			
		||||
    printf("\"%s\"\n", node->name);
 | 
			
		||||
 | 
			
		||||
    for(int i = 0; i < node->childc; i++){
 | 
			
		||||
      if(i+1 != node->childc) printf("├── ");
 | 
			
		||||
      else printf("└── ");
 | 
			
		||||
      printf("\"%s\"\n", node->childv[i]->name);
 | 
			
		||||
      nodetree_print_branch(node->childv[i], 0, i);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue