Change node counting system
This commit is contained in:
		
							parent
							
								
									f053b6cc5a
								
							
						
					
					
						commit
						1559a0d51c
					
				
							
								
								
									
										11
									
								
								src/main.c
								
								
								
								
							
							
						
						
									
										11
									
								
								src/main.c
								
								
								
								
							| 
						 | 
					@ -16,21 +16,26 @@ int main(int argc, char** argv){
 | 
				
			||||||
    NOD_NodeAddChild(node, node);
 | 
					    NOD_NodeAddChild(node, node);
 | 
				
			||||||
    NOD_NodeAddChild(testchild, node);
 | 
					    NOD_NodeAddChild(testchild, node);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    NOD_NodeUnparent(justtotest);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    printf("\nThe name of the node is \"%s\"\n", node->name);
 | 
					    printf("\nThe name of the node is \"%s\"\n", node->name);
 | 
				
			||||||
    for(int i = 0; i < node->childc; i++){
 | 
					    for(int i = 0; i < NOD_NodeChildCount(node); i++){
 | 
				
			||||||
        printf("Childnode: \"%s\"\n", node->childv[i]->name);
 | 
					        printf("Childnode: \"%s\"\n", node->childv[i]->name);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    printf("\nThe name of the node is \"%s\"\n", node->name);
 | 
					    printf("\nThe name of the node is \"%s\"\n", node->name);
 | 
				
			||||||
    for(int i = 0; i < node->childc; i++){
 | 
					    for(int i = 0; i < NOD_NodeChildCount(node); i++){
 | 
				
			||||||
        printf("Childnode: \"%s\"\n", node->childv[i]->name);
 | 
					        printf("Childnode: \"%s\"\n", node->childv[i]->name);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    printf("\nThe amount of children is %d, the real size is %d\n",
 | 
					    printf("\nThe amount of children is %d, the real size is %d\n",
 | 
				
			||||||
           node->childc,
 | 
					           NOD_NodeChildCount(node),
 | 
				
			||||||
           (int)sizeof(testchild)
 | 
					           (int)sizeof(testchild)
 | 
				
			||||||
           );
 | 
					           );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    printf("\n");
 | 
				
			||||||
 | 
					    NOD_PrintNodeTree(node);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    NOD_DestroyNode(node);
 | 
					    NOD_DestroyNode(node);
 | 
				
			||||||
    NOD_DestroyNode(testchild);
 | 
					    NOD_DestroyNode(testchild);
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										41
									
								
								src/node.c
								
								
								
								
							
							
						
						
									
										41
									
								
								src/node.c
								
								
								
								
							| 
						 | 
					@ -87,19 +87,44 @@ void NOD_NodeAddChild(NOD_Node* parent, NOD_Node* child){
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void NOD_NodeRemoveChild(NOD_Node* parent, NOD_Node* child){
 | 
					void NOD_NodeUnparent(NOD_Node* node){
 | 
				
			||||||
  if(parent != NULL && child != NULL){
 | 
					  if(node != NULL && node->parent != NULL){
 | 
				
			||||||
    if(parent->childc < 1 || parent->childv == NULL){
 | 
					    NOD_Node* parent = node->parent;
 | 
				
			||||||
        fprintf(stderr,
 | 
					
 | 
				
			||||||
                "NOD_Error: Cannot remove child \"%s\". Node \"%s\" has no children.\n",
 | 
					    for(int i = 0; i < parent->childc; i ++){
 | 
				
			||||||
                child->name,
 | 
					      if(parent->childv[i] == node){
 | 
				
			||||||
                parent->name);
 | 
					        parent->childv[i] = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /* Free allocated memory if last child */
 | 
				
			||||||
 | 
					        if(i + 1 == parent->childc){
 | 
				
			||||||
 | 
					          fprintf(stderr,
 | 
				
			||||||
 | 
					                  "NOD_Debug: Freeing last child of vector...\n");
 | 
				
			||||||
 | 
					          parent->childv = realloc(parent->childv, sizeof(node) * parent->childc);
 | 
				
			||||||
 | 
					          parent->childc--;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    node->parent = NULL;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void NOD_PrintNodeTree(NOD_Node* node){
 | 
					void NOD_PrintNodeTree(NOD_Node* node){
 | 
				
			||||||
  if(node != NULL){
 | 
					  if(node != NULL){
 | 
				
			||||||
    printf("%s", node->name);
 | 
					    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);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int NOD_NodeChildCount(NOD_Node* node){
 | 
				
			||||||
 | 
					  unsigned int count = 0;
 | 
				
			||||||
 | 
					  for(int i = 0; i < node->childc; i++){
 | 
				
			||||||
 | 
					    if(node->childv[i] != NULL) count++;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return count;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,6 +4,9 @@
 | 
				
			||||||
typedef struct node{
 | 
					typedef struct node{
 | 
				
			||||||
  char* name;
 | 
					  char* name;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /** childc keeps track of allocated space,
 | 
				
			||||||
 | 
					      not amount of children. For that use
 | 
				
			||||||
 | 
					      NOD_NodeChildCount */
 | 
				
			||||||
  int childc;
 | 
					  int childc;
 | 
				
			||||||
  struct node** childv;
 | 
					  struct node** childv;
 | 
				
			||||||
  struct node* parent;
 | 
					  struct node* parent;
 | 
				
			||||||
| 
						 | 
					@ -14,6 +17,9 @@ NOD_Node* NOD_CreateNode(char* name);
 | 
				
			||||||
void NOD_DestroyNode(NOD_Node* node);
 | 
					void NOD_DestroyNode(NOD_Node* node);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void NOD_NodeAddChild(NOD_Node* parent, NOD_Node* child);
 | 
					void NOD_NodeAddChild(NOD_Node* parent, NOD_Node* child);
 | 
				
			||||||
void NOD_NodeRemoveChild(NOD_Node* parent, NOD_Node* child);
 | 
					void NOD_NodeUnparent(NOD_Node* child);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void NOD_PrintNodeTree(NOD_Node* node);
 | 
				
			||||||
 | 
					int NOD_NodeChildCount(NOD_Node* node);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // __NODE_H_
 | 
					#endif // __NODE_H_
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue