summaryrefslogtreecommitdiffstats
path: root/tqtinterface/qt4/src/tools/tqglist.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tqtinterface/qt4/src/tools/tqglist.cpp')
-rw-r--r--tqtinterface/qt4/src/tools/tqglist.cpp1267
1 files changed, 0 insertions, 1267 deletions
diff --git a/tqtinterface/qt4/src/tools/tqglist.cpp b/tqtinterface/qt4/src/tools/tqglist.cpp
deleted file mode 100644
index 07851ba..0000000
--- a/tqtinterface/qt4/src/tools/tqglist.cpp
+++ /dev/null
@@ -1,1267 +0,0 @@
-/****************************************************************************
-**
-** Implementation of TQGList and TQGListIterator classes
-**
-** Created : 920624
-**
-** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA.
-**
-** This file is part of the tools module of the TQt GUI Toolkit.
-**
-** 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)
-** and the KDE Free TQt Foundation.
-**
-** Please review the following information to ensure GNU General
-** Public Licensing requirements will be met:
-** 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 [email protected].
-**
-** This file may be used under the terms of the Q Public License as
-** defined by Trolltech ASA and appearing in the file LICENSE.TQPL
-** included in the packaging of this file. Licensees holding valid TQt
-** Commercial licenses may use this file in accordance with the TQt
-** 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.
-**
-**********************************************************************/
-
-#include "tqglist.h"
-#include "tqgvector.h"
-#include "tqdatastream.h"
-#include "tqvaluelist.h"
-
-/*!
- \class TQLNode tqglist.h
- \reentrant
- \ingroup collection
- \brief The TQLNode class is an internal class for the TQPtrList template collection.
-
- \internal
-
- TQLNode is a doubly-linked list node. It has three pointers:
- \list 1
- \i Pointer to the previous node.
- \i Pointer to the next node.
- \i Pointer to the actual data.
- \endlist
-
- It might sometimes be practical to have direct access to the list nodes
- in a TQPtrList, but it is seldom required.
-
- Be very careful if you want to access the list nodes. The heap can
- easily get corrupted if you make a mistake.
-
- \sa TQPtrList::currentNode(), TQPtrList::removeNode(), TQPtrList::takeNode()
-*/
-
-/*!
- \fn TQPtrCollection::Item TQLNode::getData()
- Returns a pointer (\c void*) to the actual data in the list node.
-*/
-
-
-/*!
- \class TQGList tqglist.h
- \reentrant
- \ingroup collection
- \brief The TQGList class is an internal class for implementing TQt collection classes.
-
- \internal
-
- TQGList is a strictly internal class that acts as a base class for
- several collection classes; TQPtrList, TQPtrQueue and TQPtrStack.
-
- TQGList has some virtual functions that can be reimplemented to
- customize the subclasses, namely compareItems(), read() and
- write. Normally, you do not have to reimplement any of these
- functions. If you still want to reimplement them, see the TQStrList
- class (tqstrlist.h) for an example.
-*/
-
-
-/* Internal helper class for TQGList. Contains some optimization for
- the typically case where only one iterators is activre on the list.
- */
-class TQGListIteratorList
-{
-public:
- TQGListIteratorList()
- : list(0), iterator(0) {
- }
- ~TQGListIteratorList() {
- notifyClear( TRUE );
- delete list;
- }
-
- void add( TQGListIterator* i ) {
- if ( !iterator ) {
- iterator = i;
- } else if ( list ) {
- list->push_front( i );
- } else {
- list = new TQValueList<TQGListIterator*>;
- list->push_front( i );
- }
- }
-
- void remove( TQGListIterator* i ) {
- if ( iterator == i ) {
- iterator = 0;
- } else if ( list ) {
- list->remove( i );
- if ( list->isEmpty() ) {
- delete list;
- list = 0;
- }
- }
- }
-
- void notifyClear( bool zeroList ) {
- if ( iterator ) {
- if ( zeroList )
- iterator->list = 0;
- iterator->curNode = 0;
- }
- if ( list ) {
- for ( TQValueList<TQGListIterator*>::Iterator i = list->begin(); i != list->end(); ++i ) {
- if ( zeroList )
- (*i)->list = 0;
- (*i)->curNode = 0;
- }
- }
- }
-
- void notifyRemove( TQLNode* n, TQLNode* curNode ) {
- if ( iterator ) {
- if ( iterator->curNode == n )
- iterator->curNode = curNode;
- }
- if ( list ) {
- for ( TQValueList<TQGListIterator*>::Iterator i = list->begin(); i != list->end(); ++i ) {
- if ( (*i)->curNode == n )
- (*i)->curNode = curNode;
- }
- }
- }
-
-private:
- TQValueList<TQGListIterator*>* list;
- TQGListIterator* iterator;
-};
-
-
-
-/*****************************************************************************
- Default implementation of virtual functions
- *****************************************************************************/
-
-/*!
- Documented as TQPtrList::compareItems().
-
- Compares \a item1 with \a item2.
-*/
-int TQGList::compareItems( TQPtrCollection::Item item1, TQPtrCollection::Item item2 )
-{
- return item1 != item2; // compare pointers
-}
-
-#ifndef TQT_NO_DATASTREAM
-/*!
- \overload
- Reads a collection/list item from the stream \a s and returns a reference
- to the stream.
-
- The default implementation sets \a item to 0.
-
- \sa write()
-*/
-
-TQDataStream &TQGList::read( TQDataStream &s, TQPtrCollection::Item &item )
-{
- item = 0;
- return s;
-}
-
-/*!
- \overload
- Writes a collection/list item to the stream \a s and
- returns a reference to the stream.
-
- The default implementation does nothing.
-
- \sa read()
-*/
-
-TQDataStream &TQGList::write( TQDataStream &s, TQPtrCollection::Item ) const
-{
- return s;
-}
-#endif // TQT_NO_DATASTREAM
-
-/*****************************************************************************
- TQGList member functions
- *****************************************************************************/
-
-/*!
- Constructs an empty list.
-*/
-
-TQGList::TQGList()
-{
- firstNode = lastNode = curNode = 0; // initialize list
- numNodes = 0;
- curIndex = -1;
- iterators = 0; // initialize iterator list
-}
-
-/*!
- Constructs a copy of \a list.
-*/
-
-TQGList::TQGList( const TQGList & list )
- : TQPtrCollection( list )
-{
- firstNode = lastNode = curNode = 0; // initialize list
- numNodes = 0;
- curIndex = -1;
- iterators = 0; // initialize iterator list
- TQLNode *n = list.firstNode;
- while ( n ) { // copy all items from list
- append( n->data );
- n = n->next;
- }
-}
-
-/*!
- Removes all items from the list and destroys the list.
-*/
-
-TQGList::~TQGList()
-{
- clear();
- delete iterators;
- // Workaround for GCC 2.7.* bug. Compiler constructs 'static' TQGList
- // instances twice on the same address and therefore tries to destruct
- // twice on the same address! This is insane but let's try not to crash
- // here.
- iterators = 0;
-}
-
-
-/*!
- Assigns \a list to this list.
-*/
-
-TQGList& TQGList::operator=( const TQGList &list )
-{
- if ( &list == this )
- return *this;
-
- clear();
- if ( list.count() > 0 ) {
- TQLNode *n = list.firstNode;
- while ( n ) { // copy all items from list
- append( n->data );
- n = n->next;
- }
- curNode = firstNode;
- curIndex = 0;
- }
- return *this;
-}
-
-/*!
- Compares this list with \a list. Returns TRUE if the lists
- contain the same data, otherwise FALSE.
-*/
-
-bool TQGList::operator==( const TQGList &list ) const
-{
- if ( count() != list.count() )
- return FALSE;
-
- if ( count() == 0 )
- return TRUE;
-
- TQLNode *n1 = firstNode;
- TQLNode *n2 = list.firstNode;
- while ( n1 && n2 ) {
- // should be mutable
- if ( ( (TQGList*)this )->compareItems( n1->data, n2->data ) != 0 )
- return FALSE;
- n1 = n1->next;
- n2 = n2->next;
- }
-
- return TRUE;
-}
-
-/*!
- \fn uint TQGList::count() const
-
- Returns the number of items in the list.
-*/
-
-
-/*!
- Returns the node at position \a index. Sets this node to current.
-*/
-
-TQLNode *TQGList::locate( uint index )
-{
- if ( index == (uint)curIndex ) // current node ?
- return curNode;
- if ( !curNode && firstNode ) { // set current node
- curNode = firstNode;
- curIndex = 0;
- }
- register TQLNode *node;
- int distance = index - curIndex; // node distance to cur node
- bool forward; // direction to traverse
-
- if ( index >= numNodes )
- return 0;
-
- if ( distance < 0 )
- distance = -distance;
- if ( (uint)distance < index && (uint)distance < numNodes - index ) {
- node = curNode; // start from current node
- forward = index > (uint)curIndex;
- } else if ( index < numNodes - index ) { // start from first node
- node = firstNode;
- distance = index;
- forward = TRUE;
- } else { // start from last node
- node = lastNode;
- distance = numNodes - index - 1;
- if ( distance < 0 )
- distance = 0;
- forward = FALSE;
- }
- if ( forward ) { // now run through nodes
- while ( distance-- )
- node = node->next;
- } else {
- while ( distance-- )
- node = node->prev;
- }
- curIndex = index; // must update index
- return curNode = node;
-}
-
-
-/*!
- Inserts item \a d at its sorted position in the list.
-*/
-
-void TQGList::inSort( TQPtrCollection::Item d )
-{
- int index = 0;
- register TQLNode *n = firstNode;
- while ( n && compareItems(n->data,d) < 0 ){ // find position in list
- n = n->next;
- index++;
- }
- insertAt( index, d );
-}
-
-
-/*!
- Inserts item \a d at the start of the list.
-*/
-
-void TQGList::prepend( TQPtrCollection::Item d )
-{
- register TQLNode *n = new TQLNode( newItem(d) );
- TQ_CHECK_PTR( n );
- n->prev = 0;
- if ( (n->next = firstNode) ) // list is not empty
- firstNode->prev = n;
- else // initialize list
- lastNode = n;
- firstNode = curNode = n; // curNode affected
- numNodes++;
- curIndex = 0;
-}
-
-
-/*!
- Inserts item \a d at the end of the list.
-*/
-
-void TQGList::append( TQPtrCollection::Item d )
-{
- register TQLNode *n = new TQLNode( newItem(d) );
- TQ_CHECK_PTR( n );
- n->next = 0;
- if ( (n->prev = lastNode) ) // list is not empty
- lastNode->next = n;
- else // initialize list
- firstNode = n;
- lastNode = curNode = n; // curNode affected
- curIndex = numNodes;
- numNodes++;
-}
-
-
-/*!
- Inserts item \a d at position \a index in the list.
-*/
-
-bool TQGList::insertAt( uint index, TQPtrCollection::Item d )
-{
- if ( index == 0 ) {
- prepend( d );
- return TRUE;
- } else if ( index == numNodes ) {
- append( d );
- return TRUE;
- }
- TQLNode *nextNode = locate( index );
- if ( !nextNode )
- return FALSE;
- TQLNode *prevNode = nextNode->prev;
- register TQLNode *n = new TQLNode( newItem(d) );
- TQ_CHECK_PTR( n );
- nextNode->prev = n;
- prevNode->next = n;
- n->prev = prevNode; // link new node into list
- n->next = nextNode;
- curNode = n; // curIndex set by locate()
- numNodes++;
- return TRUE;
-}
-
-
-/*!
- Relinks node \a n and makes it the first node in the list.
-*/
-
-void TQGList::relinkNode( TQLNode *n )
-{
- if ( n == firstNode ) // already first
- return;
- curNode = n;
- unlink();
- n->prev = 0;
- if ( (n->next = firstNode) ) // list is not empty
- firstNode->prev = n;
- else // initialize list
- lastNode = n;
- firstNode = curNode = n; // curNode affected
- numNodes++;
- curIndex = 0;
-}
-
-
-/*!
- Unlinks the current list node and returns a pointer to this node.
-*/
-
-TQLNode *TQGList::unlink()
-{
- if ( curNode == 0 ) // null current node
- return 0;
- register TQLNode *n = curNode; // unlink this node
- if ( n == firstNode ) { // removing first node ?
- if ( (firstNode = n->next) ) {
- firstNode->prev = 0;
- } else {
- lastNode = curNode = 0; // list becomes empty
- curIndex = -1;
- }
- } else {
- if ( n == lastNode ) { // removing last node ?
- lastNode = n->prev;
- lastNode->next = 0;
- } else { // neither last nor first node
- n->prev->next = n->next;
- n->next->prev = n->prev;
- }
- }
-
- if ( n->next ) { // change current node
- curNode = n->next;
- } else if ( n->prev ) {
- curNode = n->prev;
- curIndex--;
- }
-
- if ( iterators )
- iterators->notifyRemove( n, curNode );
- numNodes--;
- return n;
-}
-
-
-/*!
- Removes the node \a n from the list.
-*/
-
-bool TQGList::removeNode( TQLNode *n )
-{
-#if defined(TQT_CHECK_NULL)
- if ( n == 0 || (n->prev && n->prev->next != n) ||
- (n->next && n->next->prev != n) ) {
- qWarning( "TQGList::removeNode: Corrupted node" );
- return FALSE;
- }
-#endif
- curNode = n;
- unlink(); // unlink node
- deleteItem( n->data ); // deallocate this node
- delete n;
- curNode = firstNode;
- curIndex = curNode ? 0 : -1;
- return TRUE;
-}
-
-/*!
- Removes the item \a d from the list. Uses compareItems() to find the item.
-
- If \a d is 0, removes the current item.
-*/
-
-bool TQGList::remove( TQPtrCollection::Item d )
-{
- if ( d && find(d) == -1 )
- return FALSE;
- TQLNode *n = unlink();
- if ( !n )
- return FALSE;
- deleteItem( n->data );
- delete n;
- return TRUE;
-}
-
-/*!
- Removes the item \a d from the list.
-*/
-
-bool TQGList::removeRef( TQPtrCollection::Item d )
-{
- if ( findRef(d) == -1 )
- return FALSE;
- TQLNode *n = unlink();
- if ( !n )
- return FALSE;
- deleteItem( n->data );
- delete n;
- return TRUE;
-}
-
-/*!
- \fn bool TQGList::removeFirst()
-
- Removes the first item in the list.
-*/
-
-/*!
- \fn bool TQGList::removeLast()
-
- Removes the last item in the list.
-*/
-
-/*!
- Removes the item at position \a index from the list.
-*/
-
-bool TQGList::removeAt( uint index )
-{
- if ( !locate(index) )
- return FALSE;
- TQLNode *n = unlink();
- if ( !n )
- return FALSE;
- deleteItem( n->data );
- delete n;
- return TRUE;
-}
-
-
-/*!
- Replaces the item at index \a index with \a d.
-*/
-bool TQGList::replaceAt( uint index, TQPtrCollection::Item d )
-{
- TQLNode *n = locate( index );
- if ( !n )
- return FALSE;
- if ( n->data != d ) {
- deleteItem( n->data );
- n->data = newItem( d );
- }
- return TRUE;
-}
-
-
-
-/*!
- Takes the node \a n out of the list.
-*/
-
-TQPtrCollection::Item TQGList::takeNode( TQLNode *n )
-{
-#if defined(TQT_CHECK_NULL)
- if ( n == 0 || (n->prev && n->prev->next != n) ||
- (n->next && n->next->prev != n) ) {
- qWarning( "TQGList::takeNode: Corrupted node" );
- return 0;
- }
-#endif
- curNode = n;
- unlink(); // unlink node
- Item d = n->data;
- delete n; // delete the node, not data
- curNode = firstNode;
- curIndex = curNode ? 0 : -1;
- return d;
-}
-
-/*!
- Takes the current item out of the list.
-*/
-
-TQPtrCollection::Item TQGList::take()
-{
- TQLNode *n = unlink(); // unlink node
- Item d = n ? n->data : 0;
- delete n; // delete node, keep contents
- return d;
-}
-
-/*!
- Takes the item at position \a index out of the list.
-*/
-
-TQPtrCollection::Item TQGList::takeAt( uint index )
-{
- if ( !locate(index) )
- return 0;
- TQLNode *n = unlink(); // unlink node
- Item d = n ? n->data : 0;
- delete n; // delete node, keep contents
- return d;
-}
-
-/*!
- Takes the first item out of the list.
-*/
-
-TQPtrCollection::Item TQGList::takeFirst()
-{
- first();
- TQLNode *n = unlink(); // unlink node
- Item d = n ? n->data : 0;
- delete n;
- return d;
-}
-
-/*!
- Takes the last item out of the list.
-*/
-
-TQPtrCollection::Item TQGList::takeLast()
-{
- last();
- TQLNode *n = unlink(); // unlink node
- Item d = n ? n->data : 0;
- delete n;
- return d;
-}
-
-
-/*!
- Removes all items from the list.
-*/
-
-void TQGList::clear()
-{
- register TQLNode *n = firstNode;
-
- firstNode = lastNode = curNode = 0; // initialize list
- numNodes = 0;
- curIndex = -1;
-
- if ( iterators )
- iterators->notifyClear( FALSE );
-
- TQLNode *prevNode;
- while ( n ) { // for all nodes ...
- deleteItem( n->data ); // deallocate data
- prevNode = n;
- n = n->next;
- delete prevNode; // deallocate node
- }
-}
-
-
-/*!
- Finds item \a d in the list. If \a fromStart is TRUE the search
- begins at the first node; otherwise it begins at the current node.
-*/
-
-int TQGList::findRef( TQPtrCollection::Item d, bool fromStart )
-{
- register TQLNode *n;
- int index;
- if ( fromStart ) { // start from first node
- n = firstNode;
- index = 0;
- } else { // start from current node
- n = curNode;
- index = curIndex;
- }
- while ( n && n->data != d ) { // find exact match
- n = n->next;
- index++;
- }
- curNode = n;
- curIndex = n ? index : -1;
- return curIndex; // return position of item
-}
-
-/*!
- Finds item \a d in the list using compareItems(). If \a fromStart is
- TRUE the search begins at the first node; otherwise it begins at the
- current node.
-*/
-
-int TQGList::find( TQPtrCollection::Item d, bool fromStart )
-{
- register TQLNode *n;
- int index;
- if ( fromStart ) { // start from first node
- n = firstNode;
- index = 0;
- } else { // start from current node
- n = curNode;
- index = curIndex;
- }
- while ( n && compareItems(n->data,d) ){ // find equal match
- n = n->next;
- index++;
- }
- curNode = n;
- curIndex = n ? index : -1;
- return curIndex; // return position of item
-}
-
-
-/*!
- Counts the number item \a d occurs in the list.
-*/
-
-uint TQGList::containsRef( TQPtrCollection::Item d ) const
-{
- register TQLNode *n = firstNode;
- uint count = 0;
- while ( n ) { // for all nodes...
- if ( n->data == d ) // count # exact matches
- count++;
- n = n->next;
- }
- return count;
-}
-
-/*!
- Counts the number of times item \a d occurs in the list. Uses
- compareItems().
-*/
-
-uint TQGList::contains( TQPtrCollection::Item d ) const
-{
- register TQLNode *n = firstNode;
- uint count = 0;
- TQGList *that = (TQGList*)this; // mutable for compareItems()
- while ( n ) { // for all nodes...
- if ( !that->compareItems(n->data,d) ) // count # equal matches
- count++;
- n = n->next;
- }
- return count;
-}
-
-
-/*!
- \overload TQPtrCollection::Item TQGList::at( uint index )
-
- Sets the item at position \a index to the current item.
-*/
-
-/*!
- \fn int TQGList::at() const
-
- Returns the current index.
-*/
-
-/*!
- \fn TQLNode *TQGList::currentNode() const
-
- Returns the current node.
-*/
-
-/*!
- \fn TQPtrCollection::Item TQGList::get() const
-
- Returns the current item.
-*/
-
-/*!
- \fn TQPtrCollection::Item TQGList::cfirst() const
-
- Returns the first item in the list.
-*/
-
-/*!
- \fn TQPtrCollection::Item TQGList::clast() const
-
- Returns the last item in the list.
-*/
-
-
-/*!
- Returns the first list item. Sets this to current.
-*/
-
-TQPtrCollection::Item TQGList::first()
-{
- if ( firstNode ) {
- curIndex = 0;
- return (curNode=firstNode)->data;
- }
- return 0;
-}
-
-/*!
- Returns the last list item. Sets this to current.
-*/
-
-TQPtrCollection::Item TQGList::last()
-{
- if ( lastNode ) {
- curIndex = numNodes-1;
- return (curNode=lastNode)->data;
- }
- return 0;
-}
-
-/*!
- Returns the next list item (after current). Sets this to current.
-*/
-
-TQPtrCollection::Item TQGList::next()
-{
- if ( curNode ) {
- if ( curNode->next ) {
- curIndex++;
- curNode = curNode->next;
- return curNode->data;
- }
- curIndex = -1;
- curNode = 0;
- }
- return 0;
-}
-
-/*!
- Returns the previous list item (before current). Sets this to current.
-*/
-
-TQPtrCollection::Item TQGList::prev()
-{
- if ( curNode ) {
- if ( curNode->prev ) {
- curIndex--;
- curNode = curNode->prev;
- return curNode->data;
- }
- curIndex = -1;
- curNode = 0;
- }
- return 0;
-}
-
-
-/*!
- Converts the list to a vector, \a vector.
-*/
-
-void TQGList::toVector( TQGVector *vector ) const
-{
- vector->clear();
- if ( !vector->resize( count() ) )
- return;
- register TQLNode *n = firstNode;
- uint i = 0;
- while ( n ) {
- vector->insert( i, n->data );
- n = n->next;
- i++;
- }
-}
-
-void TQGList::heapSortPushDown( TQPtrCollection::Item* heap, int first, int last )
-{
- int r = first;
- while( r <= last/2 ) {
- // Node r has only one child ?
- if ( last == 2*r ) {
- // Need for swapping ?
- if ( compareItems( heap[r], heap[ 2*r ] ) > 0 ) {
- TQPtrCollection::Item tmp = heap[r];
- heap[ r ] = heap[ 2*r ];
- heap[ 2*r ] = tmp;
- }
- // That's it ...
- r = last;
- } else {
- // Node has two tqchildren
- if ( compareItems( heap[r], heap[ 2*r ] ) > 0 &&
- compareItems( heap[ 2*r ], heap[ 2*r+1 ] ) <= 0 ) {
- // Swap with left child
- TQPtrCollection::Item tmp = heap[r];
- heap[ r ] = heap[ 2*r ];
- heap[ 2*r ] = tmp;
- r *= 2;
- } else if ( compareItems( heap[r], heap[ 2*r+1 ] ) > 0 &&
- compareItems( heap[ 2*r+1 ], heap[ 2*r ] ) < 0 ) {
- // Swap with right child
- TQPtrCollection::Item tmp = heap[r];
- heap[ r ] = heap[ 2*r+1 ];
- heap[ 2*r+1 ] = tmp;
- r = 2*r+1;
- } else {
- // We are done
- r = last;
- }
- }
- }
-}
-
-
-/*! Sorts the list by the result of the virtual compareItems() function.
-
- The Heap-Sort algorithm is used for sorting. It sorts n items with
- O(n*log n) compares. This is the asymptotic optimal solution of the
- sorting problem.
-*/
-
-void TQGList::sort()
-{
- uint n = count();
- if ( n < 2 )
- return;
-
- // Create the heap
- TQPtrCollection::Item* realheap = new TQPtrCollection::Item[ n ];
- // Wow, what a fake. But I want the heap to be indexed as 1...n
- TQPtrCollection::Item* heap = realheap - 1;
- int size = 0;
- TQLNode* insert = firstNode;
- for( ; insert != 0; insert = insert->next ) {
- heap[++size] = insert->data;
- int i = size;
- while( i > 1 && compareItems( heap[i], heap[ i / 2 ] ) < 0 ) {
- TQPtrCollection::Item tmp = heap[ i ];
- heap[ i ] = heap[ i/2 ];
- heap[ i/2 ] = tmp;
- i /= 2;
- }
- }
-
- insert = firstNode;
- // Now do the sorting
- for ( int i = n; i > 0; i-- ) {
- insert->data = heap[1];
- insert = insert->next;
- if ( i > 1 ) {
- heap[1] = heap[i];
- heapSortPushDown( heap, 1, i - 1 );
- }
- }
-
- delete [] realheap;
-}
-
-
-/*****************************************************************************
- TQGList stream functions
- *****************************************************************************/
-
-#ifndef TQT_NO_DATASTREAM
-TQDataStream &operator>>( TQDataStream &s, TQGList &list )
-{ // read list
- return list.read( s );
-}
-
-TQDataStream &operator<<( TQDataStream &s, const TQGList &list )
-{ // write list
- return list.write( s );
-}
-
-/*!
- Reads a list from the stream \a s.
-*/
-
-TQDataStream &TQGList::read( TQDataStream &s )
-{
- uint num;
- s >> num; // read number of items
- clear(); // clear list
- while ( num-- ) { // read all items
- Item d;
- read( s, d );
- TQ_CHECK_PTR( d );
- if ( !d ) // no memory
- break;
- TQLNode *n = new TQLNode( d );
- TQ_CHECK_PTR( n );
- if ( !n ) // no memory
- break;
- n->next = 0;
- if ( (n->prev = lastNode) ) // list is not empty
- lastNode->next = n;
- else // initialize list
- firstNode = n;
- lastNode = n;
- numNodes++;
- }
- curNode = firstNode;
- curIndex = curNode ? 0 : -1;
- return s;
-}
-
-/*!
- Writes the list to the stream \a s.
-*/
-
-TQDataStream &TQGList::write( TQDataStream &s ) const
-{
- s << count(); // write number of items
- TQLNode *n = firstNode;
- while ( n ) { // write all items
- write( s, n->data );
- n = n->next;
- }
- return s;
-}
-
-#endif // TQT_NO_DATASTREAM
-
-
-
-/*! \internal
- */
-TQLNode* TQGList::erase( TQLNode* it )
-{
- TQLNode* n = it;
- it = it->next;
- removeNode( n );
- return it;
-}
-
-
-/*****************************************************************************
- TQGListIterator member functions
- *****************************************************************************/
-
-/*!
- \class TQGListIterator tqglist.h
- \reentrant
- \ingroup collection
- \brief The TQGListIterator class is an internal class for implementing TQPtrListIterator.
-
- \internal
-
- TQGListIterator is a strictly internal class that does the heavy work for
- TQPtrListIterator.
-*/
-
-/*!
- \internal
- Constructs an iterator that operates on the list \a l.
-*/
-
-TQGListIterator::TQGListIterator( const TQGList &l )
-{
- list = (TQGList *)&l; // get reference to list
- curNode = list->firstNode; // set to first node
- if ( !list->iterators ) {
- list->iterators = new TQGListIteratorList; // create iterator list
- TQ_CHECK_PTR( list->iterators );
- }
- list->iterators->add( this ); // attach iterator to list
-}
-
-/*!
- \internal
- Constructs a copy of the iterator \a it.
-*/
-
-TQGListIterator::TQGListIterator( const TQGListIterator &it )
-{
- list = it.list;
- curNode = it.curNode;
- if ( list )
- list->iterators->add( this ); // attach iterator to list
-}
-
-/*!
- \internal
- Assigns a copy of the iterator \a it and returns a reference to this
- iterator.
-*/
-
-TQGListIterator &TQGListIterator::operator=( const TQGListIterator &it )
-{
- if ( list ) // detach from old list
- list->iterators->remove( this );
- list = it.list;
- curNode = it.curNode;
- if ( list )
- list->iterators->add( this ); // attach to new list
- return *this;
-}
-
-/*!
- \internal
- Destroys the iterator.
-*/
-
-TQGListIterator::~TQGListIterator()
-{
- if ( list ) // detach iterator from list
- list->iterators->remove(this);
-}
-
-
-/*!
- \fn bool TQGListIterator::atFirst() const
- \internal
- Returns TRUE if the iterator points to the first item, otherwise FALSE.
-*/
-
-/*!
- \fn bool TQGListIterator::atLast() const
- \internal
- Returns TRUE if the iterator points to the last item, otherwise FALSE.
-*/
-
-
-/*!
- \internal
- Sets the list iterator to point to the first item in the list.
-*/
-
-TQPtrCollection::Item TQGListIterator::toFirst()
-{
- if ( !list ) {
-#if defined(TQT_CHECK_NULL)
- qWarning( "TQGListIterator::toFirst: List has been deleted" );
-#endif
- return 0;
- }
- return list->firstNode ? (curNode = list->firstNode)->getData() : 0;
-}
-
-/*!
- \internal
- Sets the list iterator to point to the last item in the list.
-*/
-
-TQPtrCollection::Item TQGListIterator::toLast()
-{
- if ( !list ) {
-#if defined(TQT_CHECK_NULL)
- qWarning( "TQGListIterator::toLast: List has been deleted" );
-#endif
- return 0;
- }
- return list->lastNode ? (curNode = list->lastNode)->getData() : 0;
-}
-
-
-/*!
- \fn TQPtrCollection::Item TQGListIterator::get() const
- \internal
- Returns the iterator item.
-*/
-
-
-/*!
- \internal
- Moves to the next item (postfix).
-*/
-
-TQPtrCollection::Item TQGListIterator::operator()()
-{
- if ( !curNode )
- return 0;
- TQPtrCollection::Item d = curNode->getData();
- curNode = curNode->next;
- return d;
-}
-
-/*!
- \internal
- Moves to the next item (prefix).
-*/
-
-TQPtrCollection::Item TQGListIterator::operator++()
-{
- if ( !curNode )
- return 0;
- curNode = curNode->next;
- return curNode ? curNode->getData() : 0;
-}
-
-/*!
- \internal
- Moves \a jumps positions forward.
-*/
-
-TQPtrCollection::Item TQGListIterator::operator+=( uint jumps )
-{
- while ( curNode && jumps-- )
- curNode = curNode->next;
- return curNode ? curNode->getData() : 0;
-}
-
-/*!
- \internal
- Moves to the previous item (prefix).
-*/
-
-TQPtrCollection::Item TQGListIterator::operator--()
-{
- if ( !curNode )
- return 0;
- curNode = curNode->prev;
- return curNode ? curNode->getData() : 0;
-}
-
-/*!
- \internal
- Moves \a jumps positions backward.
-*/
-
-TQPtrCollection::Item TQGListIterator::operator-=( uint jumps )
-{
- while ( curNode && jumps-- )
- curNode = curNode->prev;
- return curNode ? curNode->getData() : 0;
-}