arraylist.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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)(int, 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(*)(int, JsonParser*) Fonction
  38. * @return al_node* Le noeud ajouté
  39. */
  40. al_node* arraylist_add(arraylist*, char*, int(*)(int, 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 int Id du client
  53. * @param JsonParser* Argument pour la fonction
  54. * @return int Resultat de la fonction ou -1 si introuvable
  55. */
  56. int arraylist_call(arraylist*, char*, int, JsonParser*);
  57. /**
  58. * Supprime un noeud
  59. * @param arraylist* Arraylist du noeud
  60. * @param al_node* Le noeud à supprimer
  61. */
  62. void arraylist_delete(arraylist*, al_node*);
  63. /**
  64. * Supprime un noeud identifié par une clef
  65. * @param arraylist* Arraylist du noeud
  66. * @param char* La clef du noeud
  67. * @return Noeud correctement supprimé
  68. */
  69. boolean arraylist_remove(arraylist*, char*);
  70. /**
  71. * Vide une Arraylist
  72. * @param arraylist* Arraylist à vider
  73. */
  74. void arraylist_clean(arraylist*);
  75. #endif /* ARRAYLIST_H */