Implement reparenting
This commit is contained in:
parent
91eacbb8c7
commit
e2fb90a297
|
@ -40,6 +40,10 @@ int main(int argc, char* *argv){
|
||||||
NOD_NodeAddChild(bsd, freebsd);
|
NOD_NodeAddChild(bsd, freebsd);
|
||||||
NOD_NodeAddChild(bsd, openbsd);
|
NOD_NodeAddChild(bsd, openbsd);
|
||||||
NOD_NodeAddChild(bsd, debianbsd);
|
NOD_NodeAddChild(bsd, debianbsd);
|
||||||
|
NOD_NodeAddChild(debian, debianbsd);
|
||||||
|
NOD_NodeAddChild(debian, debianbsd);
|
||||||
|
NOD_NodeAddChild(debianbsd, debian);
|
||||||
|
NOD_NodeAddChild(linoox, debianbsd);
|
||||||
|
|
||||||
NOD_DestroyNodeBranch(bsd);
|
NOD_DestroyNodeBranch(bsd);
|
||||||
NOD_DestroyNodeBranch(ubuntu);
|
NOD_DestroyNodeBranch(ubuntu);
|
||||||
|
|
26
src/node.c
26
src/node.c
|
@ -20,7 +20,8 @@ NOD_Node *NOD_CreateNode(char *name){
|
||||||
|
|
||||||
void NOD_DestroyNode(NOD_Node *node){
|
void NOD_DestroyNode(NOD_Node *node){
|
||||||
if(node != NULL){
|
if(node != NULL){
|
||||||
printf("[ INF ] Deleting node \"%s\"\n", node->name);
|
printf("NOD_Info: Deleting node \"%s\"\n", node->name);
|
||||||
|
/** Cleanup dependencies on this node by its parent */
|
||||||
NOD_NodeUnparent(node);
|
NOD_NodeUnparent(node);
|
||||||
free(node);
|
free(node);
|
||||||
}
|
}
|
||||||
|
@ -42,14 +43,15 @@ void NOD_NodeAddChild(NOD_Node *parent, NOD_Node *child){
|
||||||
fprintf(stderr, "NOD_Warning: A node cannot be added to itself.\n");
|
fprintf(stderr, "NOD_Warning: A node cannot be added to itself.\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
NOD_Node *tmp_parent = parent->parent;
|
///** Don't allow tree-breaking reparenting */
|
||||||
while(tmp_parent != NULL){
|
//NOD_Node *tmp_parent = parent->parent;
|
||||||
if(tmp_parent == child){
|
//while(tmp_parent != NULL){
|
||||||
fprintf(stderr, "NOD_Warning: Can't add a parent of a node as its child.\n");
|
//if(tmp_parent == child){
|
||||||
return;
|
//fprintf(stderr, "NOD_Warning: Can't add a parent of a node as its child.\n");
|
||||||
}
|
//return;
|
||||||
tmp_parent = tmp_parent->parent;
|
//}
|
||||||
}
|
//tmp_parent = tmp_parent->parent;
|
||||||
|
//}
|
||||||
/** Check if child already in vector */
|
/** Check if child already in vector */
|
||||||
for(int i = 0; i < parent->childc; i++){
|
for(int i = 0; i < parent->childc; i++){
|
||||||
if(parent->childv[i] == child){
|
if(parent->childv[i] == child){
|
||||||
|
@ -58,6 +60,12 @@ void NOD_NodeAddChild(NOD_Node *parent, NOD_Node *child){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** If it had a parent before, unparent before reparenting */
|
||||||
|
if(child->parent != NULL && child->parent != parent){
|
||||||
|
printf("NOD_Info: Reparenting node \"%s\"\n", child->name);
|
||||||
|
NOD_NodeUnparent(child);
|
||||||
|
}
|
||||||
|
|
||||||
/** Create child vector if it hasn't been used */
|
/** Create child vector if it hasn't been used */
|
||||||
if(parent->childc == 0 || parent->childv == NULL){
|
if(parent->childc == 0 || parent->childv == NULL){
|
||||||
parent->childv = malloc(sizeof(child));
|
parent->childv = malloc(sizeof(child));
|
||||||
|
|
Loading…
Reference in New Issue