1/* 2 * Generic vector interface header. 3 * Copyright (C) 1997, 98 Kunihiro Ishiguro 4 * 5 * This file is part of GNU Zebra. 6 * 7 * GNU Zebra is free software; you can redistribute it and/or modify it 8 * under the terms of the GNU General Public License as published by the 9 * Free Software Foundation; either version 2, or (at your option) any 10 * later version. 11 * 12 * GNU Zebra is distributed in the hope that it will be useful, but 13 * WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with GNU Zebra; see the file COPYING. If not, write to the Free 19 * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 20 * 02111-1307, USA. 21 */ 22 23#ifndef _ZEBRA_VECTOR_H 24#define _ZEBRA_VECTOR_H 25 26/* struct for vector */ 27struct _vector 28{ 29 unsigned int max; /* max number of used slot */ 30 unsigned int alloced; /* number of allocated slot */ 31 void **index; /* index to data */ 32}; 33typedef struct _vector *vector; 34 35#define VECTOR_MIN_SIZE 1 36 37/* (Sometimes) usefull macros. This macro convert index expression to 38 array expression. */ 39#define vector_slot(V,I) ((V)->index[(I)]) 40#define vector_max(V) ((V)->max) 41 42/* Prototypes. */ 43vector vector_init (unsigned int size); 44void vector_ensure (vector v, unsigned int num); 45int vector_empty_slot (vector v); 46int vector_set (vector v, void *val); 47int vector_set_index (vector v, unsigned int i, void *val); 48void *vector_lookup_index (vector v, unsigned int i); 49void vector_unset (vector v, unsigned int i); 50unsigned int vector_count (vector v); 51void vector_only_wrapper_free (vector v); 52void vector_only_index_free (void *index); 53void vector_free (vector v); 54vector vector_copy (vector v); 55 56#endif /* _ZEBRA_VECTOR_H */ 57