Browse Source

Modification arraylist pour servir de liste de handler

Arthur Brandao 6 years ago
parent
commit
e100569aff
3 changed files with 24 additions and 54 deletions
  1. 5 25
      Serveur/arraylist.c
  2. 3 5
      Serveur/arraylist.h
  3. 16 24
      Serveur/main.c

+ 5 - 25
Serveur/arraylist.c

@@ -17,7 +17,7 @@ void arraylist_ini(arraylist* al){
     al->size = 0;
 }
 
-al_node* arraylist_add(arraylist* al, char* key, char* val){
+al_node* arraylist_add(arraylist* al, char* key, int(*handler)(char*)){
     int length;
     al_node* aln;
     //Regarde si la clef existe
@@ -30,10 +30,7 @@ al_node* arraylist_add(arraylist* al, char* key, char* val){
     aln->key = malloc(sizeof(char) * (length + 1));
     memset(aln->key, 0, length + 1);
     strncpy(aln->key, key, length);
-    length = strlen(val);
-    aln->val = malloc(sizeof(char) * (length + 1));
-    memset(aln->val, 0, length + 1);
-    strncpy(aln->val, val, length);
+    aln->handler = handler;
     //Lien entre les noeuds
     aln->next = NULL;
     if (al->first == NULL) {
@@ -66,28 +63,12 @@ al_node* arraylist_search(arraylist* al, char* key){
     return NULL;
 }
 
-char* arraylist_get(arraylist* al, char* key){
+int arraylist_call(arraylist* al, char* key, char* arg){
     al_node* aln = arraylist_search(al, key);
     if(aln == NULL){
-        return NULL;
-    }
-    return aln->val;
-}
-
-int arraylist_getint(arraylist* al, char* key){
-    al_node* aln = arraylist_search(al, key);
-    if(aln == NULL){
-        return 0;
-    }
-    return atoi(aln->val);
-}
-
-double arraylist_getdouble(arraylist* al, char* key){
-    al_node* aln = arraylist_search(al, key);
-    if(aln == NULL){
-        return 0;
+        return -1;
     }
-    return atof(aln->val);
+    return aln->handler(arg);
 }
 
 void arraylist_delete(arraylist* al, al_node* aln){
@@ -117,7 +98,6 @@ void arraylist_delete(arraylist* al, al_node* aln){
     }
     //Free
     free(aln->key);
-    free(aln->val);
     free(aln);
     al->size--;
 }

+ 3 - 5
Serveur/arraylist.h

@@ -15,7 +15,7 @@
 typedef struct al_node al_node;
 struct al_node{
     char* key;
-    char* val;
+    int(*handler)(char*);
     al_node* prev;
     al_node* next;
 };
@@ -27,11 +27,9 @@ typedef struct{
 
 /* --- Fonctions --- */
 void arraylist_ini(arraylist*);
-al_node* arraylist_add(arraylist*, char*, char*);
+al_node* arraylist_add(arraylist*, char*, int(*)(char*));
 al_node* arraylist_search(arraylist*, char*);
-char* arraylist_get(arraylist*, char*);
-int arraylist_getint(arraylist*, char*);
-double arraylist_getdouble(arraylist*, char*);
+int arraylist_call(arraylist*, char*, char*);
 void arraylist_delete(arraylist*, al_node*);
 boolean arraylist_remove(arraylist*, char*);
 void arraylist_clean(arraylist*);

+ 16 - 24
Serveur/main.c

@@ -88,33 +88,25 @@ int encode(){
     return 0;
 }
 
+int func(char* arg){
+    printf("Func : %s\n", arg);
+    return EXIT_SUCCESS;
+}
+
+int tion(char* arg){
+    printf("Tion : %s\n", arg);
+    return EXIT_SUCCESS;
+}
+
 int array_list(){
     arraylist al;
     arraylist_ini(&al);
-    arraylist_add(&al, "clef1", "val1");
-    arraylist_add(&al, "clef2", "val2");
-    arraylist_add(&al, "clef3", "val3");
-    arraylist_add(&al, "clef3", "val4");
-    for(al_node* aln = al.first; aln != NULL; aln = aln->next){
-        printf("%s: %s\n", aln->key, aln->val);
-    }
-    al_node* aln = arraylist_search(&al, "clef2");
-    printf("Search clef2  : %d\n", aln != NULL);
-    aln = arraylist_search(&al, "clef22");
-    printf("Search clef22 : %d\n-----\n", aln != NULL);
-    arraylist_remove(&al, "clef1");
-    arraylist_add(&al, "clef4", "val4");
-    for(al_node* aln = al.first; aln != NULL; aln = aln->next){
-        printf("%s: %s\n", aln->key, aln->val);
-    }
-    printf("Size : %d\n-----\n", al.size);
-    arraylist_remove(&al, "clef3");
-    for(al_node* aln = al.first; aln != NULL; aln = aln->next){
-        printf("%s: %s\n", aln->key, aln->val);
-    }
-    printf("Size : %d\n-----\n", al.size);
-    arraylist_clean(&al);
-    printf("Size : %d\n", al.size);
+    arraylist_add(&al, "func1", func);
+    arraylist_add(&al, "func2", tion);
+    
+    printf("%d\n", arraylist_call(&al, "func2", "Pouet"));
+    printf("%d\n", arraylist_call(&al, "func1", "Loul"));
+    printf("%d\n", arraylist_call(&al, "func3", "Nop"));
     
     return 0;
 }