home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / WmtRWTPSetDict.hxx < prev    next >
Text File  |  1997-11-12  |  3KB  |  95 lines

  1. /*---------------------------------------------------------------------------
  2.  *
  3.  *      (c)     Westmount Technology    1994
  4.  *
  5.  *      File:        @(#)WmtRWTPSetDict.hxx    /main/titanic/2
  6.  *      Author:        peku
  7.  *      Description:    pointer set dictionary based on RogueWave library
  8.  *---------------------------------------------------------------------------
  9.  SccsId = @(#)WmtRWTPSetDict.hxx    /main/titanic/2   12 Nov 1997 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.         RWTValHashDictionary<K, WmtRWTPtrSet<V>* >::remove(key);
  55.             delete set;
  56.         }
  57.         return TRUE;
  58.       } else {
  59.         return FALSE;
  60.       }
  61.     }
  62.     //void doClear()
  63.     //    { RWTValHashDictionary<K, WmtRWTPtrSet<V>* >::clear(); }
  64. };
  65.  
  66. template <class K, class V>
  67. class WmtRWTPSetDictIterator :
  68.     private RWTValHashDictionaryIterator<K, WmtRWTPtrSet<V>* > {
  69. public:
  70.     WmtRWTPSetDictIterator(const WmtRWTPSetDict<K, V>& c) :
  71.         RWTValHashDictionaryIterator<K, WmtRWTPtrSet<V>* >(
  72.         (RWTValHashDictionary<K, WmtRWTPtrSet<V>* >&)c) {}
  73.  
  74.     K key() const
  75.     {
  76.       return (K)RWTValHashDictionaryIterator<K, WmtRWTPtrSet<V>* >::key();
  77.     }
  78.     WmtRWTPtrSet<V> *value() const
  79.     {
  80.       return (WmtRWTPtrSet<V> *)
  81.           RWTValHashDictionaryIterator<K, WmtRWTPtrSet<V>* >::value();
  82.     }
  83.     RWBoolean operator++()
  84.     {
  85.       return RWTValHashDictionaryIterator<K, WmtRWTPtrSet<V>* >::
  86.           operator++();
  87.     }
  88.     void reset()
  89.     {
  90.       RWTValHashDictionaryIterator<K, WmtRWTPtrSet<V>* >::reset();
  91.     }
  92. };
  93.  
  94. #endif /* WMTRWTPSETDICT_HXX */
  95.