27cca7312a098c340855f0ea8f5593b374818b76
[multipath-tools/.git] / libmultipath / vector.h
1 /* 
2  * Soft:        Keepalived is a failover program for the LVS project
3  *              <www.linuxvirtualserver.org>. It monitor & manipulate
4  *              a loadbalanced server pool using multi-layer checks.
5  * 
6  * Part:        vector.c include file.
7  *  
8  * Version:     $Id: vector.h,v 1.0.3 2003/05/11 02:28:03 acassen Exp $
9  *
10  * Author:      Alexandre Cassen, <acassen@linux-vs.org>
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.
15  *              See the GNU General Public License for more details.
16  *
17  *              This program is free software; you can redistribute it and/or
18  *              modify it under the terms of the GNU General Public License
19  *              as published by the Free Software Foundation; either version
20  *              2 of the License, or (at your option) any later version.
21  */
22
23 #ifndef _VECTOR_H
24 #define _VECTOR_H
25
26 /* vector definition */
27 struct _vector {
28         unsigned int allocated;
29         void **slot;
30 };
31 typedef struct _vector *vector;
32
33 #define VECTOR_DEFAULT_SIZE 1
34 #define VECTOR_SLOT(V,E) (((V) && (E) < (V)->allocated) ? (V)->slot[(E)] : NULL)
35 #define VECTOR_SIZE(V)   ((V) ? (V)->allocated : 0)
36 #define VECTOR_LAST_SLOT(V)   (((V) && (V)->allocated) ? (V)->slot[((V)->allocated - 1)] : NULL)
37
38 #define vector_foreach_slot(v,p,i) \
39         for (i = 0; (v) && i < (v)->allocated && ((p) = (v)->slot[i]); i++)
40 #define vector_foreach_slot_after(v,p,i) \
41         for (; (v) && i < (v)->allocated && ((p) = (v)->slot[i]); i++)
42
43 /* Prototypes */
44 extern vector vector_alloc(void);
45 extern void *vector_alloc_slot(vector v);
46 extern void vector_free(vector v);
47 extern void free_strvec(vector strvec);
48 extern void vector_set_slot(vector v, void *value);
49 extern void vector_del_slot(vector v, int slot);
50 extern void *vector_insert_slot(vector v, int slot, void *value);
51 int find_slot(vector v, void * addr);
52 extern void vector_repack(vector v);
53 extern void vector_dump(vector v);
54 extern void dump_strvec(vector strvec);
55 extern int vector_move_up(vector v, int src, int dest);
56 #endif