Source Code (Use browser search to find items of interest.)
Class Index
qt'QValueListPrivate (./qt-2.1.0/src/tools/qvaluelist.h:159)
class Q_EXPORT QValueListPrivate : public QShared
{
public:
/**
* Typedefs
*/
typedef QValueListIterator<T> Iterator;
typedef QValueListConstIterator<T> ConstIterator;
typedef QValueListNode<T> Node;
typedef QValueListNode<T>* NodePtr;
/**
* Functions
*/
QValueListPrivate() { node = new Node; node->next = node->prev = node; nodes = 0; }
QValueListPrivate( const QValueListPrivate<T>& _p ) : QShared() {
node = new Node; node->next = node->prev = node; nodes = 0;
Iterator b( _p.node->next );
Iterator e( _p.node );
Iterator i( node );
while( b != e )
insert( i, *b++ );
}
void derefAndDelete() // ### hack to get around hp-cc brain damage
{
if ( deref() )
delete this;
}
#if defined(Q_TEMPLATEDLL)
// Workaround MS bug in memory de/allocation in DLL vs. EXE
virtual
#endif
~QValueListPrivate() {
NodePtr p = node->next;
while( p != node ) {
NodePtr x = p->next;
delete p;
p = x;
}
delete node;
}
Iterator insert( Iterator it, const T& x ) {
NodePtr p = new Node( x );
p->next = it.node;
p->prev = it.node->prev;
it.node->prev->next = p;
it.node->prev = p;
nodes++;
return p;
}
Iterator remove( Iterator it ) {
ASSERT ( it.node != node );
NodePtr next = it.node->next;
NodePtr prev = it.node->prev;
prev->next = next;
next->prev = prev;
delete it.node;
nodes--;
return Iterator( next );
}
NodePtr find( NodePtr start, const T& x ) const {
ConstIterator first( start );
ConstIterator last( node );
while( first != last) {
if ( *first == x )
return first.node;
++first;
}
return last.node;
}
int findIndex( NodePtr start, const T& x ) const {
ConstIterator first( start );
ConstIterator last( node );
int pos = 0;
while( first != last) {
if ( *first == x )
return pos;
++first;
++pos;
}
return -1;
}
uint contains( const T& x ) const {
uint result = 0;
Iterator first = Iterator( node->next );
Iterator last = Iterator( node );
while( first != last) {
if ( *first == x )
++result;
++first;
}
return result;
}
void remove( const T& x ) {
Iterator first = Iterator( node->next );
Iterator last = Iterator( node );
while( first != last) {
if ( *first == x )
first = remove( first );
else
++first;
}
}
NodePtr at( uint i ) const {
ASSERT( i <= nodes );
NodePtr p = node->next;
for( uint x = 0; x < i; ++x )
p = p->next;
return p;
}
void clear() {
nodes = 0;
NodePtr p = node->next;
while( p != node ) {
NodePtr next = p->next;
delete p;
p = next;
}
node->next = node->prev = node;
}
NodePtr node;
uint nodes;
};
template <class T>