diff options
Diffstat (limited to 'tqtinterface/qt4/src/tools/tqvaluelist.h')
-rw-r--r-- | tqtinterface/qt4/src/tools/tqvaluelist.h | 672 |
1 files changed, 0 insertions, 672 deletions
diff --git a/tqtinterface/qt4/src/tools/tqvaluelist.h b/tqtinterface/qt4/src/tools/tqvaluelist.h deleted file mode 100644 index 0928f38..0000000 --- a/tqtinterface/qt4/src/tools/tqvaluelist.h +++ /dev/null @@ -1,672 +0,0 @@ -/**************************************************************************** -** -** Definition of TQValueList class -** -** Created : 990406 -** -** 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 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.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. -** -**********************************************************************/ - -#ifndef TQVALUELIST_H -#define TQVALUELIST_H - -#ifndef TQT_H -#include "tqtl.h" -#include "tqshared.h" -#include "tqdatastream.h" -#endif // TQT_H - -#ifndef TQT_NO_STL -#include <iterator> -#include <list> -#include <cstddef> -#endif - -//#define TQT_CHECK_VALUELIST_RANGE - -#if defined(TQ_CC_MSVC) -#pragma warning(disable:4284) // "return type for operator -> is not a UDT" -#endif - -template <class T> -class TQValueListNode -{ -public: - TQValueListNode( const T& t ) : data( t ) { } - TQValueListNode() { } -#if defined(TQ_TEMPLATEDLL) - // Workaround MS bug in memory de/allocation in DLL vs. EXE - virtual ~TQValueListNode() { } -#endif - - TQValueListNode<T>* next; - TQValueListNode<T>* prev; - T data; -}; - -template<class T> -class TQValueListIterator -{ - public: - /** - * Typedefs - */ - typedef TQValueListNode<T>* NodePtr; -#ifndef TQT_NO_STL - typedef std::bidirectional_iterator_tag iterator_category; -#endif - typedef T value_type; - typedef size_t size_type; -#ifndef TQT_NO_STL - typedef ptrdiff_t difference_type; -#else - typedef int difference_type; -#endif - typedef T* pointer; - typedef T& reference; - - /** - * Variables - */ - NodePtr node; - - /** - * Functions - */ - TQValueListIterator() : node( 0 ) {} - TQValueListIterator( NodePtr p ) : node( p ) {} - TQValueListIterator( const TQValueListIterator<T>& it ) : node( it.node ) {} - - bool operator==( const TQValueListIterator<T>& it ) const { return node == it.node; } - bool operator!=( const TQValueListIterator<T>& it ) const { return node != it.node; } - const T& operator*() const { return node->data; } - T& operator*() { return node->data; } - // UDT for T = x* - // T* operator->() const { return &node->data; } - - TQValueListIterator<T>& operator++() { - node = node->next; - return *this; - } - - TQValueListIterator<T> operator++(int) { - TQValueListIterator<T> tmp = *this; - node = node->next; - return tmp; - } - - TQValueListIterator<T>& operator--() { - node = node->prev; - return *this; - } - - TQValueListIterator<T> operator--(int) { - TQValueListIterator<T> tmp = *this; - node = node->prev; - return tmp; - } - - TQValueListIterator<T>& operator+=( int j ) { - while ( j-- ) - node = node->next; - return *this; - } - - TQValueListIterator<T>& operator-=( int j ) { - while ( j-- ) - node = node->prev; - return *this; - } - -}; - -template<class T> -class TQValueListConstIterator -{ - public: - /** - * Typedefs - */ - typedef TQValueListNode<T>* NodePtr; -#ifndef TQT_NO_STL - typedef std::bidirectional_iterator_tag iterator_category; -#endif - typedef T value_type; - typedef size_t size_type; -#ifndef TQT_NO_STL - typedef ptrdiff_t difference_type; -#else - typedef int difference_type; -#endif - typedef const T* pointer; - typedef const T& reference; - - /** - * Variables - */ - NodePtr node; - - /** - * Functions - */ - TQValueListConstIterator() : node( 0 ) {} - TQValueListConstIterator( NodePtr p ) : node( p ) {} - TQValueListConstIterator( const TQValueListConstIterator<T>& it ) : node( it.node ) {} - TQValueListConstIterator( const TQValueListIterator<T>& it ) : node( it.node ) {} - - bool operator==( const TQValueListConstIterator<T>& it ) const { return node == it.node; } - bool operator!=( const TQValueListConstIterator<T>& it ) const { return node != it.node; } - const T& operator*() const { return node->data; } - // UDT for T = x* - // const T* operator->() const { return &node->data; } - - TQValueListConstIterator<T>& operator++() { - node = node->next; - return *this; - } - - TQValueListConstIterator<T> operator++(int) { - TQValueListConstIterator<T> tmp = *this; - node = node->next; - return tmp; - } - - TQValueListConstIterator<T>& operator--() { - node = node->prev; - return *this; - } - - TQValueListConstIterator<T> operator--(int) { - TQValueListConstIterator<T> tmp = *this; - node = node->prev; - return tmp; - } -}; - -template <class T> -class TQValueListPrivate : public TQShared -{ -public: - /** - * Typedefs - */ - typedef TQValueListIterator<T> Iterator; - typedef TQValueListConstIterator<T> ConstIterator; - typedef TQValueListNode<T> Node; - typedef TQValueListNode<T>* NodePtr; - typedef size_t size_type; - - /** - * Functions - */ - TQValueListPrivate(); - TQValueListPrivate( const TQValueListPrivate<T>& _p ); - - void derefAndDelete() // ### hack to get around hp-cc brain damage - { - if ( deref() ) - delete this; - } - -#if defined(TQ_TEMPLATEDLL) - // Workaround MS bug in memory de/allocation in DLL vs. EXE - virtual -#endif - ~TQValueListPrivate(); - - Iterator insert( Iterator it, const T& x ); - Iterator remove( Iterator it ); - NodePtr find( NodePtr start, const T& x ) const; - int findIndex( NodePtr start, const T& x ) const; - uint contains( const T& x ) const; - uint remove( const T& x ); - NodePtr at( size_type i ) const; - void clear(); - - NodePtr node; - size_type nodes; -}; - -template <class T> -TQ_INLINE_TEMPLATES TQValueListPrivate<T>::TQValueListPrivate() -{ - node = new Node; node->next = node->prev = node; nodes = 0; -} - -template <class T> -TQ_INLINE_TEMPLATES TQValueListPrivate<T>::TQValueListPrivate( const TQValueListPrivate<T>& _p ) - : TQShared() -{ - 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++ ); -} - -template <class T> -TQ_INLINE_TEMPLATES TQValueListPrivate<T>::~TQValueListPrivate() { - NodePtr p = node->next; - while( p != node ) { - NodePtr x = p->next; - delete p; - p = x; - } - delete node; -} - -template <class T> -TQ_INLINE_TEMPLATES TQ_TYPENAME TQValueListPrivate<T>::Iterator TQValueListPrivate<T>::insert( TQ_TYPENAME TQValueListPrivate<T>::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; -} - -template <class T> -TQ_INLINE_TEMPLATES TQ_TYPENAME TQValueListPrivate<T>::Iterator TQValueListPrivate<T>::remove( TQ_TYPENAME TQValueListPrivate<T>::Iterator it ) -{ - TQ_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 ); -} - -template <class T> -TQ_INLINE_TEMPLATES TQ_TYPENAME TQValueListPrivate<T>::NodePtr TQValueListPrivate<T>::find( TQ_TYPENAME TQValueListPrivate<T>::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; -} - -template <class T> -TQ_INLINE_TEMPLATES int TQValueListPrivate<T>::findIndex( TQ_TYPENAME TQValueListPrivate<T>::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; -} - -template <class T> -TQ_INLINE_TEMPLATES uint TQValueListPrivate<T>::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; -} - -template <class T> -TQ_INLINE_TEMPLATES uint TQValueListPrivate<T>::remove( const T& _x ) -{ - const T x = _x; - uint result = 0; - Iterator first = Iterator( node->next ); - Iterator last = Iterator( node ); - while( first != last) { - if ( *first == x ) { - first = remove( first ); - ++result; - } else - ++first; - } - return result; -} - -template <class T> -TQ_INLINE_TEMPLATES TQ_TYPENAME TQValueListPrivate<T>::NodePtr TQValueListPrivate<T>::at( size_type i ) const -{ - TQ_ASSERT( i <= nodes ); - NodePtr p = node->next; - for( size_type x = 0; x < i; ++x ) - p = p->next; - return p; -} - -template <class T> -TQ_INLINE_TEMPLATES void TQValueListPrivate<T>::clear() -{ - nodes = 0; - NodePtr p = node->next; - while( p != node ) { - NodePtr next = p->next; - delete p; - p = next; - } - node->next = node->prev = node; -} - -#ifdef TQT_CHECK_RANGE -# if !defined( TQT_NO_DEBUG ) && defined( TQT_CHECK_VALUELIST_RANGE ) -# define TQT_CHECK_INVALID_LIST_ELEMENT if ( empty() ) qWarning( "TQValueList: Warning invalid element" ) -# define TQT_CHECK_INVALID_LIST_ELEMENT_FATAL TQ_ASSERT( !empty() ); -# else -# define TQT_CHECK_INVALID_LIST_ELEMENT -# define TQT_CHECK_INVALID_LIST_ELEMENT_FATAL -# endif -#else -# define TQT_CHECK_INVALID_LIST_ELEMENT -# define TQT_CHECK_INVALID_LIST_ELEMENT_FATAL -#endif - -template <class T> class TQDeepCopy; - -template <class T> -class TQValueList -{ -public: - /** - * Typedefs - */ - typedef TQValueListIterator<T> iterator; - typedef TQValueListConstIterator<T> const_iterator; - typedef T value_type; - typedef value_type* pointer; - typedef const value_type* const_pointer; - typedef value_type& reference; - typedef const value_type& const_reference; - typedef size_t size_type; -#ifndef TQT_NO_STL - typedef ptrdiff_t difference_type; -#else - typedef int difference_type; -#endif - - /** - * API - */ - TQValueList() { sh = new TQValueListPrivate<T>; } - TQValueList( const TQValueList<T>& l ) { sh = l.sh; sh->ref(); } -#ifndef TQT_NO_STL - TQValueList( const std::list<T>& l ) - { - sh = new TQValueListPrivate<T>; - tqCopy( l.begin(), l.end(), std::back_inserter( *this ) ); - } -#endif - ~TQValueList() { sh->derefAndDelete(); } - - TQValueList<T>& operator= ( const TQValueList<T>& l ) - { - l.sh->ref(); - sh->derefAndDelete(); - sh = l.sh; - return *this; - } -#ifndef TQT_NO_STL - TQValueList<T>& operator= ( const std::list<T>& l ) - { - detach(); - tqCopy( l.begin(), l.end(), std::back_inserter( *this ) ); - return *this; - } - bool operator== ( const std::list<T>& l ) const - { - if ( size() != l.size() ) - return FALSE; - const_iterator it2 = begin(); -#if !defined(TQ_CC_MIPS) - typename -#endif - std::list<T>::const_iterator it = l.begin(); - for ( ; it2 != end(); ++it2, ++it ) - if ( !((*it2) == (*it)) ) - return FALSE; - return TRUE; - } -#endif - bool operator== ( const TQValueList<T>& l ) const; - bool operator!= ( const TQValueList<T>& l ) const { return !( *this == l ); } - iterator begin() { detach(); return iterator( sh->node->next ); } - const_iterator begin() const { return const_iterator( sh->node->next ); } - const_iterator constBegin() const { return const_iterator( sh->node->next ); } - iterator end() { detach(); return iterator( sh->node ); } - const_iterator end() const { return const_iterator( sh->node ); } - const_iterator constEnd() const { return const_iterator( sh->node ); } - iterator insert( iterator it, const T& x ) { detach(); return sh->insert( it, x ); } - uint remove( const T& x ) { detach(); return sh->remove( x ); } - void clear(); - - // ### 4.0: move out of class - TQValueList<T>& operator<< ( const T& x ) - { - append( x ); - return *this; - } - - size_type size() const { return sh->nodes; } - bool empty() const { return sh->nodes == 0; } - void push_front( const T& x ) { detach(); sh->insert( begin(), x ); } - void push_back( const T& x ) { detach(); sh->insert( end(), x ); } - iterator erase( iterator pos ) { detach(); return sh->remove( pos ); } - iterator erase( iterator first, iterator last ); - reference front() { TQT_CHECK_INVALID_LIST_ELEMENT_FATAL; return *begin(); } - const_reference front() const { TQT_CHECK_INVALID_LIST_ELEMENT_FATAL; return *begin(); } - reference back() { TQT_CHECK_INVALID_LIST_ELEMENT_FATAL; return *(--end()); } - const_reference back() const { TQT_CHECK_INVALID_LIST_ELEMENT_FATAL; return *(--end()); } - void pop_front() { TQT_CHECK_INVALID_LIST_ELEMENT; erase( begin() ); } - void pop_back() { - TQT_CHECK_INVALID_LIST_ELEMENT; - iterator tmp = end(); - erase( --tmp ); - } - void insert( iterator pos, size_type n, const T& x ); - // Some compilers (incl. vc++) would instantiate this function even if - // it is not used; this would constrain TQValueList to classes that provide - // an operator< - /* - void sort() - { - qHeapSort( *this ); - } - */ - - TQValueList<T> operator+ ( const TQValueList<T>& l ) const; - TQValueList<T>& operator+= ( const TQValueList<T>& l ); - - iterator fromLast() { detach(); return iterator( sh->node->prev ); } - const_iterator fromLast() const { return const_iterator( sh->node->prev ); } - - bool isEmpty() const { return ( sh->nodes == 0 ); } - - iterator append( const T& x ) { detach(); return sh->insert( end(), x ); } - iterator prepend( const T& x ) { detach(); return sh->insert( begin(), x ); } - - iterator remove( iterator it ) { detach(); return sh->remove( it ); } - - T& first() { TQT_CHECK_INVALID_LIST_ELEMENT; detach(); return sh->node->next->data; } - const T& first() const { TQT_CHECK_INVALID_LIST_ELEMENT; return sh->node->next->data; } - T& last() { TQT_CHECK_INVALID_LIST_ELEMENT; detach(); return sh->node->prev->data; } - const T& last() const { TQT_CHECK_INVALID_LIST_ELEMENT; return sh->node->prev->data; } - - T& operator[] ( size_type i ) { TQT_CHECK_INVALID_LIST_ELEMENT; detach(); return sh->at(i)->data; } - const T& operator[] ( size_type i ) const { TQT_CHECK_INVALID_LIST_ELEMENT; return sh->at(i)->data; } - iterator at( size_type i ) { TQT_CHECK_INVALID_LIST_ELEMENT; detach(); return iterator( sh->at(i) ); } - const_iterator at( size_type i ) const { TQT_CHECK_INVALID_LIST_ELEMENT; return const_iterator( sh->at(i) ); } - iterator tqat( size_type i ) { TQT_CHECK_INVALID_LIST_ELEMENT; detach(); return iterator( sh->at(i) ); } - const_iterator tqat( size_type i ) const { TQT_CHECK_INVALID_LIST_ELEMENT; return const_iterator( sh->at(i) ); } - iterator find ( const T& x ) { detach(); return iterator( sh->find( sh->node->next, x) ); } - const_iterator find ( const T& x ) const { return const_iterator( sh->find( sh->node->next, x) ); } - iterator find ( iterator it, const T& x ) { detach(); return iterator( sh->find( it.node, x ) ); } - const_iterator find ( const_iterator it, const T& x ) const { return const_iterator( sh->find( it.node, x ) ); } - int findIndex( const T& x ) const { return sh->findIndex( sh->node->next, x) ; } - size_type contains( const T& x ) const { return sh->contains( x ); } - - size_type count() const { return sh->nodes; } - - TQValueList<T>& operator+= ( const T& x ) - { - append( x ); - return *this; - } - typedef TQValueListIterator<T> Iterator; - typedef TQValueListConstIterator<T> ConstIterator; - typedef T ValueType; - -protected: - /** - * Helpers - */ - void detach() { if ( sh->count > 1 ) detachInternal(); } - - /** - * Variables - */ - TQValueListPrivate<T>* sh; - -private: - void detachInternal(); - - friend class TQDeepCopy< TQValueList<T> >; -}; - -template <class T> -TQ_INLINE_TEMPLATES bool TQValueList<T>::operator== ( const TQValueList<T>& l ) const -{ - if ( size() != l.size() ) - return FALSE; - const_iterator it2 = begin(); - const_iterator it = l.begin(); - for( ; it != l.end(); ++it, ++it2 ) - if ( !( *it == *it2 ) ) - return FALSE; - return TRUE; -} - -template <class T> -TQ_INLINE_TEMPLATES void TQValueList<T>::clear() -{ - if ( sh->count == 1 ) sh->clear(); else { sh->deref(); sh = new TQValueListPrivate<T>; } -} - -template <class T> -TQ_INLINE_TEMPLATES TQ_TYPENAME TQValueList<T>::iterator TQValueList<T>::erase( TQ_TYPENAME TQValueList<T>::iterator first, TQ_TYPENAME TQValueList<T>::iterator last ) -{ - while ( first != last ) - erase( first++ ); - return last; -} - - -template <class T> -TQ_INLINE_TEMPLATES void TQValueList<T>::insert( TQ_TYPENAME TQValueList<T>::iterator pos, size_type n, const T& x ) -{ - for ( ; n > 0; --n ) - insert( pos, x ); -} - -template <class T> -TQ_INLINE_TEMPLATES TQValueList<T> TQValueList<T>::operator+ ( const TQValueList<T>& l ) const -{ - TQValueList<T> l2( *this ); - for( const_iterator it = l.begin(); it != l.end(); ++it ) - l2.append( *it ); - return l2; -} - -template <class T> -TQ_INLINE_TEMPLATES TQValueList<T>& TQValueList<T>::operator+= ( const TQValueList<T>& l ) -{ - TQValueList<T> copy = l; - for( const_iterator it = copy.begin(); it != copy.end(); ++it ) - append( *it ); - return *this; -} - -template <class T> -TQ_INLINE_TEMPLATES void TQValueList<T>::detachInternal() -{ - sh->deref(); sh = new TQValueListPrivate<T>( *sh ); -} - -#ifndef TQT_NO_DATASTREAM -template <class T> -TQ_INLINE_TEMPLATES TQDataStream& operator>>( TQDataStream& s, TQValueList<T>& l ) -{ - l.clear(); - TQ_UINT32 c; - s >> c; - for( TQ_UINT32 i = 0; i < c; ++i ) - { - T t; - s >> t; - l.append( t ); - if ( s.atEnd() ) - break; - } - return s; -} - -template <class T> -TQ_INLINE_TEMPLATES TQDataStream& operator<<( TQDataStream& s, const TQValueList<T>& l ) -{ - s << (TQ_UINT32)l.size(); - TQValueListConstIterator<T> it = l.begin(); - for( ; it != l.end(); ++it ) - s << *it; - return s; -} -#endif // TQT_NO_DATASTREAM - -#define TQ_DEFINED_TQVALUELIST -#define TQ_DEFINED_TQVALUELIST -#include "tqwinexport.h" -#endif // TQVALUELIST_H |