SWIHashMap.hpp
上传用户:xqtpzdz
上传日期:2022-05-21
资源大小:1764k
文件大小:4k
源码类别:

xml/soap/webservice

开发平台:

Visual C++

  1. #ifndef SWIHASHMAP_HPP
  2. #define SWIHASHMAP_HPP
  3. /****************License************************************************
  4.  * Vocalocity OpenVXI
  5.  * Copyright (C) 2004-2005 by Vocalocity, Inc. All Rights Reserved.
  6.  * This program is free software; you can redistribute it and/or
  7.  * modify it under the terms of the GNU General Public License
  8.  * as published by the Free Software Foundation; either version 2
  9.  * of the License, or (at your option) any later version.
  10.  *  
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program; if not, write to the Free Software
  18.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  19.  * Vocalocity, the Vocalocity logo, and VocalOS are trademarks or 
  20.  * registered trademarks of Vocalocity, Inc. 
  21.  * OpenVXI is a trademark of Scansoft, Inc. and used under license 
  22.  * by Vocalocity.
  23.  ***********************************************************************/
  24. #include "SWIutilHeaderPrefix.h"
  25. #include "SWIHashable.hpp"
  26. /**
  27.  * class to abstract hash table operations.
  28.  * @doc <p>
  29.  **/
  30. class SWIUTIL_API_CLASS SWIHashMap
  31. {
  32.  public:
  33.   static const int DEFAULT_CAPACITY;
  34.   static const double DEFAULT_LOAD_FACTOR;
  35.   // ................. CONSTRUCTORS, DESTRUCTOR  ............
  36.   //
  37.   // ------------------------------------------------------------
  38.  public:
  39.   SWIHashMap();
  40.   SWIHashMap(int capacity);
  41.   SWIHashMap(int capacity ,
  42.              double loadFactor);
  43.   /**
  44.    * Destructor.
  45.    **/
  46.  public:
  47.   virtual ~SWIHashMap();
  48.   /**
  49.    * Copy constructor.
  50.    **/
  51.  public:
  52.   SWIHashMap(const SWIHashMap&);
  53.   /**
  54.    * Assignment operator.
  55.    **/
  56.  public:
  57.   SWIHashMap& operator=(const SWIHashMap&);
  58.  public:
  59.   int size() const;
  60.  public:
  61.   bool isEmpty() const;
  62.  public:
  63.   const void *getValue(const SWIHashable& key) const;
  64.  public:
  65.   const void *putValue(const SWIHashable& key, const void *value);
  66.  public:
  67.   const void *remove(const SWIHashable& key);
  68.  public:
  69.   void clear();
  70.  public:
  71.   class SWIUTIL_API_CLASS Entry
  72.   {
  73.    private:
  74.     Entry(const SWIHashable *key, const void *value);
  75.     ~Entry();
  76.    public:
  77.     const SWIHashable& getKey() const;
  78.     const void *getValue() const;
  79.     const void *setValue(const void *value);
  80.    private:
  81.     friend class SWIHashMap;
  82.     SWIHashable *_key;
  83.     const void *_value;
  84.     unsigned int _hashCode;
  85.     Entry* _next;
  86.     Entry* _prev;
  87.   };
  88.  public:
  89.   class SWIUTIL_API_CLASS Iterator
  90.   {
  91.    public:
  92.     Iterator(SWIHashMap& hashMap);
  93.    public:
  94.     Iterator(const Iterator& iter);
  95.    public:
  96.     Iterator& operator=(const Iterator& iter);
  97.    public:
  98.     ~Iterator();
  99.    public:
  100.     void reset() const;
  101.    public:
  102.     bool hasNext() const;
  103.    public:
  104.     const Entry *next() const;
  105.    public:
  106.     Entry *next();
  107.     // Modification Operations
  108.    public:
  109.     const void *setValue(const void *value);
  110.    public:
  111.     bool remove();
  112.    private:
  113.     friend class SWIHashMap;
  114.    private:
  115.     Entry* _cursor;
  116.     SWIHashMap* _hashMap;
  117.     int _idx;
  118.     Entry* _prevCursor;
  119.     int _prevIdx;
  120.   };
  121.  private:
  122.   int _capacity;
  123.   double _loadFactor;
  124.   Entry **_entries;
  125.   int _size;
  126.   int _threshold;
  127.  private:
  128.   void copy(const SWIHashMap& original);
  129.   void init(int capacity , double loadFactor);
  130.   void rehash();
  131.   void remove(Entry* entry, int idx);
  132.   void advance(Entry*& entry, int& idx);
  133.   friend class Iterator;
  134. };
  135. #endif