⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qvaluelist.h

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.10平台上编译为嵌入式图形界面操作系统。
💻 H
📖 第 1 页 / 共 2 页
字号:
    }    return -1;}template <class T>Q_INLINE_TEMPLATES uint QValueListPrivate<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>Q_INLINE_TEMPLATES uint QValueListPrivate<T>::remove( const T& 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>Q_INLINE_TEMPLATES Q_TYPENAME QValueListPrivate<T>::NodePtr QValueListPrivate<T>::at( size_type i ) const{    Q_ASSERT( i <= nodes );    NodePtr p = node->next;    for( size_type x = 0; x < i; ++x )	p = p->next;    return p;}template <class T>Q_INLINE_TEMPLATES void QValueListPrivate<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 QT_CHECK_RANGE# if !defined( QT_NO_DEBUG ) && defined( QT_CHECK_VALUELIST_RANGE )#  define QT_CHECK_INVALID_LIST_ELEMENT if ( empty() ) qWarning( "QValueList: Warning invalid element" )#  define QT_CHECK_INVALID_LIST_ELEMENT_FATAL Q_ASSERT( !empty() );# else#  define QT_CHECK_INVALID_LIST_ELEMENT#  define QT_CHECK_INVALID_LIST_ELEMENT_FATAL# endif#else# define QT_CHECK_INVALID_LIST_ELEMENT# define QT_CHECK_INVALID_LIST_ELEMENT_FATAL#endiftemplate <class T> class QDeepCopy;template <class T>class QValueList{public:    /**     * Typedefs     */    typedef QValueListIterator<T> iterator;    typedef QValueListConstIterator<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 QT_NO_STL    typedef ptrdiff_t  difference_type;#else    typedef int difference_type;#endif    /**     * API     */    QValueList() { sh = new QValueListPrivate<T>; }    QValueList( const QValueList<T>& l ) { sh = l.sh; sh->ref(); }#ifndef QT_NO_STL    QValueList( const std::list<T>& l )    {	sh = new QValueListPrivate<T>;	qCopy( l.begin(), l.end(), std::back_inserter( *this ) );    }#endif    ~QValueList() { sh->derefAndDelete(); }    QValueList<T>& operator= ( const QValueList<T>& l )    {	l.sh->ref();	sh->derefAndDelete();	sh = l.sh;	return *this;    }#ifndef QT_NO_STL    QValueList<T>& operator= ( const std::list<T>& l )    {	detach();	qCopy( 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(Q_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 QValueList<T>& l ) const;    bool operator!= ( const QValueList<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    QValueList<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() { QT_CHECK_INVALID_LIST_ELEMENT_FATAL; return *begin(); }    const_reference front() const { QT_CHECK_INVALID_LIST_ELEMENT_FATAL; return *begin(); }    reference back() { QT_CHECK_INVALID_LIST_ELEMENT_FATAL; return *(--end()); }    const_reference back() const { QT_CHECK_INVALID_LIST_ELEMENT_FATAL; return *(--end()); }    void pop_front() { QT_CHECK_INVALID_LIST_ELEMENT; erase( begin() ); }    void pop_back() {	QT_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 QValueList to classes that provide    // an operator<    /*    void sort()    {	qHeapSort( *this );    }    */    QValueList<T> operator+ ( const QValueList<T>& l ) const;    QValueList<T>& operator+= ( const QValueList<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() { QT_CHECK_INVALID_LIST_ELEMENT; detach(); return sh->node->next->data; }    const T& first() const { QT_CHECK_INVALID_LIST_ELEMENT; return sh->node->next->data; }    T& last() { QT_CHECK_INVALID_LIST_ELEMENT; detach(); return sh->node->prev->data; }    const T& last() const { QT_CHECK_INVALID_LIST_ELEMENT; return sh->node->prev->data; }    T& operator[] ( size_type i ) { QT_CHECK_INVALID_LIST_ELEMENT; detach(); return sh->at(i)->data; }    const T& operator[] ( size_type i ) const { QT_CHECK_INVALID_LIST_ELEMENT; return sh->at(i)->data; }    iterator at( size_type i ) { QT_CHECK_INVALID_LIST_ELEMENT; detach(); return iterator( sh->at(i) ); }    const_iterator at( size_type i ) const { QT_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; }    QValueList<T>& operator+= ( const T& x )    {	append( x );	return *this;    }    typedef QValueListIterator<T> Iterator;    typedef QValueListConstIterator<T> ConstIterator;    typedef T ValueType;protected:    /**     * Helpers     */    void detach() { if ( sh->count > 1 ) detachInternal(); }    /**     * Variables     */    QValueListPrivate<T>* sh;private:    void detachInternal();    friend class QDeepCopy< QValueList<T> >;};template <class T>Q_INLINE_TEMPLATES bool QValueList<T>::operator== ( const QValueList<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>Q_INLINE_TEMPLATES void QValueList<T>::clear(){    if ( sh->count == 1 ) sh->clear(); else { sh->deref(); sh = new QValueListPrivate<T>; }}template <class T>Q_INLINE_TEMPLATES Q_TYPENAME QValueList<T>::iterator QValueList<T>::erase( Q_TYPENAME QValueList<T>::iterator first, Q_TYPENAME QValueList<T>::iterator last ){    while ( first != last )	erase( first++ );    return last;}template <class T>Q_INLINE_TEMPLATES void QValueList<T>::insert( Q_TYPENAME QValueList<T>::iterator pos, size_type n, const T& x ){    for ( ; n > 0; --n )	insert( pos, x );}template <class T>Q_INLINE_TEMPLATES QValueList<T> QValueList<T>::operator+ ( const QValueList<T>& l ) const{    QValueList<T> l2( *this );    for( const_iterator it = l.begin(); it != l.end(); ++it )	l2.append( *it );    return l2;}template <class T>Q_INLINE_TEMPLATES QValueList<T>& QValueList<T>::operator+= ( const QValueList<T>& l ){    for( const_iterator it = l.begin(); it != l.end(); ++it )	append( *it );    return *this;}template <class T>Q_INLINE_TEMPLATES void QValueList<T>::detachInternal(){    sh->deref(); sh = new QValueListPrivate<T>( *sh );}#ifndef QT_NO_DATASTREAMtemplate <class T>Q_INLINE_TEMPLATES QDataStream& operator>>( QDataStream& s, QValueList<T>& l ){    l.clear();    Q_UINT32 c;    s >> c;    for( Q_UINT32 i = 0; i < c; ++i )    {	T t;	s >> t;	l.append( t );	if ( s.atEnd() )	    break;    }    return s;}template <class T>Q_INLINE_TEMPLATES QDataStream& operator<<( QDataStream& s, const QValueList<T>& l ){    s << (Q_UINT32)l.size();    QValueListConstIterator<T> it = l.begin();    for( ; it != l.end(); ++it )	s << *it;    return s;}#endif // QT_NO_DATASTREAM#define Q_DEFINED_QVALUELIST#define Q_DEFINED_QVALUELIST#include "qwinexport.h"#endif // QVALUELIST_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -