vector.h 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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. #ifndef _ZEBRA_VECTOR_H
  23. #define _ZEBRA_VECTOR_H
  24. /* struct for vector */
  25. struct _vector
  26. {
  27. unsigned int active; /* number of active slots */
  28. unsigned int alloced; /* number of allocated slot */
  29. void **index; /* index to data */
  30. };
  31. typedef struct _vector *vector;
  32. #define VECTOR_MIN_SIZE 1
  33. /* (Sometimes) usefull macros. This macro convert index expression to
  34. array expression. */
  35. /* Reference slot at given index, caller must ensure slot is active */
  36. #define vector_slot(V,I) ((V)->index[(I)])
  37. /* Number of active slots.
  38. * Note that this differs from vector_count() as it the count returned
  39. * will include any empty slots
  40. */
  41. #define vector_active(V) ((V)->active)
  42. /* Prototypes. */
  43. extern vector vector_init (unsigned int size);
  44. extern void vector_ensure (vector v, unsigned int num);
  45. extern int vector_empty_slot (vector v);
  46. extern int vector_set (vector v, void *val);
  47. extern int vector_set_index (vector v, unsigned int i, void *val);
  48. extern void vector_unset (vector v, unsigned int i);
  49. extern unsigned int vector_count (vector v);
  50. extern void vector_only_wrapper_free (vector v);
  51. extern void vector_only_index_free (void *index);
  52. extern void vector_free (vector v);
  53. extern vector vector_copy (vector v);
  54. extern void *vector_lookup (vector, unsigned int);
  55. extern void *vector_lookup_ensure (vector, unsigned int);
  56. #endif /* _ZEBRA_VECTOR_H */