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

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