Guest User

bravagiovannabrava

a guest
Aug 17th, 2010
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.86 KB | None | 0 0
  1. /** \file genList.h
  2.  *  \author sol10
  3.  *  \brief  prototipi e strutture dati lista generica
  4.  */
  5.  
  6. #ifndef __GENLIST__H
  7. #define __GENLIST__H
  8.  
  9. /** nodo della lista generica
  10.  
  11. Notare che sia la chiave (\b key) che l'informazione (\b payload) sono dei puntatori generici
  12.  
  13. */
  14.  
  15. typedef struct elem {
  16.   /** chiave */
  17.   void * key;
  18.   /** informazione */
  19.   void * payload;
  20.   /** puntatore elemento successivo */
  21.   struct elem * next;
  22. } elem_t;
  23.  
  24.  
  25. /**
  26.    Lista generica
  27.  
  28.    compare -- permette di confrontare due chiavi, ritorna 0 se sono uguali ed un valore diverso da 0 altrimenti
  29.    copyk,copyp -- creano una copia di una chiave o un payload (allocando la memoria necessaria) e ritornano il puntatore alla copia (se tutto e' andato bene) o NULL (se si e' verificato un errore)
  30.  */
  31. typedef struct {
  32.   /** la testa della lista */
  33.   elem_t * head;
  34.   /** la funzione per confrontare due chiavi */
  35.   int (* compare) (void *, void *);
  36.   /** la funzione per copiare una chiave */
  37.   void * (* copyk) (void *);
  38.   /** la funzione per copiare un payload*/
  39.   void * (* copyp) (void *);
  40. } list_t;
  41.  
  42. /** FUNZIONI DA IMPLEMENTARE */
  43.  
  44. /** crea una lista generica
  45.     \param compare funzione usata per confrontare due chiavi
  46.     \param copyk funzione usata per copiare una chiave
  47.     \param copyp funzione usata per copiare un payload
  48.  
  49.     \retval NULL in caso di errori con \c errno impostata opportunamente
  50.     \retval p (p!=NULL) puntatore alla nuova lista
  51. */
  52. list_t * new_List(int (* compare) (void *, void *),void* (* copyk) (void *),void* (*copyp) (void*));
  53.  
  54. /** distrugge una lista deallocando tutta la memoria occupata
  55.     \param pt puntatore al puntatore della lista da distruggere
  56.  
  57.     nota: mette a NULL il puntatore \c *t
  58.  */
  59. void free_List (list_t ** pt);
  60.  
  61. /** inserisce una nuova coppia (key, payload) in testa alla lista,
  62.     sia key che payload devono essere copiate nel nuovo elemento della lista.
  63.     Nella lista \b non sono permesse chiavi replicate
  64.  
  65.     \param t puntatore alla lista
  66.     \param key la chiave
  67.     \param payload l'informazione
  68.  
  69.     \retval -1 se si sono verificati errori (errno settato opportunamente)
  70.     \retval 0 se l'inserimento \`e andato a buon fine
  71.  
  72.  */
  73. int add_ListElement(list_t * t,void * key, void* payload);
  74.  
  75. /** elimina l'elemento di chiave (key) deallocando la memoria
  76.  
  77.     \param t puntatore alla lista
  78.     \param key la chiave
  79.  
  80.  
  81.     \retval -1 se si sono verificati errori (errno settato opportunamente)
  82.     \retval 0 se l'esecuzione e' stata corretta
  83.  
  84.  */
  85. int remove_ListElement(list_t * t,void * key);
  86.  
  87. /** cerca l'elemento di chiave (key)
  88.  
  89.     \param t puntatore alla lista
  90.     \param key la chiave
  91.  
  92.  
  93.     \retval NULL se l'elemento non c'e'
  94.     \retval p puntatore all'elemento trovato (puntatore interno alla lista non alloca memoria)
  95.  
  96.  */
  97. elem_t * find_ListElement(list_t * t,void * key);
  98.  
  99. #endif
Advertisement
Add Comment
Please, Sign In to add comment