You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
476 lines
14 KiB
476 lines
14 KiB
13 years ago
|
/****************************************************************************
|
||
|
**
|
||
5 months ago
|
** TQAsciiDict and TQAsciiDictIterator class documentation
|
||
13 years ago
|
**
|
||
|
** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved.
|
||
|
**
|
||
10 years ago
|
** This file is part of the TQt GUI Toolkit.
|
||
13 years ago
|
**
|
||
|
** This file may be used under the terms of the GNU General
|
||
|
** Public License versions 2.0 or 3.0 as published by the Free
|
||
|
** Software Foundation and appearing in the files LICENSE.GPL2
|
||
|
** and LICENSE.GPL3 included in the packaging of this file.
|
||
|
** Alternatively you may (at your option) use any later version
|
||
|
** of the GNU General Public License if such license has been
|
||
|
** publicly approved by Trolltech ASA (or its successors, if any)
|
||
10 years ago
|
** and the KDE Free TQt Foundation.
|
||
13 years ago
|
**
|
||
|
** Please review the following information to ensure GNU General
|
||
13 years ago
|
** Public Licensing requirements will be met:
|
||
13 years ago
|
** http://trolltech.com/products/qt/licenses/licensing/opensource/.
|
||
|
** If you are unsure which license is appropriate for your use, please
|
||
|
** review the following information:
|
||
|
** http://trolltech.com/products/qt/licenses/licensing/licensingoverview
|
||
|
** or contact the sales department at sales@trolltech.com.
|
||
|
**
|
||
|
** This file may be used under the terms of the Q Public License as
|
||
|
** defined by Trolltech ASA and appearing in the file LICENSE.QPL
|
||
|
** included in the packaging of this file. Licensees holding valid Qt
|
||
|
** Commercial licenses may use this file in accordance with the Qt
|
||
|
** Commercial License Agreement provided with the Software.
|
||
|
**
|
||
|
** This file is provided "AS IS" with NO WARRANTY OF ANY KIND,
|
||
|
** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR
|
||
|
** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted
|
||
|
** herein.
|
||
|
**
|
||
|
**********************************************************************/
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
5 months ago
|
TQAsciiDict documentation
|
||
13 years ago
|
*****************************************************************************/
|
||
|
|
||
|
/*!
|
||
5 months ago
|
\class TQAsciiDict tqasciidict.h
|
||
|
\brief The TQAsciiDict class is a template class that provides a dictionary based on char* keys.
|
||
13 years ago
|
|
||
|
\ingroup collection
|
||
|
\ingroup tools
|
||
|
|
||
|
\important autoDelete setAutoDelete
|
||
|
|
||
5 months ago
|
TQAsciiDict is implemented as a template class. Define a template
|
||
|
instance TQAsciiDict\<X\> to create a dictionary that operates on
|
||
13 years ago
|
pointers to X (X*).
|
||
|
|
||
|
A dictionary is a collection of key-value pairs. The key is a
|
||
|
char* used for insertion, removal and lookup. The value is a
|
||
|
pointer. Dictionaries provide very fast insertion and lookup.
|
||
|
|
||
5 months ago
|
TQAsciiDict cannot handle Unicode keys; use the TQDict template
|
||
|
instead, which uses \l TQString keys. A TQDict has the same
|
||
|
performace as a TQAsciiDict.
|
||
13 years ago
|
|
||
|
Example:
|
||
|
\code
|
||
5 months ago
|
TQAsciiDict<QLineEdit> fields; // char* keys, QLineEdit* values
|
||
13 years ago
|
fields.insert( "forename", new QLineEdit( this ) );
|
||
|
fields.insert( "surname", new QLineEdit( this ) );
|
||
|
|
||
|
fields["forename"]->setText( "Homer" );
|
||
|
fields["surname"]->setText( "Simpson" );
|
||
|
|
||
5 months ago
|
TQAsciiDictIterator<QLineEdit> it( fields ); // See TQAsciiDictIterator
|
||
13 years ago
|
for( ; it.current(); ++it )
|
||
|
cout << it.currentKey() << ": " << it.current()->text() << endl;
|
||
|
cout << endl;
|
||
|
|
||
|
if ( fields["forename"] && fields["surname"] )
|
||
|
cout << fields["forename"]->text() << " "
|
||
|
<< fields["surname"]->text() << endl; // Prints "Homer Simpson"
|
||
|
|
||
|
fields.remove( "forename" ); // Does not delete the line edit
|
||
|
if ( ! fields["forename"] )
|
||
|
cout << "forename is not in the dictionary" << endl;
|
||
|
\endcode
|
||
|
In this example we use a dictionary to keep track of the line
|
||
|
edits we're using. We insert each line edit into the dictionary
|
||
|
with a unique name and then access the line edits via the
|
||
5 months ago
|
dictionary. See TQPtrDict, TQIntDict and TQDict.
|
||
13 years ago
|
|
||
5 months ago
|
See TQDict for full details, including the choice of dictionary
|
||
13 years ago
|
size, and how deletions are handled.
|
||
|
|
||
5 months ago
|
\sa TQAsciiDictIterator, TQDict, TQIntDict, TQPtrDict,
|
||
13 years ago
|
\link collection.html Collection Classes\endlink
|
||
|
*/
|
||
|
|
||
|
|
||
|
/*!
|
||
5 months ago
|
\fn TQAsciiDict::TQAsciiDict( int size, bool caseSensitive, bool copyKeys )
|
||
13 years ago
|
|
||
|
Constructs a dictionary optimized for less than \a size entries.
|
||
|
|
||
|
We recommend setting \a size to a suitably large prime number (a
|
||
|
bit larger than the expected number of entries). This makes the
|
||
|
hash distribution better and will improve lookup performance.
|
||
|
|
||
5 months ago
|
When \a caseSensitive is TRUE (the default) TQAsciiDict treats
|
||
13 years ago
|
"abc" and "Abc" as different keys; when it is FALSE "abc" and
|
||
|
"Abc" are the same. Case-insensitive comparison only considers the
|
||
|
26 letters in US-ASCII.
|
||
|
|
||
|
If \a copyKeys is TRUE (the default), the dictionary copies keys
|
||
|
using strcpy(); if it is FALSE, the dictionary just copies the
|
||
|
pointers.
|
||
|
*/
|
||
|
|
||
|
/*!
|
||
5 months ago
|
\fn TQAsciiDict::TQAsciiDict( const TQAsciiDict<type> &dict )
|
||
13 years ago
|
|
||
|
Constructs a copy of \a dict.
|
||
|
|
||
|
Each item in \a dict is inserted into this dictionary. Only the
|
||
|
pointers are copied (shallow copy).
|
||
|
*/
|
||
|
|
||
|
/*!
|
||
5 months ago
|
\fn TQAsciiDict::~TQAsciiDict()
|
||
13 years ago
|
|
||
|
Removes all items from the dictionary and destroys it.
|
||
|
|
||
|
The items are deleted if auto-delete is enabled.
|
||
|
|
||
|
All iterators that access this dictionary will be reset.
|
||
|
|
||
|
\sa setAutoDelete()
|
||
|
*/
|
||
|
|
||
|
/*!
|
||
5 months ago
|
\fn TQAsciiDict<type> &TQAsciiDict::operator=(const TQAsciiDict<type> &dict)
|
||
13 years ago
|
|
||
|
Assigns \a dict to this dictionary and returns a reference to this
|
||
|
dictionary.
|
||
|
|
||
|
This dictionary is first cleared and then each item in \a dict is
|
||
|
inserted into this dictionary. Only the pointers are copied
|
||
|
(shallow copy) unless newItem() has been reimplemented().
|
||
|
*/
|
||
|
|
||
|
/*!
|
||
5 months ago
|
\fn uint TQAsciiDict::count() const
|
||
13 years ago
|
|
||
|
Returns the number of items in the dictionary.
|
||
|
|
||
|
\sa isEmpty()
|
||
|
*/
|
||
|
|
||
|
/*!
|
||
5 months ago
|
\fn uint TQAsciiDict::size() const
|
||
13 years ago
|
|
||
|
Returns the size of the internal hash array (as specified in the
|
||
|
constructor).
|
||
|
|
||
|
\sa count()
|
||
|
*/
|
||
|
|
||
|
/*!
|
||
5 months ago
|
\fn void TQAsciiDict::resize( uint newsize )
|
||
13 years ago
|
|
||
|
Changes the size of the hashtable to \a newsize. The contents of
|
||
|
the dictionary are preserved but all iterators on the dictionary
|
||
|
become invalid.
|
||
|
*/
|
||
|
|
||
|
/*!
|
||
5 months ago
|
\fn bool TQAsciiDict::isEmpty() const
|
||
13 years ago
|
|
||
|
Returns TRUE if the dictionary is empty, i.e. count() == 0;
|
||
|
otherwise it returns FALSE.
|
||
|
|
||
|
\sa count()
|
||
|
*/
|
||
|
|
||
|
/*!
|
||
5 months ago
|
\fn void TQAsciiDict::insert( const char *key, const type *item )
|
||
13 years ago
|
|
||
|
Inserts the \a key with the \a item into the dictionary.
|
||
|
|
||
|
Multiple items can have the same key, in which case only the last
|
||
|
item will be accessible using \l operator[]().
|
||
|
|
||
|
\a item may not be 0.
|
||
|
|
||
|
\sa replace()
|
||
|
*/
|
||
|
|
||
|
/*!
|
||
5 months ago
|
\fn void TQAsciiDict::replace( const char *key, const type *item )
|
||
13 years ago
|
|
||
|
Replaces an item that has a key equal to \a key with \a item.
|
||
|
|
||
|
If the item does not already exist, it will be inserted.
|
||
|
|
||
|
\a item may not be 0.
|
||
|
|
||
|
Equivalent to:
|
||
|
\code
|
||
5 months ago
|
TQAsciiDict<char> dict;
|
||
13 years ago
|
...
|
||
|
if ( dict.find(key) )
|
||
|
dict.remove( key );
|
||
|
dict.insert( key, item );
|
||
|
\endcode
|
||
|
|
||
|
If there are two or more items with equal keys, then the most
|
||
|
recently inserted item will be replaced.
|
||
|
|
||
|
\sa insert()
|
||
|
*/
|
||
|
|
||
|
/*!
|
||
5 months ago
|
\fn bool TQAsciiDict::remove( const char *key )
|
||
13 years ago
|
|
||
|
Removes the item associated with \a key from the dictionary.
|
||
|
Returns TRUE if successful, i.e. if the key existed in the
|
||
|
dictionary; otherwise returns FALSE.
|
||
|
|
||
|
If there are two or more items with equal keys, then the most
|
||
|
recently inserted item will be removed.
|
||
|
|
||
|
The removed item is deleted if \link
|
||
6 months ago
|
TQPtrCollection::setAutoDelete() auto-deletion\endlink is enabled.
|
||
13 years ago
|
|
||
|
All dictionary iterators that refer to the removed item will be
|
||
|
set to point to the next item in the dictionary traversal order.
|
||
|
|
||
|
\sa take(), clear(), setAutoDelete()
|
||
|
*/
|
||
|
|
||
|
/*!
|
||
5 months ago
|
\fn type *TQAsciiDict::take( const char *key )
|
||
13 years ago
|
|
||
|
Takes the item associated with \a key out of the dictionary
|
||
6 months ago
|
without deleting it (even if \link TQPtrCollection::setAutoDelete()
|
||
13 years ago
|
auto-deletion\endlink is enabled).
|
||
|
|
||
|
If there are two or more items with equal keys, then the most
|
||
|
recently inserted item will be taken.
|
||
|
|
||
|
Returns a pointer to the item taken out, or 0 if the key does not
|
||
|
exist in the dictionary.
|
||
|
|
||
|
All dictionary iterators that refer to the taken item will be set
|
||
|
to point to the next item in the dictionary traversal order.
|
||
|
|
||
|
\sa remove(), clear(), setAutoDelete()
|
||
|
*/
|
||
|
|
||
|
/*!
|
||
5 months ago
|
\fn void TQAsciiDict::clear()
|
||
13 years ago
|
|
||
|
Removes all items from the dictionary.
|
||
|
|
||
|
The removed items are deleted if \link
|
||
6 months ago
|
TQPtrCollection::setAutoDelete() auto-deletion\endlink is enabled.
|
||
13 years ago
|
|
||
|
All dictionary iterators that operate on dictionary are reset.
|
||
|
|
||
|
\sa remove(), take(), setAutoDelete()
|
||
|
*/
|
||
|
|
||
|
/*!
|
||
5 months ago
|
\fn type *TQAsciiDict::find( const char *key ) const
|
||
13 years ago
|
|
||
|
Returns the item associated with \a key, or 0 if the key does not
|
||
|
exist in the dictionary.
|
||
|
|
||
|
This function uses an internal hashing algorithm to optimize
|
||
|
lookup.
|
||
|
|
||
|
If there are two or more items with equal keys, then the item that
|
||
|
was most recently inserted will be found.
|
||
|
|
||
|
Equivalent to the [] operator.
|
||
|
|
||
|
\sa operator[]()
|
||
|
*/
|
||
|
|
||
|
/*!
|
||
5 months ago
|
\fn type *TQAsciiDict::operator[]( const char *key ) const
|
||
13 years ago
|
|
||
|
Returns the item associated with \a key, or 0 if the key does
|
||
|
not exist in the dictionary.
|
||
|
|
||
|
This function uses an internal hashing algorithm to optimize
|
||
|
lookup.
|
||
|
|
||
|
If there are two or more items with equal keys, then the item that
|
||
|
was most recently inserted will be found.
|
||
|
|
||
|
Equivalent to the find() function.
|
||
|
|
||
|
\sa find()
|
||
|
*/
|
||
|
|
||
|
/*!
|
||
5 months ago
|
\fn void TQAsciiDict::statistics() const
|
||
13 years ago
|
|
||
|
Debugging-only function that prints out the dictionary
|
||
13 years ago
|
distribution using tqDebug().
|
||
13 years ago
|
*/
|
||
|
|
||
|
/*!
|
||
5 months ago
|
\fn QDataStream& TQAsciiDict::read( QDataStream &s,
|
||
6 months ago
|
TQPtrCollection::Item &item )
|
||
13 years ago
|
|
||
|
Reads a dictionary item from the stream \a s and returns a
|
||
|
reference to the stream.
|
||
|
|
||
|
The default implementation sets \a item to 0.
|
||
|
|
||
|
\sa write()
|
||
|
*/
|
||
|
|
||
|
/*!
|
||
5 months ago
|
\fn QDataStream& TQAsciiDict::write( QDataStream &s,
|
||
6 months ago
|
TQPtrCollection::Item ) const
|
||
13 years ago
|
|
||
|
Writes a dictionary item to the stream \a s and returns a
|
||
|
reference to the stream.
|
||
|
|
||
|
\sa read()
|
||
|
*/
|
||
|
|
||
|
/*****************************************************************************
|
||
5 months ago
|
TQAsciiDictIterator documentation
|
||
13 years ago
|
*****************************************************************************/
|
||
|
|
||
|
/*!
|
||
5 months ago
|
\class TQAsciiDictIterator tqasciidict.h
|
||
|
\brief The TQAsciiDictIterator class provides an iterator for TQAsciiDict collections.
|
||
13 years ago
|
|
||
|
\ingroup collection
|
||
|
\ingroup tools
|
||
|
|
||
5 months ago
|
TQAsciiDictIterator is implemented as a template class. Define a
|
||
|
template instance TQAsciiDictIterator\<X\> to create a dictionary
|
||
|
iterator that operates on TQAsciiDict\<X\> (dictionary of X*).
|
||
13 years ago
|
|
||
|
Example:
|
||
|
\code
|
||
5 months ago
|
TQAsciiDict<QLineEdit> fields;
|
||
13 years ago
|
fields.insert( "forename", new QLineEdit( this ) );
|
||
|
fields.insert( "surname", new QLineEdit( this ) );
|
||
|
fields.insert( "age", new QLineEdit( this ) );
|
||
|
|
||
|
fields["forename"]->setText( "Homer" );
|
||
|
fields["surname"]->setText( "Simpson" );
|
||
|
fields["age"]->setText( "45" );
|
||
|
|
||
5 months ago
|
TQAsciiDictIterator<QLineEdit> it( fields );
|
||
13 years ago
|
for( ; it.current(); ++it )
|
||
|
cout << it.currentKey() << ": " << it.current()->text() << endl;
|
||
|
cout << endl;
|
||
|
|
||
|
// Output (random order):
|
||
|
// age: 45
|
||
|
// surname: Simpson
|
||
|
// forename: Homer
|
||
|
\endcode
|
||
|
In the example we insert some line edits into a dictionary, then
|
||
|
iterate over the dictionary printing the strings associated with
|
||
|
those line edits.
|
||
|
|
||
|
Note that the traversal order is arbitrary; you are not guaranteed
|
||
|
any particular order.
|
||
|
|
||
|
Multiple iterators may independently traverse the same dictionary.
|
||
5 months ago
|
A TQAsciiDict knows about all the iterators that are operating on
|
||
13 years ago
|
the dictionary. When an item is removed from the dictionary,
|
||
5 months ago
|
TQAsciiDict updates all the iterators that are referring to the
|
||
13 years ago
|
removed item to point to the next item in the (arbitrary)
|
||
|
traversal order.
|
||
|
|
||
5 months ago
|
\sa TQAsciiDict
|
||
13 years ago
|
*/
|
||
|
|
||
|
/*!
|
||
5 months ago
|
\fn TQAsciiDictIterator::TQAsciiDictIterator( const TQAsciiDict<type> &dict )
|
||
13 years ago
|
|
||
|
Constructs an iterator for \a dict. The current iterator item is
|
||
|
set to point on the first item in the \a dict.
|
||
|
*/
|
||
|
|
||
|
/*!
|
||
5 months ago
|
\fn TQAsciiDictIterator::~TQAsciiDictIterator()
|
||
13 years ago
|
|
||
|
Destroys the iterator.
|
||
|
*/
|
||
|
|
||
|
/*!
|
||
5 months ago
|
\fn uint TQAsciiDictIterator::count() const
|
||
13 years ago
|
|
||
|
Returns the number of items in the dictionary this iterator
|
||
|
operates over.
|
||
|
|
||
|
\sa isEmpty()
|
||
|
*/
|
||
|
|
||
|
/*!
|
||
5 months ago
|
\fn bool TQAsciiDictIterator::isEmpty() const
|
||
13 years ago
|
|
||
|
Returns TRUE if the dictionary is empty, i.e. count() == 0,
|
||
|
otherwise returns FALSE.
|
||
|
|
||
|
\sa count()
|
||
|
*/
|
||
|
|
||
|
/*!
|
||
5 months ago
|
\fn type *TQAsciiDictIterator::toFirst()
|
||
13 years ago
|
|
||
|
Sets the current iterator item to point to the first item in the
|
||
|
dictionary and returns a pointer to the item. If the dictionary is
|
||
|
empty it sets the current item to 0 and returns 0.
|
||
|
*/
|
||
|
|
||
|
/*!
|
||
5 months ago
|
\fn TQAsciiDictIterator::operator type *() const
|
||
13 years ago
|
|
||
|
Cast operator. Returns a pointer to the current iterator item.
|
||
|
Same as current().
|
||
|
*/
|
||
|
|
||
|
/*!
|
||
5 months ago
|
\fn type *TQAsciiDictIterator::current() const
|
||
13 years ago
|
|
||
|
Returns a pointer to the current iterator item.
|
||
|
*/
|
||
|
|
||
|
/*!
|
||
5 months ago
|
\fn const char *TQAsciiDictIterator::currentKey() const
|
||
13 years ago
|
|
||
|
Returns a pointer to the key for the current iterator item.
|
||
|
*/
|
||
|
|
||
|
/*!
|
||
5 months ago
|
\fn type *TQAsciiDictIterator::operator()()
|
||
13 years ago
|
|
||
|
Makes the succeeding item current and returns the original current
|
||
|
item.
|
||
|
|
||
|
If the current iterator item was the last item in the dictionary
|
||
|
or if it was 0, 0 is returned.
|
||
|
*/
|
||
|
|
||
|
/*!
|
||
5 months ago
|
\fn type *TQAsciiDictIterator::operator++()
|
||
13 years ago
|
|
||
|
Prefix ++ makes the succeeding item current and returns the new
|
||
|
current item.
|
||
|
|
||
|
If the current iterator item was the last item in the dictionary
|
||
|
or if it was 0, 0 is returned.
|
||
|
*/
|
||
|
|
||
|
/*!
|
||
5 months ago
|
\fn type *TQAsciiDictIterator::operator+=( uint jump )
|
||
13 years ago
|
|
||
|
Sets the current item to the item \a jump positions after the
|
||
|
current item, and returns a pointer to that item.
|
||
|
|
||
|
If that item is beyond the last item or if the dictionary is
|
||
|
empty, it sets the current item to 0 and returns 0.
|
||
|
*/
|