arraylist.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /*
  2. * File: arraylist.h
  3. * Author: Arthur Brandao
  4. *
  5. * Created on 14 novembre 2018
  6. */
  7. #ifndef ARRAYLIST_H
  8. #define ARRAYLIST_H
  9. /* --- Include --- */
  10. #include "constante.h"
  11. #include "server.h"
  12. #include "json.h"
  13. /* --- Structure --- */
  14. typedef struct al_node al_node;
  15. struct al_node{
  16. char* key; //Clef d'accès
  17. int(*handler)(Server, JsonParser*); //Fonction
  18. al_node* prev; //Noeud precedent
  19. al_node* next; //Noeud suivant
  20. };
  21. typedef struct{
  22. al_node* first; //1er noeud
  23. al_node* last; //Dernier noeud
  24. int size; //Nombre de noeud
  25. }arraylist;
  26. /* --- Fonctions --- */
  27. /**
  28. * Initialise une arraylist
  29. * @param arraylist* Arraylist allouée
  30. */
  31. void arraylist_ini(arraylist*);
  32. /**
  33. * Ajoute un noeud dans la liste
  34. * Si un noeud du meme nom existe deja le remplace
  35. * @param arraylist* Arraylist d'accueil
  36. * @param char* clef
  37. * @param int(*)(char*) Fonction
  38. * @return al_node* Le noeud ajouté
  39. */
  40. al_node* arraylist_add(arraylist*, char*, int(*)(Server, JsonParser*));
  41. /**
  42. * Cherche un noeud
  43. * @param arraylist* Arraylist utilisée pour la recherche
  44. * @param char* La clef à chercher
  45. * @return NULL|al_node* Le noeud ou null si introuvable
  46. */
  47. al_node* arraylist_search(arraylist*, char*);
  48. /**
  49. * Appel la fonction d'un noeud
  50. * @param arraylist* Arraylist du noeud
  51. * @param char* Clef du noeud
  52. * @param char* Argument pour la fonction
  53. * @return int Resultat de la fonction ou -1 si introuvable
  54. */
  55. int arraylist_call(arraylist*, char*, Server, JsonParser*);
  56. /**
  57. * Supprime un noeud
  58. * @param arraylist* Arraylist du noeud
  59. * @param al_node* Le noeud à supprimer
  60. */
  61. void arraylist_delete(arraylist*, al_node*);
  62. /**
  63. * Supprime un noeud identifié par une clef
  64. * @param arraylist* Arraylist du noeud
  65. * @param char* La clef du noeud
  66. * @return Noeud correctement supprimé
  67. */
  68. boolean arraylist_remove(arraylist*, char*);
  69. /**
  70. * Vide une Arraylist
  71. * @param arraylist* Arraylist à vider
  72. */
  73. void arraylist_clean(arraylist*);
  74. #endif /* ARRAYLIST_H */