[svn-upgrade] Integrating new upstream version, cpulimit (1.12~svn10)
[debian/cpulimit.git] / list.h
1 /**
2  *
3  * cpulimit - a cpu limiter for Linux
4  *
5  * Copyright (C) 2005-2008, by:  Angelo Marletta <marlonx80@hotmail.com>
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
20  *
21  **********************************************************************
22  *
23  * Dynamic list interface
24  *
25  */
26
27 #ifndef __LIST__
28
29 #define __LIST__
30
31 #include <stdio.h>
32 #include <stdlib.h>
33 #include <string.h>
34
35 #ifndef  TRUE
36     #define TRUE 1
37     #define FALSE 0
38 #endif
39
40 struct list_node {
41     //pointer to the content of the node
42     void *data;
43     //pointer to previous node
44     struct list_node *previous;
45     //pointer to next node
46     struct list_node *next;
47 };
48
49 struct list {
50     //first node
51     struct list_node *first;
52     //last node
53     struct list_node *last;
54     //size of the search key in bytes
55     int keysize;
56     //element count
57     int count;
58 };
59
60 /*
61  * Initialize a list, with a specified key size
62  */
63 void init_list(struct list *l,int keysize);
64
65 /*
66  * Add a new element at the end of the list
67  * return the pointer to the new node
68  */
69 struct list_node *add_elem(struct list *l,void *elem);
70
71 /*
72  * Delete a node
73  */
74 void delete_node(struct list *l,struct list_node *node);
75
76 /*
77  * Delete a node from the list, even the content pointed by it
78  * Use only when the content is a dynamically allocated pointer
79  */
80 void destroy_node(struct list *l,struct list_node *node);
81
82 /*
83  * Check whether a list is empty or not
84  */
85 int is_empty_list(struct list *l);
86
87 /*
88  * Return the element count of the list
89  */
90 int get_list_count(struct list *l);
91
92 /*
93  * Return the first element (content of the node) from the list
94  */
95 void *first_elem(struct list *l);
96
97 /*
98  * Return the first node from the list
99  */
100 struct list_node *first_node(struct list *l);
101
102 /*
103  * Return the last element (content of the node) from the list
104  */
105 void *last_elem(struct list *l);
106
107 /*
108  * Return the last node from the list
109  */
110 struct list_node *last_node(struct list *l);
111
112 /*
113  * Search an element of the list by content
114  * the comparison is done from the specified offset and for a specified length
115  * if offset=0, the comparison starts from the address pointed by data
116  * if length=0, default keysize is used for length
117  * if the element is found, return the node address
118  * else return NULL
119  */
120 struct list_node *xlocate_node(struct list *l,void *elem,int offset,int length);
121
122 /*
123  * The same of xlocate_node(), but return the content of the node
124  */
125 void *xlocate_elem(struct list *l,void *elem,int offset,int length);
126
127 /*
128  * The same of calling xlocate_node() with offset=0 and length=0
129  */
130 struct list_node *locate_node(struct list *l,void *elem);
131
132 /*
133  * The same of locate_node, but return the content of the node
134  */
135 void *locate_elem(struct list *l,void *elem);
136
137 /*
138  * Delete all the elements in the list
139  */
140 void flush_list(struct list *l);
141
142 /*
143  * Delete every element in the list, and free the memory pointed by all the node data
144  */
145 void destroy_list(struct list *l);
146
147 #endif