Chameleon

Chameleon Svn Source Tree

Root/branches/xZenu/src/util/doxygen/qtools/qglist.h

Source at commit 1322 created 12 years 8 months ago.
By meklort, Add doxygen to utils folder
1/****************************************************************************
2**
3**
4** Definition of QGList and QGListIterator classes
5**
6** Created : 920624
7**
8** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
9**
10** This file is part of the tools module of the Qt GUI Toolkit.
11**
12** This file may be distributed under the terms of the Q Public License
13** as defined by Trolltech AS of Norway and appearing in the file
14** LICENSE.QPL included in the packaging of this file.
15**
16** This file may be distributed and/or modified under the terms of the
17** GNU General Public License version 2 as published by the Free Software
18** Foundation and appearing in the file LICENSE.GPL included in the
19** packaging of this file.
20**
21** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
22** licenses may use this file in accordance with the Qt Commercial License
23** Agreement provided with the Software.
24**
25** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
26** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
27**
28** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
29** information about Qt Commercial License Agreements.
30** See http://www.trolltech.com/qpl/ for QPL licensing information.
31** See http://www.trolltech.com/gpl/ for GPL licensing information.
32**
33** Contact info@trolltech.com if any conditions of this licensing are
34** not clear to you.
35**
36**********************************************************************/
37
38#ifndef QGLIST_H
39#define QGLIST_H
40
41#ifndef QT_H
42#include "qcollection.h"
43#endif // QT_H
44
45
46/*****************************************************************************
47 QLNode class (internal doubly linked list node)
48 *****************************************************************************/
49
50class Q_EXPORT QLNode
51{
52friend class QGList;
53friend class QGListIterator;
54public:
55 QCollection::Item getData(){ return data; }
56private:
57 QCollection::Item data;
58 QLNode *prev;
59 QLNode *next;
60 QLNode( QCollection::Item d ) { data = d; }
61};
62
63
64/*****************************************************************************
65 QGList class
66 *****************************************************************************/
67
68class Q_EXPORT QGList : public QCollection// doubly linked generic list
69{
70friend class QGListIterator;
71friend class QGVector;// needed by QGVector::toList
72public:
73 uint count() const;// return number of nodes
74
75#ifndef QT_NO_DATASTREAM
76 QDataStream &read( QDataStream & );// read list from stream
77 QDataStream &write( QDataStream & ) const;// write list to stream
78#endif
79protected:
80 QGList();// create empty list
81 QGList( const QGList & );// make copy of other list
82 virtual ~QGList();
83
84 QGList &operator=( const QGList & );// assign from other list
85 bool operator==( const QGList& ) const;
86
87 void inSort( QCollection::Item );// add item sorted in list
88 void append( QCollection::Item );// add item at end of list
89 bool insertAt( uint index, QCollection::Item ); // add item at i'th position
90 void relinkNode( QLNode * );// relink as first item
91 bool removeNode( QLNode * );// remove node
92 bool remove( QCollection::Item = 0 );// remove item (0=current)
93 bool removeRef( QCollection::Item = 0 );// remove item (0=current)
94 bool removeFirst();// remove first item
95 bool removeLast();// remove last item
96 bool removeAt( uint index );// remove item at i'th position
97 QCollection::Item takeNode( QLNode * );// take out node
98 QCollection::Item take();// take out current item
99 QCollection::Item takeAt( uint index );// take out item at i'th pos
100 QCollection::Item takeFirst();// take out first item
101 QCollection::Item takeLast();// take out last item
102
103 void sort(); // sort all items;
104 void clear();// remove all items
105
106 int findRef( QCollection::Item, bool = TRUE ); // find exact item in list
107 int find( QCollection::Item, bool = TRUE ); // find equal item in list
108
109 uint containsRef( QCollection::Item ) const; // get number of exact matches
110 uint contains( QCollection::Item )const;// get number of equal matches
111
112 QCollection::Item at( uint index );// access item at i'th pos
113 int at() const;// get current index
114 QLNode *currentNode() const;// get current node
115
116 QCollection::Item get() const;// get current item
117
118 QCollection::Item cfirst() const;// get ptr to first list item
119 QCollection::Item clast() const;// get ptr to last list item
120 QCollection::Item first();// set first item in list curr
121 QCollection::Item last();// set last item in list curr
122 QCollection::Item next();// set next item in list curr
123 QCollection::Item prev();// set prev item in list curr
124
125 void toVector( QGVector * ) const;// put items in vector
126
127 virtual int compareItems( QCollection::Item, QCollection::Item );
128
129#ifndef QT_NO_DATASTREAM
130 virtual QDataStream &read( QDataStream &, QCollection::Item & );
131 virtual QDataStream &write( QDataStream &, QCollection::Item ) const;
132#endif
133private:
134 void prepend( QCollection::Item ); // add item at start of list
135
136 void heapSortPushDown( QCollection::Item* heap, int first, int last );
137
138 QLNode *firstNode;// first node
139 QLNode *lastNode;// last node
140 QLNode *curNode;// current node
141 int curIndex;// current index
142 uint numNodes;// number of nodes
143 QGList *iterators;// list of iterators
144
145 QLNode *locate( uint );// get node at i'th pos
146 QLNode *unlink();// unlink node
147};
148
149
150inline uint QGList::count() const
151{
152 return numNodes;
153}
154
155inline bool QGList::removeFirst()
156{
157 first();
158 return remove();
159}
160
161inline bool QGList::removeLast()
162{
163 last();
164 return remove();
165}
166
167inline int QGList::at() const
168{
169 return curIndex;
170}
171
172inline QCollection::Item QGList::at( uint index )
173{
174 QLNode *n = locate( index );
175 return n ? n->data : 0;
176}
177
178inline QLNode *QGList::currentNode() const
179{
180 return curNode;
181}
182
183inline QCollection::Item QGList::get() const
184{
185 return curNode ? curNode->data : 0;
186}
187
188inline QCollection::Item QGList::cfirst() const
189{
190 return firstNode ? firstNode->data : 0;
191}
192
193inline QCollection::Item QGList::clast() const
194{
195 return lastNode ? lastNode->data : 0;
196}
197
198
199/*****************************************************************************
200 QGList stream functions
201 *****************************************************************************/
202
203#ifndef QT_NO_DATASTREAM
204Q_EXPORT QDataStream &operator>>( QDataStream &, QGList & );
205Q_EXPORT QDataStream &operator<<( QDataStream &, const QGList & );
206#endif
207
208/*****************************************************************************
209 QGListIterator class
210 *****************************************************************************/
211
212class Q_EXPORT QGListIterator// QGList iterator
213{
214friend class QGList;
215protected:
216 QGListIterator( const QGList & );
217 QGListIterator( const QGListIterator & );
218 QGListIterator &operator=( const QGListIterator & );
219 ~QGListIterator();
220
221 bool atFirst() const;// test if at first item
222 bool atLast() const;// test if at last item
223 QCollection::Item toFirst();// move to first item
224 QCollection::Item toLast();// move to last item
225
226 QCollection::Item get() const;// get current item
227 QCollection::Item operator()();// get current and move to next
228 QCollection::Item operator++();// move to next item (prefix)
229 QCollection::Item operator+=(uint);// move n positions forward
230 QCollection::Item operator--();// move to prev item (prefix)
231 QCollection::Item operator-=(uint);// move n positions backward
232
233protected:
234 QGList *list;// reference to list
235
236private:
237 QLNode *curNode;// current node in list
238};
239
240
241inline bool QGListIterator::atFirst() const
242{
243 return curNode == list->firstNode;
244}
245
246inline bool QGListIterator::atLast() const
247{
248 return curNode == list->lastNode;
249}
250
251inline QCollection::Item QGListIterator::get() const
252{
253 return curNode ? curNode->data : 0;
254}
255
256
257#endif// QGLIST_H
258

Archive Download this file

Revision: 1322