|
@@ -99,7 +99,7 @@ boolean div_node(subdiv* sd, node* n) {
|
|
|
newn->prev = n->index;
|
|
|
newn->next = n->next;
|
|
|
//Modifie node suivant la nouvelle
|
|
|
- if (n->next != -1) {
|
|
|
+ if (n->next != -1 || n->next == n->index) {
|
|
|
sd->mem[n->next].prev = newn->index;
|
|
|
}
|
|
|
//Modifie node origine
|
|
@@ -125,7 +125,7 @@ boolean fusion_node(subdiv* sd, node* n) {
|
|
|
n->end = n2->end;
|
|
|
n->length *= 2;
|
|
|
n->next = n2->next;
|
|
|
- if (n2->next != -1) {
|
|
|
+ if (n2->next != -1 || n2->next == n2->index) {
|
|
|
sd->mem[n2->next].prev = n->index;
|
|
|
}
|
|
|
//Indique que l'autre node n'est plus utilisée
|
|
@@ -137,6 +137,7 @@ boolean fusion_node(subdiv* sd, node* n) {
|
|
|
|
|
|
void ini_subdiv(subdiv* sd) {
|
|
|
sd->mem[0] = (node){0, 0, MEM_SIZE, MEM_SIZE, MEMEMPTY, -1, -1};
|
|
|
+ printf("%d\n", sd->mem[0].next);
|
|
|
sd->use[0] = true;
|
|
|
for (int i = 1; i < MEM_SIZE / 2; i++) {
|
|
|
sd->use[i] = false;
|
|
@@ -153,7 +154,7 @@ boolean add_data_subdiv(subdiv* sd, char* mem, char* key, char* data) {
|
|
|
break;
|
|
|
}
|
|
|
//Charge le prochain noeud
|
|
|
- if(n->next == -1){
|
|
|
+ if(n->next == -1 || n->next == n->index){
|
|
|
n = NULL;
|
|
|
} else {
|
|
|
n = &sd->mem[n->next];
|
|
@@ -197,7 +198,7 @@ boolean add_fdata_subdiv(subdiv* sd, char* mem, char* data) {
|
|
|
break;
|
|
|
}
|
|
|
//Charge le prochain noeud
|
|
|
- if(n->next == -1){
|
|
|
+ if(n->next == -1 || n->next == n->index){
|
|
|
n = NULL;
|
|
|
} else {
|
|
|
n = &sd->mem[n->next];
|
|
@@ -253,7 +254,7 @@ boolean remove_data_subdiv(subdiv* sd, char* mem, char* key) {
|
|
|
n = &sd->mem[0];
|
|
|
} else {
|
|
|
//Charge le prochain noeud
|
|
|
- if(n->next == -1){
|
|
|
+ if(n->next == -1 || n->next == n->index){
|
|
|
n = NULL;
|
|
|
} else {
|
|
|
n = &sd->mem[n->next];
|
|
@@ -264,7 +265,7 @@ boolean remove_data_subdiv(subdiv* sd, char* mem, char* key) {
|
|
|
n = &sd->mem[0];
|
|
|
} else {
|
|
|
//Charge le prochain noeud
|
|
|
- if(n->next == -1){
|
|
|
+ if(n->next == -1 || n->next == n->index){
|
|
|
n = NULL;
|
|
|
} else {
|
|
|
n = &sd->mem[n->next];
|
|
@@ -272,7 +273,7 @@ boolean remove_data_subdiv(subdiv* sd, char* mem, char* key) {
|
|
|
}
|
|
|
} else {
|
|
|
//Charge le prochain noeud
|
|
|
- if(n->next == -1){
|
|
|
+ if(n->next == -1 || n->next == n->index){
|
|
|
n = NULL;
|
|
|
} else {
|
|
|
n = &sd->mem[n->next];
|
|
@@ -309,7 +310,7 @@ void show_data_subdiv(subdiv* sd, char* mem){
|
|
|
free(str);
|
|
|
}
|
|
|
//Charge le prochain noeud
|
|
|
- if(n->next == -1){
|
|
|
+ if(n->next == -1 || n->next == n->index){
|
|
|
n = NULL;
|
|
|
} else {
|
|
|
n = &sd->mem[n->next];
|