Annotation of embedaddon/quagga/lib/vector.h, revision 1.1
1.1 ! misho 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 */
! 27: struct _vector
! 28: {
! 29: unsigned int active; /* number of active slots */
! 30: unsigned int alloced; /* number of allocated slot */
! 31: void **index; /* index to data */
! 32: };
! 33: typedef 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: /* Reference slot at given index, caller must ensure slot is active */
! 40: #define vector_slot(V,I) ((V)->index[(I)])
! 41: /* Number of active slots.
! 42: * Note that this differs from vector_count() as it the count returned
! 43: * will include any empty slots
! 44: */
! 45: #define vector_active(V) ((V)->active)
! 46:
! 47: /* Prototypes. */
! 48: extern vector vector_init (unsigned int size);
! 49: extern void vector_ensure (vector v, unsigned int num);
! 50: extern int vector_empty_slot (vector v);
! 51: extern int vector_set (vector v, void *val);
! 52: extern int vector_set_index (vector v, unsigned int i, void *val);
! 53: extern void vector_unset (vector v, unsigned int i);
! 54: extern unsigned int vector_count (vector v);
! 55: extern void vector_only_wrapper_free (vector v);
! 56: extern void vector_only_index_free (void *index);
! 57: extern void vector_free (vector v);
! 58: extern vector vector_copy (vector v);
! 59:
! 60: extern void *vector_lookup (vector, unsigned int);
! 61: extern void *vector_lookup_ensure (vector, unsigned int);
! 62:
! 63: #endif /* _ZEBRA_VECTOR_H */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>