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

  1. /*---------------------------------------------------------------------------
  2.  *
  3.  *      (c)     Westmount Technology    1994
  4.  *
  5.  *      File:        @(#)OPSetDict.hxx    1.1
  6.  *      Author:        peku
  7.  *      Description:
  8.  *---------------------------------------------------------------------------
  9.  SccsId = @(#)OPSetDict.hxx    1.1   18 Oct 1994 Copyright 1994 Westmount Technology */
  10.  
  11. #ifndef OPSETDICT_HXX
  12. #define OPSETDICT_HXX
  13.  
  14. #ifndef OPTRSET_HXX
  15. #include "OPtrSet.hxx"
  16. #endif
  17.  
  18. #ifndef PTRDICT_HXX
  19. #include "PtrDict.hxx"
  20. #endif
  21.  
  22. #if HAS_TEMPLATES
  23.  
  24. template<class Key, class Value>
  25. class OPSetDict : private GenPtrDict {
  26. public:                
  27.     void    append(const Key &key, Value *value)
  28.     {
  29.         OPtrSet<Value> *vptr;
  30.         if (!(vptr = (OPtrSet<Value> *)GenPtrDict::get(key))) {
  31.             vptr = new OPtrSet<Value>;
  32.             GenPtrDict::set(new Key(key), (void *)vptr);
  33.         }
  34.         vptr->append(value);
  35.     }
  36.     OPtrSet<Value> *get(const Key &key) const
  37.     {
  38.         return (OPtrSet<Value> *) GenPtrDict::get(key);
  39.     }
  40.     void    remove(const Key &key, Value *value)
  41.     {
  42.         OPtrSet<Value> *vptr;
  43.         if (vptr = (OPtrSet<Value> *)GenPtrDict::get(key)) {
  44.             vptr->remove(value);
  45.             if (vptr->size()) {
  46.                 GenPtrDict::remove(key);
  47.                 delete vptr;
  48.             }
  49.         }
  50.     }
  51.     int isPresent(const Key &key) const
  52.     {
  53.         return GenPtrDict::isPresent(key);
  54.     }
  55.     const Key *firstKey()
  56.     {
  57.         return (Key *) GenPtrDict::firstKey();
  58.     }
  59.     const Key *nextKey()
  60.     {
  61.         return (Key *) GenPtrDict::nextKey();
  62.     }
  63.     OPtrSet<Value> *firstValue()
  64.     {
  65.         return (OPtrSet<Value> *) GenPtrDict::firstValue();
  66.     }
  67.     OPtrSet<Value> *nextValue()
  68.     {
  69.         return (OPtrSet<Value> *) GenPtrDict::nextValue();
  70.     }
  71. };
  72.     
  73. #else
  74.  
  75. #define    OPSetDict_(key,value)    name3(key,value,_OPSetDict)
  76.  
  77. #define OPSetDictdeclare2(Key,Value)                    \
  78. class OPSetDict_(Key,Value) : private GenPtrDict {            \
  79. public:                                    \
  80.     void    add(const Key &key, Value *value)            \
  81.     {                                \
  82.         OPtrSet_(Value) *vptr;                    \
  83.         if (!(vptr = (OPtrSet_(Value) *)GenPtrDict::get(key))) { \
  84.             vptr = new OPtrSet_(Value);            \
  85.             GenPtrDict::set(new Key(key), (void *)vptr);    \
  86.         }                            \
  87.         vptr->add(value);                    \
  88.     }                                \
  89.     OPtrSet_(Value) *get(const Key &key) const            \
  90.     {                                \
  91.         return (OPtrSet_(Value) *) GenPtrDict::get(key);    \
  92.     }                                \
  93.     void    remove(const Key &key, Value *value)            \
  94.     {                                \
  95.         OPtrSet_(Value) *vptr;                    \
  96.         if (vptr = (OPtrSet_(Value) *)GenPtrDict::get(key)) {    \
  97.             vptr->remove(value);                \
  98.             if (!vptr->first()) {                \
  99.                 GenPtrDict::remove(key);        \
  100.                 delete vptr;                 \
  101.             }                        \
  102.         }                            \
  103.     }                                \
  104.     int isPresent(const Key &key) const                \
  105.     {                                \
  106.         return GenPtrDict::isPresent(key);            \
  107.     }                                \
  108.     const Key *firstKey()                        \
  109.     {                                \
  110.         return (Key *) GenPtrDict::firstKey();            \
  111.     }                                \
  112.     const Key *nextKey()                        \
  113.     {                                \
  114.         return (Key *) GenPtrDict::nextKey();            \
  115.     }                                \
  116.     OPtrSet_(Value) *firstValue()                    \
  117.     {                                \
  118.         return (OPtrSet_(Value) *) GenPtrDict::firstValue();    \
  119.     }                                \
  120.     OPtrSet_(Value) *nextValue()                    \
  121.     {                                \
  122.         return (OPtrSet_(Value) *) GenPtrDict::nextValue();    \
  123.     }                                \
  124. }
  125.     
  126. #endif /* HAS_TEMPLATES */
  127.  
  128. #endif /* OPSETDICT_HXX */
  129.