home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1998 May / Pcwk5b98.iso / Borland / Cplus45 / BC45 / CLOBSH.PAK / HASHTBL.H < prev    next >
C/C++ Source or Header  |  1995-08-29  |  3KB  |  136 lines

  1. /*------------------------------------------------------------------------*/
  2. /*                                                                        */
  3. /*  HASHTBL.H                                                             */
  4. /*                                                                        */
  5. /*  Copyright Borland International 1991, 1993                            */
  6. /*  All Rights Reserved                                                   */
  7. /*                                                                        */
  8. /*------------------------------------------------------------------------*/
  9.  
  10. #if !defined( __HASHTBL_H )
  11. #define __HASHTBL_H
  12.  
  13. #define BI_OLDNAMES
  14.  
  15. #if !defined( __RESOURCE_H )
  16. #include "classlib\Resource.h"
  17. #endif  // __RESOURCE_H
  18.  
  19. #if !defined( __CLSTYPES_H )
  20. #include "classlib\obsolete\ClsTypes.h"
  21. #endif  // __CLSTYPES_H
  22.  
  23. #if !defined( __CLSDEFS_H )
  24. #include "classlib\obsolete\ClsDefs.h"
  25. #endif  // __CLSDEFS_H
  26.  
  27. #if !defined( __COLLECT_H )
  28. #include "classlib\obsolete\Collect.h"
  29. #endif  // __COLLECT_H
  30.  
  31. #if !defined( __LIST_H )
  32. #include "classlib\obsolete\List.h"
  33. #endif  // __LIST_H
  34.  
  35. #if !defined( __VECTIMP_H )
  36. #include "classlib\VectImp.h"
  37. #endif  // __VECTIMP_H
  38.  
  39. #pragma option -Vo-
  40. #if defined( __BCOPT__ ) && !defined( __FLAT__ ) && !defined( _ALLOW_po )
  41. #pragma option -po-
  42. #endif
  43.  
  44. _CLASSDEF(ContainerIterator)
  45. _CLASSDEF(HashTable)
  46. _CLASSDEF(HashTableIterator)
  47.  
  48. class _CLASSTYPE HashTable : public Collection
  49. {
  50.  
  51. public:
  52.  
  53.     friend class HashTableIterator;
  54.  
  55.     HashTable( sizeType = DEFAULT_HASH_TABLE_SIZE );
  56.     virtual ~HashTable() { flush(); }
  57.  
  58.     virtual void add( Object _FAR & );
  59.     virtual void detach( Object _FAR &, DeleteType = NoDelete );
  60.     virtual void flush( DeleteType = DefDelete );
  61.  
  62.     virtual int isEmpty() const
  63.         {
  64.         return itemsInContainer == 0;
  65.         }
  66.  
  67.     virtual countType getItemsInContainer() const
  68.         {
  69.         return itemsInContainer;
  70.         }
  71.  
  72.     virtual Object _FAR & findMember( Object _FAR & ) const;
  73.  
  74.     virtual ContainerIterator& initIterator() const;
  75.  
  76.     virtual classType isA() const
  77.         {
  78.         return hashTableClass;
  79.         }
  80.  
  81.     virtual char _FAR *nameOf() const
  82.         {
  83.         return "HashTable";
  84.         }
  85.  
  86. private:
  87.  
  88.     hashValueType getHashValue( Object _FAR & ) const;
  89.     sizeType size;
  90.     BI_IVectorImp<Object> table;
  91.  
  92.     unsigned itemsInContainer;
  93.  
  94.     DeleteType delItem( DeleteType dt )
  95.         {
  96.         return delObj(dt) ? Delete : NoDelete;
  97.         }
  98.  
  99. };
  100.  
  101. inline sizeType HashTable::getHashValue( Object _FAR & ofObject ) const
  102. {
  103.     return ofObject.hashValue() % size;
  104. }
  105.  
  106. class _CLASSTYPE HashTableIterator : public ContainerIterator
  107. {
  108.  
  109. public:
  110.  
  111.     HashTableIterator( const HashTable _FAR & );
  112.     ~HashTableIterator();
  113.  
  114.     virtual operator int();
  115.     virtual Object _FAR & current();
  116.     virtual Object _FAR & operator ++ ( int );
  117.     virtual Object _FAR & operator ++ ();
  118.     virtual void restart();
  119.  
  120. private:
  121.  
  122.     BI_IVectorIteratorImp<Object> _FAR *arrayIterator;
  123.     ContainerIterator _FAR *listIterator;
  124.     const HashTable _FAR & beingIterated;
  125.  
  126.     void scan();
  127. };
  128.  
  129. #if defined( __BCOPT__ ) && !defined( __FLAT__ ) && !defined( _ALLOW_po )
  130. #pragma option -po.
  131. #endif
  132. #pragma option -Vo.
  133.  
  134. #endif  // __HASHTBL_H
  135.  
  136.