| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 | 
							- /////////////////////////////////////////////////////////////////////////////
 
- // Name:        hashset.h
 
- // Purpose:     interface of wxHashSet
 
- // Author:      wxWidgets team
 
- // Licence:     wxWindows licence
 
- /////////////////////////////////////////////////////////////////////////////
 
- /**
 
-     @class wxHashSet
 
-     This is a simple, type-safe, and reasonably efficient hash set class,
 
-     whose interface is a subset of the interface of STL containers.
 
-     The interface is similar to std::tr1::hash_set or std::set classes but
 
-     notice that, unlike std::set, the contents of a hash set is not sorted.
 
-     Example:
 
-     @code
 
-         class MyClass { ... };
 
-         // same, with MyClass* keys (only uses pointer equality!)
 
-         WX_DECLARE_HASH_SET( MyClass*, wxPointerHash, wxPointerEqual, MySet1 );
 
-         // same, with int keys
 
-         WX_DECLARE_HASH_SET( int, wxIntegerHash, wxIntegerEqual, MySet2 );
 
-         // declare a hash set with string keys
 
-         WX_DECLARE_HASH_SET( wxString, wxStringHash, wxStringEqual, MySet3 );
 
-         MySet1 h1;
 
-         MySet2 h1;
 
-         MySet3 h3;
 
-         // store and retrieve values
 
-         h1.insert( new MyClass( 1 ) );
 
-         h3.insert( "foo" );
 
-         h3.insert( "bar" );
 
-         h3.insert( "baz" );
 
-         int size = h3.size(); // now is three
 
-         bool has_foo = h3.find( "foo" ) != h3.end();
 
-         h3.insert( "bar" ); // still has size three
 
-         // iterate over all the elements in the class
 
-         MySet3::iterator it;
 
-         for( it = h3.begin(); it != h3.end(); ++it )
 
-         {
 
-             wxString key = *it;
 
-             // do something useful with key
 
-         }
 
-     @endcode
 
-     @section hashset_declaringnew Declaring new hash set types
 
-     @code
 
-     WX_DECLARE_HASH_SET( KEY_T,      // type of the keys
 
-                          HASH_T,     // hasher
 
-                          KEY_EQ_T,   // key equality predicate
 
-                          CLASSNAME); // name of the class
 
-     @endcode
 
-     The HASH_T and KEY_EQ_T are the types used for the hashing function and key
 
-     comparison. wxWidgets provides three predefined hashing functions:
 
-     wxIntegerHash for integer types ( int, long, short, and their unsigned counterparts ),
 
-     wxStringHash for strings ( wxString, wxChar*, char* ), and wxPointerHash for
 
-     any kind of pointer.
 
-     Similarly three equality predicates: wxIntegerEqual, wxStringEqual, wxPointerEqual
 
-     are provided. Using this you could declare a hash set using int values like this:
 
-     @code
 
-         WX_DECLARE_HASH_SET( int,
 
-                             wxIntegerHash,
 
-                             wxIntegerEqual,
 
-                             MySet );
 
-         // using an user-defined class for keys
 
-         class MyKey { ... };
 
-         // hashing function
 
-         class MyKeyHash
 
-         {
 
-         public:
 
-             MyKeyHash() { }
 
-             unsigned long operator()( const MyKey& k ) const
 
-                 {
 
-                     // compute the hash
 
-                 }
 
-             MyKeyHash& operator=(const MyKeyHash&) { return *this; }
 
-         };
 
-         // comparison operator
 
-         class MyKeyEqual
 
-         {
 
-         public:
 
-             MyKeyEqual() { }
 
-             bool operator()( const MyKey& a, const MyKey& b ) const
 
-                 {
 
-                     // compare for equality
 
-                 }
 
-             MyKeyEqual& operator=(const MyKeyEqual&) { return *this; }
 
-         };
 
-         WX_DECLARE_HASH_SET( MyKey,      // type of the keys
 
-                             MyKeyHash,  // hasher
 
-                             MyKeyEqual, // key equality predicate
 
-                             CLASSNAME); // name of the class
 
-     @endcode
 
-     @section hashset_types Types
 
-     In the documentation below you should replace wxHashSet with the name you
 
-     used in the class declaration.
 
-     - wxHashSet::key_type: Type of the hash keys
 
-     - wxHashSet::mapped_type: Type of hash keys
 
-     - wxHashSet::value_type: Type of hash keys
 
-     - wxHashSet::iterator: Used to enumerate all the elements in a hash set;
 
-                            it is similar to a value_type*
 
-     - wxHashSet::const_iterator: Used to enumerate all the elements in a constant
 
-                                  hash set; it is similar to a const value_type*
 
-     - wxHashSet::size_type: Used for sizes
 
-     - wxHashSet::Insert_Result: The return value for insert()
 
-     @section hashset_iter Iterators
 
-     An iterator is similar to a pointer, and so you can use the usual pointer
 
-     operations: ++it ( and it++ ) to move to the next element, *it to access the
 
-     element pointed to, *it to access the value of the element pointed to.
 
-     Hash sets provide forward only iterators, this means that you can't use --it,
 
-     it + 3, it1 - it2.
 
-     @library{wxbase}
 
-     @category{containers}
 
- */
 
