GL4Dummies  0.1.7
Référence du fichier linked_list.c

Fonctions de gestion de listes chainees. Plus de détails...

#include "linked_list.h"
#include <stdlib.h>
#include <assert.h>
Graphe des dépendances par inclusion de linked_list.c:

Aller au code source de ce fichier.

Fonctions

linked_list_tllNew (void)
 
void llPushBack (linked_list_t *ll, void *data)
 
void llPush (linked_list_t *ll, void *data)
 
void * llPop (linked_list_t *ll)
 
int llEmpty (linked_list_t *ll)
 
pair_t llInsert (linked_list_t *ll, void *data, int(*compar)(const void *newData, const void *nodeData))
 
void llInsertAt (llnode_t **here, void *data)
 
pair_t llFind (linked_list_t *ll, const void *data, int(*compar)(const void *newData, const void *nodeData))
 
void llDelete (linked_list_t *ll, llnode_t **node, void(*freeData)(void *))
 
llnode_t ** llNext (llnode_t **node)
 
llnode_t ** llFirst (linked_list_t *ll)
 
llnode_t ** llEnd (linked_list_t *ll)
 
void llFree (linked_list_t *ll, void(*freeData)(void *))
 

Description détaillée

Fonctions de gestion de listes chainees.

Auteur
Fares BELHADJ amsi@.nosp@m.ai.u.nosp@m.niv-p.nosp@m.aris.nosp@m.8.fr
Date
January 16, 2006 - June 02, 2010 - February 22, 2016
A faire:
commenter

Définition dans le fichier linked_list.c.

Documentation des fonctions

◆ llDelete()

void llDelete ( linked_list_t ll,
llnode_t **  node,
void(*)(void *)  freeData 
)
74  {
75  llnode_t * todelete = *node;
76  if(ll->tail == &((*node)->next))
77  ll->tail = node;
78  *node = (*node)->next;
79  if(freeData)
80  freeData(todelete->data);
81  free(todelete);
82 }

Références llnode_t::data, llnode_t::next, et linked_list_t::tail.

Référencé par llPop().

◆ llEmpty()

int llEmpty ( linked_list_t ll)
44  {
45  return ll->tail == &(ll->head);
46 }

Références linked_list_t::head, et linked_list_t::tail.

Référencé par genId(), et gl4duClean().

◆ llEnd()

llnode_t** llEnd ( linked_list_t ll)
92  {
93  return ll->tail;
94 }

Références linked_list_t::tail.

◆ llFind()

pair_t llFind ( linked_list_t ll,
const void *  data,
int(*)(const void *newData, const void *nodeData)  compar 
)
63  {
64  pair_t res = {(void **)&(ll->head), -1};
65  while(*(llnode_t **)res.ptr) {
66  if((res.compResult = compar(data, (*(llnode_t **)res.ptr)->data)) <= 0)
67  return res;
68  else
69  res.ptr = (void **)&((*(llnode_t **)res.ptr)->next);
70  }
71  return res;
72 }

Références pair_t::compResult, linked_list_t::head, et pair_t::ptr.

Référencé par llInsert().

◆ llFirst()

llnode_t** llFirst ( linked_list_t ll)
88  {
89  return &(ll->head);
90 }

Références linked_list_t::head.

◆ llFree()

void llFree ( linked_list_t ll,
void(*)(void *)  freeData 
)
96  {
97  llnode_t * ptr = ll->head, * next;
98  if(freeData)
99  while(ptr) {
100  next = ptr->next;
101  freeData(ptr->data);
102  free(ptr);
103  ptr = next;
104  }
105  else
106  while(ptr) {
107  next = ptr->next;
108  free(ptr);
109  ptr = next;
110  }
111  free(ll);
112 }

Références llnode_t::data, linked_list_t::head, et llnode_t::next.

◆ llInsert()

pair_t llInsert ( linked_list_t ll,
void *  data,
int(*)(const void *newData, const void *nodeData)  compar 
)
48  {
49  pair_t res = llFind(ll, data, compar);
50  if(res.compResult)
51  llInsertAt((llnode_t **)res.ptr, data);
52  return res;
53 }

Références pair_t::compResult, llFind(), llInsertAt(), et pair_t::ptr.

◆ llInsertAt()

void llInsertAt ( llnode_t **  here,
void *  data 
)
55  {
56  llnode_t * next = *here;
57  *here = malloc(sizeof ** here);
58  assert(*here);
59  (*here)->data = data;
60  (*here)->next = next;
61 }

Référencé par llInsert().

◆ llNew()

linked_list_t* llNew ( void  )
12  {
13  linked_list_t * ll = malloc(sizeof * ll);
14  assert(ll);
15  ll->head = NULL;
16  ll->tail = &(ll->head);
17  return ll;
18 }

Références linked_list_t::head, et linked_list_t::tail.

Référencé par gl4dgInit(), et gl4duAtExit().

◆ llNext()

llnode_t** llNext ( llnode_t **  node)
84  {
85  return &((*node)->next);
86 }

◆ llPop()

void* llPop ( linked_list_t ll)
38  {
39  void * data = ll->head->data;
40  llDelete(ll, &(ll->head), NULL);
41  return data;
42 }

Références llnode_t::data, linked_list_t::head, et llDelete().

Référencé par genId(), et gl4duClean().

◆ llPush()

void llPush ( linked_list_t ll,
void *  data 
)
28  {
29  llnode_t * next = ll->head;
30  ll->head = malloc(sizeof * ll->head);
31  assert(ll->head);
32  ll->head->data = data;
33  ll->head->next = next;
34  if(!next)
35  ll->tail = &(ll->head->next);
36 }

Références llnode_t::data, linked_list_t::head, llnode_t::next, et linked_list_t::tail.

Référencé par genId(), gl4dgDelete(), gl4dgInit(), et gl4duAtExit().

◆ llPushBack()

void llPushBack ( linked_list_t ll,
void *  data 
)
20  {
21  *(ll->tail) = malloc(sizeof ** (ll->tail));
22  assert(*(ll->tail));
23  (*(ll->tail))->data = data;
24  (*(ll->tail))->next = NULL;
25  ll->tail = &((*(ll->tail))->next);
26 }

Références linked_list_t::tail.

linked_list_t::head
struct llnode_t * head
Definition: linked_list.h:35
pair_t::ptr
void ** ptr
Definition: bin_tree.h:23
linked_list_t
Definition: linked_list.h:34
linked_list_t::tail
struct llnode_t ** tail
Definition: linked_list.h:36
llInsertAt
void llInsertAt(llnode_t **here, void *data)
Definition: linked_list.c:55
pair_t
Definition: bin_tree.h:22
pair_t::compResult
int compResult
Definition: bin_tree.h:24
llnode_t
Definition: linked_list.h:29
llnode_t::next
struct llnode_t * next
Definition: linked_list.h:31
llnode_t::data
void * data
Definition: linked_list.h:30
llFind
pair_t llFind(linked_list_t *ll, const void *data, int(*compar)(const void *newData, const void *nodeData))
Definition: linked_list.c:63
llDelete
void llDelete(linked_list_t *ll, llnode_t **node, void(*freeData)(void *))
Definition: linked_list.c:74