MPSolve  3.2.1
list.h
Go to the documentation of this file.
1 /*
2  * This file is part of MPSolve 3.2.1
3  *
4  * Copyright (C) 2001-2020, Dipartimento di Matematica "L. Tonelli", Pisa.
5  * License: http://www.gnu.org/licenses/gpl.html GPL version 3 or higher
6  *
7  * Authors:
8  * Leonardo Robol <leonardo.robol@unipi.it>
9  */
10 
20 #ifndef MPS_LIST_H_
21 #define MPS_LIST_H_
22 
23 MPS_BEGIN_DECLS
24 
31  void * value;
32 
40 
48 };
49 
50 struct mps_list {
55 
60 
64  int size;
65 };
66 
67 mps_list_element * mps_list_element_new (void * value);
68 void mps_list_element_free (mps_list_element * el);
69 mps_list_element * mps_list_element_next (mps_list_element * el);
70 mps_list_element * mps_list_element_previous (mps_list_element * el);
71 void * mps_list_element_value (mps_list_element * el);
72 
73 mps_list * mps_list_new (void);
74 void mps_list_free (mps_list * list);
75 int mps_list_size (mps_list * list);
76 void mps_list_append (mps_list * list, mps_list_element * el);
77 mps_list_element * mps_list_first (mps_list * list);
78 mps_list_element * mps_list_last (mps_list * list);
79 
84 #define MPS_LIST_FOREACH(type, local_var, list) \
85  for (type *__mps_local_iterator = (type*)mps_list_first (list), \
86  *local_var = (type*)mps_list_element_value ((mps_list_element*)__mps_local_iterator); \
87  __mps_local_iterator != NULL; \
88  __mps_local_iterator = (type*)mps_list_element_next ((mps_list_element*)__mps_local_iterator), \
89  local_var = (type*)mps_list_element_value ((mps_list_element*)__mps_local_iterator))
90 
91 MPS_END_DECLS
92 
93 #endif /* MPS_LIST_H_ */
94 
void mps_list_free(mps_list *list)
Free a list and all the elements inside it.
Definition: list.c:31
int mps_list_size(mps_list *list)
Return the number of elements in a list.
Definition: list.c:47
mps_list * mps_list_new(void)
Create a new empty list.
Definition: list.c:17
Definition: list.h:25
void * value
The value pointed by this list element. Note that holding this pointer in the first field of the stru...
Definition: list.h:31
struct mps_list_element * previous
The previous element in the list.
Definition: list.h:47
struct mps_list_element * next
The next element in the list.
Definition: list.h:39
Definition: list.h:50
mps_list_element * first
A pointer to the first element of the list.
Definition: list.h:54
int size
The number of element of the list.
Definition: list.h:64
mps_list_element * last
A pointer to the last element of the list.
Definition: list.h:59