- class wxHashSet
 
- {
 
- public:
 
-     /**
 
-         The size parameter is just a hint, the table will resize automatically
 
-         to preserve performance.
 
-     */
 
-     wxHashSet(size_type size = 10);
 
-     /**
 
-         Copy constructor.
 
-     */
 
-     wxHashSet(const wxHashSet& set);
 
-     //@{
 
-     /**
 
-         Returns an iterator pointing at the first element of the hash set.
 
-         Please remember that hash sets do not guarantee ordering.
 
-     */
 
-     const_iterator begin() const;
 
-     iterator begin();
 
-     //@}
 
-     /**
 
-         Removes all elements from the hash set.
 
-     */
 
-     void clear();
 
-     /**
 
-         Counts the number of elements with the given key present in the set.
 
-         This function returns only 0 or 1.
 
-     */
 
-     size_type count(const key_type& key) const;
 
-     /**
 
-         Returns @true if the hash set does not contain any elements, @false otherwise.
 
-     */
 
-     bool empty() const;
 
-     //@{
 
-     /**
 
-         Returns an iterator pointing at the one-after-the-last element of the hash set.
 
-         Please remember that hash sets do not guarantee ordering.
 
-     */
 
-     const_iterator end() const;
 
-     iterator end();
 
-     //@}
 
-     /**
 
-         Erases the element with the given key, and returns the number of elements
 
-         erased (either 0 or 1).
 
-     */
 
-     size_type erase(const key_type& key);
 
-     //@{
 
-     /**
 
-         Erases the element pointed to by the iterator. After the deletion
 
-         the iterator is no longer valid and must not be used.
 
-     */
 
-     void erase(iterator it);
 
-     void erase(const_iterator it);
 
-     //@}
 
-     //@{
 
-     /**
 
-         If an element with the given key is present, the functions returns
 
-         an iterator pointing at that element, otherwise an invalid iterator
 
-         is returned.
 
-         i.e.
 
-         @code
 
-             hashset.find( non_existent_key ) == hashset.end()
 
-         @endcode
 
-     */
 
-     iterator find(const key_type& key) const;
 
-     const_iterator find(const key_type& key) const;
 
-     //@}
 
-     /**
 
-         Inserts the given value in the hash set.
 
-         The return value is equivalent to a
 
-         @code std::pair<wxHashMap::iterator, bool> @endcode
 
-         The iterator points to the inserted element, the boolean value is @true
 
-         if @a v was actually inserted.
 
-     */
 
-     Insert_Result insert(const value_type& v);
 
-     /**
 
-         Returns the number of elements in the set.
 
-     */
 
-     size_type size() const;
 
- };
 
 
  |