home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume36 / formes / part01 / collect.h < prev    next >
C/C++ Source or Header  |  1993-04-01  |  2KB  |  73 lines

  1.  
  2. /*
  3.  *  Copyright (C) 1992-1993 Jeffrey Chilton
  4.  *
  5.  *  Permission is granted to anyone to make or distribute copies of
  6.  *  this program, in any medium, provided that the copyright notice
  7.  *  and permission notice are preserved, and that the distributor
  8.  *  grants the recipient permission for further redistribution as
  9.  *  permitted by this notice.
  10.  *  
  11.  *  Author's E-mail address:  172-9221@mcimail.com
  12.  *  
  13.  */
  14.  
  15. /* static char *whatstring = "@(#)collect.h    2.3 JWC"; */
  16.  
  17. #ifndef COLLECT_H
  18. #define COLLECT_H
  19.  
  20. #include <malloc.h>
  21.  
  22. /*
  23.  *  Collection - a multi-purpose collection-of-pointers class
  24.  */
  25.  
  26. typedef struct Collection Collection;
  27.  
  28. struct Collection
  29. {
  30.     int nOfItems;
  31.     int currentLimit;
  32.     int (*match)();
  33.     void (*destroy)();
  34.     char **items;
  35. };
  36.  
  37. #define NULLMATCH ((int (*)())0)
  38. #define NULLDESTROY ((void (*)())0)
  39.  
  40. #ifdef __STDC__
  41.  
  42. extern Collection *Collection_new(int (*match)(), void (*destroy)());
  43. extern char *Collection_atKeyGet(Collection *self, char *key);
  44. extern int Collection_atKeyGetIndex(Collection *self, char *key);
  45. extern int Collection_atKeyPut(Collection *self, char *key, char *value);
  46. extern int Collection_atPut(Collection *self, int index, char *value);
  47. extern int Collection_do(Collection *self, int (*block)(), char *arg);
  48. extern void Collection_destroy(Collection *self);
  49.  
  50. #else
  51.  
  52. extern Collection *Collection_new();
  53. extern char *Collection_atKeyGet();
  54. extern int Collection_atKeyGetIndex();
  55. extern int Collection_atKeyPut();
  56. extern int Collection_atPut();
  57. extern int Collection_do();
  58. extern void Collection_destroy();
  59.  
  60. #endif
  61.  
  62. #define Collection_add(s, v) Collection_atPut(s, (s)->nOfItems, (char *)v)
  63. #define Collection_atDelete(s, i) Collection_atPut(s, i, (char *)0)
  64. #define Collection_atGet(s, i) ((s)->items[i])
  65. #define Collection_atKeyDelete(s, k) Collection_atKeyPut(s, k, (char *)0)
  66. #define Collection_isIn(s, k) Collection_atKeyGet(s, k)
  67. #define Collection_size(s) ((s)->nOfItems)
  68. #define Collection_getAll(s) ((s)->items)
  69.  
  70.  
  71. #endif
  72.  
  73.