Initial commit
This commit is contained in:
		
						commit
						f053b6cc5a
					
				| 
						 | 
					@ -0,0 +1,97 @@
 | 
				
			||||||
 | 
					# Created by https://www.toptal.com/developers/gitignore/api/vim,c,linux
 | 
				
			||||||
 | 
					# Edit at https://www.toptal.com/developers/gitignore?templates=vim,c,linux
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### C ###
 | 
				
			||||||
 | 
					# Prerequisites
 | 
				
			||||||
 | 
					*.d
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Object files
 | 
				
			||||||
 | 
					*.o
 | 
				
			||||||
 | 
					*.ko
 | 
				
			||||||
 | 
					*.obj
 | 
				
			||||||
 | 
					*.elf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Linker output
 | 
				
			||||||
 | 
					*.ilk
 | 
				
			||||||
 | 
					*.map
 | 
				
			||||||
 | 
					*.exp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Precompiled Headers
 | 
				
			||||||
 | 
					*.gch
 | 
				
			||||||
 | 
					*.pch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Libraries
 | 
				
			||||||
 | 
					*.lib
 | 
				
			||||||
 | 
					*.a
 | 
				
			||||||
 | 
					*.la
 | 
				
			||||||
 | 
					*.lo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Shared objects (inc. Windows DLLs)
 | 
				
			||||||
 | 
					*.dll
 | 
				
			||||||
 | 
					*.so
 | 
				
			||||||
 | 
					*.so.*
 | 
				
			||||||
 | 
					*.dylib
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Executables
 | 
				
			||||||
 | 
					*.exe
 | 
				
			||||||
 | 
					*.out
 | 
				
			||||||
 | 
					*.app
 | 
				
			||||||
 | 
					*.i*86
 | 
				
			||||||
 | 
					*.x86_64
 | 
				
			||||||
 | 
					*.hex
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Debug files
 | 
				
			||||||
 | 
					*.dSYM/
 | 
				
			||||||
 | 
					*.su
 | 
				
			||||||
 | 
					*.idb
 | 
				
			||||||
 | 
					*.pdb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Kernel Module Compile Results
 | 
				
			||||||
 | 
					*.mod*
 | 
				
			||||||
 | 
					*.cmd
 | 
				
			||||||
 | 
					.tmp_versions/
 | 
				
			||||||
 | 
					modules.order
 | 
				
			||||||
 | 
					Module.symvers
 | 
				
			||||||
 | 
					Mkfile.old
 | 
				
			||||||
 | 
					dkms.conf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Linux ###
 | 
				
			||||||
 | 
					*~
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# temporary files which can be created if a process still has a handle open of a deleted file
 | 
				
			||||||
 | 
					.fuse_hidden*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# KDE directory preferences
 | 
				
			||||||
 | 
					.directory
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Linux trash folder which might appear on any partition or disk
 | 
				
			||||||
 | 
					.Trash-*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# .nfs files are created when an open file is removed but is still being accessed
 | 
				
			||||||
 | 
					.nfs*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Vim ###
 | 
				
			||||||
 | 
					# Swap
 | 
				
			||||||
 | 
					[._]*.s[a-v][a-z]
 | 
				
			||||||
 | 
					!*.svg  # comment out if you don't need vector files
 | 
				
			||||||
 | 
					[._]*.sw[a-p]
 | 
				
			||||||
 | 
					[._]s[a-rt-v][a-z]
 | 
				
			||||||
 | 
					[._]ss[a-gi-z]
 | 
				
			||||||
 | 
					[._]sw[a-p]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Session
 | 
				
			||||||
 | 
					Session.vim
 | 
				
			||||||
 | 
					Sessionx.vim
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Temporary
 | 
				
			||||||
 | 
					.netrwhist
 | 
				
			||||||
 | 
					# Auto-generated tag files
 | 
				
			||||||
 | 
					tags
 | 
				
			||||||
 | 
					# Persistent undo
 | 
				
			||||||
 | 
					[._]*.un~
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# End of https://www.toptal.com/developers/gitignore/api/vim,c,linux
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					main
 | 
				
			||||||
 | 
					build/
 | 
				
			||||||
 | 
					assets2/
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,15 @@
 | 
				
			||||||
 | 
					##
 | 
				
			||||||
 | 
					# Nodesystem
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# @file
 | 
				
			||||||
 | 
					# @version 0.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CC="tcc"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					main: src/main.c src/node.c
 | 
				
			||||||
 | 
						tcc -o $@ -I src $^
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					clean:
 | 
				
			||||||
 | 
						rm -rf main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,37 @@
 | 
				
			||||||
 | 
					#include<stdio.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#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_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);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    printf("\nThe name of the node is \"%s\"\n", node->name);
 | 
				
			||||||
 | 
					    for(int i = 0; i < node->childc; 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 < node->childc; i++){
 | 
				
			||||||
 | 
					        printf("Childnode: \"%s\"\n", node->childv[i]->name);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    printf("\nThe amount of children is %d, the real size is %d\n",
 | 
				
			||||||
 | 
					           node->childc,
 | 
				
			||||||
 | 
					           (int)sizeof(testchild)
 | 
				
			||||||
 | 
					           );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    NOD_DestroyNode(node);
 | 
				
			||||||
 | 
					    NOD_DestroyNode(testchild);
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,105 @@
 | 
				
			||||||
 | 
					#include "node.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NOD_Node* NOD_CreateNode(char* name){
 | 
				
			||||||
 | 
					   NOD_Node* node = malloc(sizeof(NOD_Node));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   if(node != NULL){
 | 
				
			||||||
 | 
					     node->name = name;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     node->parent = NULL;
 | 
				
			||||||
 | 
					     node->childv = NULL;
 | 
				
			||||||
 | 
					     node->childc = 0;
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   return node;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void NOD_DestroyNode(NOD_Node* node){
 | 
				
			||||||
 | 
					  if(node != NULL){
 | 
				
			||||||
 | 
					    free(node);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void NOD_NodeAddChild(NOD_Node* parent, NOD_Node* child){
 | 
				
			||||||
 | 
					  if(parent != NULL && child != NULL){
 | 
				
			||||||
 | 
					    /** Prevent recursion */
 | 
				
			||||||
 | 
					    if(parent == child){
 | 
				
			||||||
 | 
					      fprintf(stderr, "NOD_Warning: A node cannot be added to itself.\n");
 | 
				
			||||||
 | 
					      return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    NOD_Node* tmp_parent = parent->parent;
 | 
				
			||||||
 | 
					    while(tmp_parent != NULL){
 | 
				
			||||||
 | 
					      if(tmp_parent == child){
 | 
				
			||||||
 | 
					        fprintf(stderr, "NOD_Warning: Can't add a parent of a node as its child.\n");
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      tmp_parent = tmp_parent->parent;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    /** Check if child already in vector */
 | 
				
			||||||
 | 
					    for(int i = 0; i < parent->childc; i++){
 | 
				
			||||||
 | 
					      if(parent->childv[i] == child){
 | 
				
			||||||
 | 
					        fprintf(stderr, "NOD_Warning: Tried to add a child already in the vector.\n");
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** Create child vector if it hasn't been used */
 | 
				
			||||||
 | 
					    if(parent->childc == 0 || parent->childv == NULL){
 | 
				
			||||||
 | 
					      parent->childv = malloc(sizeof(child));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if(parent->childv != NULL){
 | 
				
			||||||
 | 
					        parent->childv[0] = child;
 | 
				
			||||||
 | 
					        parent->childc = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        child->parent = parent;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else{
 | 
				
			||||||
 | 
					        fprintf(stderr,
 | 
				
			||||||
 | 
					                "NOD_Error: Failed to allocate space for child vector \"%s\"\n",
 | 
				
			||||||
 | 
					                parent->name);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** Realloc if it already exists */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** I don't test if chilv is null because it
 | 
				
			||||||
 | 
					       has already been tested */
 | 
				
			||||||
 | 
					    else if(parent->childc > 0){
 | 
				
			||||||
 | 
					      parent->childv = realloc(parent->childv,
 | 
				
			||||||
 | 
					                               sizeof(child) * (parent->childc+1));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if(parent->childv != NULL){
 | 
				
			||||||
 | 
					        parent->childv[parent->childc] = child;
 | 
				
			||||||
 | 
					        parent->childc++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        child->parent = parent;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else{
 | 
				
			||||||
 | 
					        fprintf(stderr,
 | 
				
			||||||
 | 
					                "NOD_Error: Failed to reallocate space for child vector \"%s\"\n",
 | 
				
			||||||
 | 
					                parent->name);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void NOD_NodeRemoveChild(NOD_Node* parent, NOD_Node* child){
 | 
				
			||||||
 | 
					  if(parent != NULL && child != NULL){
 | 
				
			||||||
 | 
					    if(parent->childc < 1 || parent->childv == NULL){
 | 
				
			||||||
 | 
					        fprintf(stderr,
 | 
				
			||||||
 | 
					                "NOD_Error: Cannot remove child \"%s\". Node \"%s\" has no children.\n",
 | 
				
			||||||
 | 
					                child->name,
 | 
				
			||||||
 | 
					                parent->name);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void NOD_PrintNodeTree(NOD_Node* node){
 | 
				
			||||||
 | 
					  if(node != NULL){
 | 
				
			||||||
 | 
					    printf("%s", node->name);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,19 @@
 | 
				
			||||||
 | 
					#ifndef __NODE_H_
 | 
				
			||||||
 | 
					#define __NODE_H_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct node{
 | 
				
			||||||
 | 
					  char* name;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  int childc;
 | 
				
			||||||
 | 
					  struct node** childv;
 | 
				
			||||||
 | 
					  struct node* parent;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} NOD_Node;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NOD_Node* NOD_CreateNode(char* name);
 | 
				
			||||||
 | 
					void NOD_DestroyNode(NOD_Node* node);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void NOD_NodeAddChild(NOD_Node* parent, NOD_Node* child);
 | 
				
			||||||
 | 
					void NOD_NodeRemoveChild(NOD_Node* parent, NOD_Node* child);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // __NODE_H_
 | 
				
			||||||
		Loading…
	
		Reference in New Issue