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

📄 qtl.h

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.10平台上编译为嵌入式图形界面操作系统。
💻 H
字号:
/************************************************************************ Copyright (C) 2000-2005 Trolltech AS.  All rights reserved.**** This file is part of the Qtopia Environment.** ** This program is free software; you can redistribute it and/or modify it** under the terms of the GNU General Public License as published by the** Free Software Foundation; either version 2 of the License, or (at your** option) any later version.** ** A copy of the GNU GPL license version 2 is included in this package as ** LICENSE.GPL.**** This program is distributed in the hope that it will be useful, but** WITHOUT ANY WARRANTY; without even the implied warranty of** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ** See the GNU General Public License for more details.**** In addition, as a special exception Trolltech gives permission to link** the code of this program with Qtopia applications copyrighted, developed** and distributed by Trolltech under the terms of the Qtopia Personal Use** License Agreement. You must comply with the GNU General Public License** in all respects for all of the code used other than the applications** licensed under the Qtopia Personal Use License Agreement. If you modify** this file, you may extend this exception to your version of the file,** but you are not obligated to do so. If you do not wish to do so, delete** this exception statement from your version.** ** See http://www.trolltech.com/gpl/ for GPL licensing information.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.************************************************************************/#ifndef QTL_H#define QTL_H#ifndef QT_H#include "qglobal.h"#include "qtextstream.h"#include "qstring.h"#endif // QT_H#ifndef QT_NO_TEXTSTREAMtemplate <class T>class QTextOStreamIterator{protected:    QTextOStream& stream;    QString separator;public:    QTextOStreamIterator( QTextOStream& s) : stream( s ) {}    QTextOStreamIterator( QTextOStream& s, const QString& sep )	: stream( s ), separator( sep )  {}    QTextOStreamIterator<T>& operator= ( const T& x ) {	stream << x;	if ( !separator.isEmpty() )	    stream << separator;	return *this;    }    QTextOStreamIterator<T>& operator*() { return *this; }    QTextOStreamIterator<T>& operator++() { return *this; }    QTextOStreamIterator<T>& operator++(int) { return *this; }};#endif //QT_NO_TEXTSTREAMtemplate <class InputIterator, class OutputIterator>inline OutputIterator qCopy( InputIterator _begin, InputIterator _end,			     OutputIterator _dest ){    while( _begin != _end )	*_dest++ = *_begin++;    return _dest;}template <class BiIterator, class BiOutputIterator>inline BiOutputIterator qCopyBackward( BiIterator _begin, BiIterator _end,				       BiOutputIterator _dest ){    while ( _begin != _end )	*--_dest = *--_end;    return _dest;}template <class InputIterator1, class InputIterator2>inline bool qEqual( InputIterator1 first1, InputIterator1 last1, InputIterator2 first2 ){    // ### compare using !(*first1 == *first2) in Qt 4.0    for ( ; first1 != last1; ++first1, ++first2 )	if ( *first1 != *first2 )	    return FALSE;    return TRUE;}template <class ForwardIterator, class T>inline void qFill( ForwardIterator first, ForwardIterator last, const T& val ){    for ( ; first != last; ++first )	*first = val;}#if 0template <class BiIterator, class OutputIterator>inline OutputIterator qReverseCopy( BiIterator _begin, BiIterator _end,				    OutputIterator _dest ){    while ( _begin != _end ) {	--_end;	*_dest = *_end;	++_dest;    }    return _dest;}#endiftemplate <class InputIterator, class T>inline InputIterator qFind( InputIterator first, InputIterator last,			    const T& val ){    while ( first != last && *first != val )	++first;    return first;}template <class InputIterator, class T, class Size>inline void qCount( InputIterator first, InputIterator last, const T& value,		    Size& n ){    for ( ; first != last; ++first )	if ( *first == value )	    ++n;}template <class T>inline void qSwap( T& _value1, T& _value2 ){    T tmp = _value1;    _value1 = _value2;    _value2 = tmp;}template <class InputIterator>Q_INLINE_TEMPLATES void qBubbleSort( InputIterator b, InputIterator e ){    // Goto last element;    InputIterator last = e;    --last;    // only one element or no elements ?    if ( last == b )	return;    // So we have at least two elements in here    while( b != last ) {	bool swapped = FALSE;	InputIterator swap_pos = b;	InputIterator x = e;	InputIterator y = x;	y--;	do {	    --x;	    --y;	    if ( *x < *y ) {		swapped = TRUE;		qSwap( *x, *y );		swap_pos = y;	    }	} while( y != b );	if ( !swapped )	    return;	b = swap_pos;	b++;    }}template <class Container>inline void qBubbleSort( Container &c ){  qBubbleSort( c.begin(), c.end() );}template <class Value>Q_INLINE_TEMPLATES void qHeapSortPushDown( Value* heap, int first, int last ){    int r = first;    while ( r <= last / 2 ) {	if ( last == 2 * r ) {	    // node r has only one child	    if ( heap[2 * r] < heap[r] )		qSwap( heap[r], heap[2 * r] );	    r = last;	} else {	    // node r has two children	    if ( heap[2 * r] < heap[r] && !(heap[2 * r + 1] < heap[2 * r]) ) {		// swap with left child		qSwap( heap[r], heap[2 * r] );		r *= 2;	    } else if ( heap[2 * r + 1] < heap[r]			&& heap[2 * r + 1] < heap[2 * r] ) {		// swap with right child		qSwap( heap[r], heap[2 * r + 1] );		r = 2 * r + 1;	    } else {		r = last;	    }	}    }}template <class InputIterator, class Value>Q_INLINE_TEMPLATES void qHeapSortHelper( InputIterator b, InputIterator e, Value, uint n ){    // Create the heap    InputIterator insert = b;    Value* realheap = new Value[n];    // Wow, what a fake. But I want the heap to be indexed as 1...n    Value* heap = realheap - 1;    int size = 0;    for( ; insert != e; ++insert ) {	heap[++size] = *insert;	int i = size;	while( i > 1 && heap[i] < heap[i / 2] ) {	    qSwap( heap[i], heap[i / 2] );	    i /= 2;	}    }    // Now do the sorting    for( uint i = n; i > 0; i-- ) {	*b++ = heap[1];	if ( i > 1 ) {	    heap[1] = heap[i];	    qHeapSortPushDown( heap, 1, (int)i - 1 );	}    }    delete[] realheap;}template <class InputIterator>Q_INLINE_TEMPLATES void qHeapSort( InputIterator b, InputIterator e ){    // Empty ?    if ( b == e )	return;    // How many entries have to be sorted ?    InputIterator it = b;    uint n = 0;    while ( it != e ) {	++n;	++it;    }    // The second last parameter is a hack to retrieve the value type    // Do the real sorting here    qHeapSortHelper( b, e, *b, n );}template <class Container>Q_INLINE_TEMPLATES void qHeapSort( Container &c ){    if ( c.begin() == c.end() )	return;    // The second last parameter is a hack to retrieve the value type    // Do the real sorting here    qHeapSortHelper( c.begin(), c.end(), *(c.begin()), (uint)c.count() );}template <class Container>class QBackInsertIterator{public:    Q_EXPLICIT QBackInsertIterator( Container &c )	: container( &c )    {    }    QBackInsertIterator<Container>&    operator=( const Q_TYPENAME Container::value_type &value )    {	container->push_back( value );	return *this;    }    QBackInsertIterator<Container>& operator*()    {	return *this;    }    QBackInsertIterator<Container>& operator++()    {	return *this;    }    QBackInsertIterator<Container>& operator++(int)    {	return *this;    }protected:    Container *container;};template <class Container>inline QBackInsertIterator<Container> qBackInserter( Container &c ){    return QBackInsertIterator<Container>( c );}#endif

⌨️ 快捷键说明

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