home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / PtrSet.hxx < prev    next >
Text File  |  1996-05-31  |  2KB  |  88 lines

  1. /*---------------------------------------------------------------------------
  2.  *
  3.  *      (c)     Westmount Technology    1993
  4.  *
  5.  *      File:        @(#)PtrSet.hxx    1.4
  6.  *      Author:        frmo
  7.  *      Description:    A set of pointers
  8.  *---------------------------------------------------------------------------
  9.  SccsId = @(#)PtrSet.hxx    1.4   13 Jan 1994 Copyright 1993 Westmount Technology */
  10.  
  11. #ifndef PTRSET_HXX
  12. #define PTRSET_HXX
  13.  
  14. #ifndef TEMPLCONF_HXX
  15. #include "TemplConf.hxx"
  16. #endif
  17.  
  18. #ifndef HASHTBL_HXX
  19. #include "HashTbl.hxx"
  20. #endif
  21.  
  22. class PointerHash: public Hashable {
  23.     void    *ptr;
  24. public:
  25.     PointerHash(void *aPtr) : ptr(aPtr) {}
  26.     ~PointerHash();
  27.  
  28.     unsigned    hash() const;
  29.     int        isEqual(const Hashable &key) const;
  30.     void        *getPtr()    { return ptr; }
  31. };
  32.  
  33. #if HAS_TEMPLATES
  34.  
  35. typedef hashTbl<PointerHash, PointerHash> PtrHashTbl;
  36.  
  37. #else
  38.  
  39. declare2(HashTbl,PointerHash,PointerHash);
  40. typedef hashTbl(PointerHash,PointerHash) PtrHashTbl;
  41.  
  42. #endif /* HAS_TEMPLATES */
  43.  
  44. class GenPtrSet: private PtrHashTbl {
  45. public:
  46.     int    add(void *ptr);
  47.     void    remove(void *ptr);
  48.     int    isPresent(void *ptr) const;
  49.     unsigned size() const;
  50.  
  51.     void    *first();
  52.     void    *next();
  53. };
  54.  
  55. #if HAS_TEMPLATES
  56.  
  57. template<class T>
  58. class PtrSet : private GenPtrSet {
  59. public:
  60.     int    add(T *ptr)         { return GenPtrSet::add(ptr); }
  61.     void    remove(T *ptr)        { GenPtrSet::remove(ptr); }
  62.     int     isPresent(T *ptr) const    { return GenPtrSet::isPresent(ptr);}
  63.     unsigned size() const         { return GenPtrSet::size();}
  64.  
  65.     T    *first()        { return (T*) GenPtrSet::first(); }
  66.     T    *next()            { return (T*) GenPtrSet::next(); }
  67. };
  68.  
  69. #else
  70.  
  71. #define PtrSet_(t)    name2(t,_PtrSet)
  72.  
  73. #define PtrSetdeclare(t)                        \
  74. class PtrSet_(t) : private GenPtrSet {                    \
  75. public:                                    \
  76.     int    add(t *ptr)        { return GenPtrSet::add(ptr); }    \
  77.     void    remove(t *ptr)        { GenPtrSet::remove(ptr); }    \
  78.     int    isPresent(t *ptr) const { return GenPtrSet::isPresent(ptr);} \
  79.     unsigned size() const         { return GenPtrSet::size();}    \
  80.                                     \
  81.     t    *first()    { return (t *) GenPtrSet::first(); }    \
  82.     t    *next()        { return (t *) GenPtrSet::next(); }    \
  83. }
  84.  
  85. #endif /* HAS_TEMPLATES */
  86.  
  87. #endif /* PTRSET_HXX */
  88.