home *** CD-ROM | disk | FTP | other *** search
/ PC World 1997 November / PCWorld_1997-11_cd.bin / software / programy / komix / DATA.Z / WmtRWTPSetDict.hxx < prev    next >
Text File  |  1996-05-31  |  3KB  |  94 lines

  1. /*---------------------------------------------------------------------------
  2.  *
  3.  *      (c)     Westmount Technology    1994
  4.  *
  5.  *      File:        @(#)WmtRWTPSetDict.hxx    1.1
  6.  *      Author:        peku
  7.  *      Description:    pointer set dictionary based on RogueWave library
  8.  *---------------------------------------------------------------------------
  9.  SccsId = @(#)WmtRWTPSetDict.hxx    1.1   21 Feb 1994 Copyright 1994 Westmount Technology */
  10.  
  11. #ifndef WMTRWTPSETDICT_HXX
  12. #define WMTRWTPSETDICT_HXX
  13.  
  14. #ifndef __RWTVHDICT_H__
  15. #include "rw/tvhdict.h"
  16. #endif
  17.  
  18. #ifndef WMTRWTPTRSET_HXX
  19. #include "WmtRWTPtrSet.hxx"
  20. #endif
  21.  
  22. template<class K, class V>
  23. class WmtRWTPSetDict : private RWTValHashDictionary<K, WmtRWTPtrSet<V>* > {
  24. public:
  25.     WmtRWTPSetDict(unsigned (*hashKey)(const K&)) :
  26.         RWTValHashDictionary<K, WmtRWTPtrSet<V>* >(hashKey)
  27.     {
  28.     }
  29.     RWBoolean doFindValue(const K& key, WmtRWTPtrSet<V>* &retval) const
  30.     {
  31.       if (! RWTValHashDictionary<K, WmtRWTPtrSet<V>* >::findValue(
  32.                           key, retval)) {
  33.           return FALSE;
  34.       } else {
  35.           return TRUE;
  36.       }
  37.     }
  38.     void doInsertKeyAndValue(const K& key, V *val)
  39.     {
  40.       if (! RWTValHashDictionary<K, WmtRWTPtrSet<V>* >::contains(key)) {
  41.         RWTValHashDictionary<K, WmtRWTPtrSet<V>* >::insertKeyAndValue(
  42.                        key, new WmtRWTPtrSet<V>);
  43.       }
  44.       WmtRWTPtrSet<V> *set;
  45.       RWTValHashDictionary<K, WmtRWTPtrSet<V>* >::findValue(key, set);
  46.       set->doInsert(val);
  47.     }
  48.     RWBoolean doRemoveKeyAndValue(const K& key, V *val)
  49.     { 
  50.       WmtRWTPtrSet<V> *set;
  51.       if (doFindValue(key, set)) {
  52.         set->doRemove(val);
  53.         if (set->doIsEmpty()) {
  54.             delete set;
  55.         }
  56.         return TRUE;
  57.       } else {
  58.         return FALSE;
  59.       }
  60.     }
  61.     //void doClear()
  62.     //    { RWTValHashDictionary<K, WmtRWTPtrSet<V>* >::clear(); }
  63. };
  64.  
  65. template <class K, class V>
  66. class WmtRWTPSetDictIterator :
  67.     private RWTValHashDictionaryIterator<K, WmtRWTPtrSet<V>* > {
  68. public:
  69.     WmtRWTPSetDictIterator(const WmtRWTPSetDict<K, V>& c) :
  70.         RWTValHashDictionaryIterator<K, WmtRWTPtrSet<V>* >(
  71.         (RWTValHashDictionary<K, WmtRWTPtrSet<V>* >&)c) {}
  72.  
  73.     K key() const
  74.     {
  75.       return (K)RWTValHashDictionaryIterator<K, WmtRWTPtrSet<V>* >::key();
  76.     }
  77.     WmtRWTPtrSet<V> *value() const
  78.     {
  79.       return (WmtRWTPtrSet<V> *)
  80.           RWTValHashDictionaryIterator<K, WmtRWTPtrSet<V>* >::value();
  81.     }
  82.     RWBoolean operator++()
  83.     {
  84.       return RWTValHashDictionaryIterator<K, WmtRWTPtrSet<V>* >::
  85.           operator++();
  86.     }
  87.     void reset()
  88.     {
  89.       RWTValHashDictionaryIterator<K, WmtRWTPtrSet<V>* >::reset();
  90.     }
  91. };
  92.  
  93. #endif /* WMTRWTPSETDICT_HXX */
  94.