19#include <QtCore/private/qglobal_p.h>
20#include <QtCore/qtaggedpointer.h>
24template<
class N, N *N::*nextMember,
typename Tag = QtPrivate::TagInfo<N>>
33 template <
typename OtherTag>
40 static inline N *
next(N *v);
42 inline Tag
tag()
const;
45 QTaggedPointer<N, Tag> _first;
50template<
class N, N *N::*nextMember>
66 inline void append(QFieldList<N, nextMember> &);
67 inline void prepend(QFieldList<N, nextMember> &);
71 template <
typename Tag>
73 template <
typename Tag>
76 static inline N *
next(N *v);
89template<
class N, N *N::*nextMember,
typename Tag>
90QForwardFieldList<N, nextMember, Tag>::QForwardFieldList()
94template<
class N, N *N::*nextMember,
typename Tag>
95N *QForwardFieldList<N, nextMember, Tag>::first()
const
100template<
class N, N *N::*nextMember,
typename Tag>
101N *QForwardFieldList<N, nextMember, Tag>::takeFirst()
103 N *value = _first.data();
105 _first = next(value);
106 value->*nextMember =
nullptr;
111template<
class N, N *N::*nextMember,
typename Tag>
112void QForwardFieldList<N, nextMember, Tag>::prepend(N *v)
114 Q_ASSERT(v->*nextMember ==
nullptr);
115 v->*nextMember = _first.data();
119template<
class N, N *N::*nextMember,
typename Tag>
120template <
typename OtherTag>
121void QForwardFieldList<N, nextMember, Tag>::copyAndClearPrepend(QForwardFieldList<N, nextMember, OtherTag> &o)
124 while (N *n = o.takeFirst()) prepend(n);
127template<
class N, N *N::*nextMember,
typename Tag>
128bool QForwardFieldList<N, nextMember, Tag>::isEmpty()
const
130 return _first.isNull();
133template<
class N, N *N::*nextMember,
typename Tag>
134bool QForwardFieldList<N, nextMember, Tag>::isOne()
const
136 return _first.data() && _first->*nextMember == 0;
139template<
class N, N *N::*nextMember,
typename Tag>
140bool QForwardFieldList<N, nextMember, Tag>::isMany()
const
142 return _first.data() && _first->*nextMember != 0;
145template<
class N, N *N::*nextMember,
typename Tag>
146N *QForwardFieldList<N, nextMember, Tag>::next(N *v)
149 return v->*nextMember;
152template<
class N, N *N::*nextMember,
typename Tag>
153Tag QForwardFieldList<N, nextMember, Tag>::tag()
const
158template<
class N, N *N::*nextMember,
typename Tag>
159void QForwardFieldList<N, nextMember, Tag>::setTag(Tag t)
164template<
class N, N *N::*nextMember>
165QFieldList<N, nextMember>::QFieldList()
166: _first(
nullptr), _last(
nullptr), _flag(0), _count(0)
170template<
class N, N *N::*nextMember>
171N *QFieldList<N, nextMember>::first()
const
176template<
class N, N *N::*nextMember>
177N *QFieldList<N, nextMember>::takeFirst()
181 _first = next(value);
182 if (_last == value) {
183 Q_ASSERT(_first ==
nullptr);
186 value->*nextMember =
nullptr;
192template<
class N, N *N::*nextMember>
193void QFieldList<N, nextMember>::append(N *v)
195 Q_ASSERT(v->*nextMember ==
nullptr);
200 _last->*nextMember = v;
206template<
class N, N *N::*nextMember>
207void QFieldList<N, nextMember>::prepend(N *v)
209 Q_ASSERT(v->*nextMember ==
nullptr);
214 v->*nextMember = _first;
220template<
class N, N *N::*nextMember>
221bool QFieldList<N, nextMember>::isEmpty()
const
226template<
class N, N *N::*nextMember>
227bool QFieldList<N, nextMember>::isOne()
const
232template<
class N, N *N::*nextMember>
233bool QFieldList<N, nextMember>::isMany()
const
238template<
class N, N *N::*nextMember>
239int QFieldList<N, nextMember>::count()
const
244template<
class N, N *N::*nextMember>
245N *QFieldList<N, nextMember>::next(N *v)
248 return v->*nextMember;
251template<
class N, N *N::*nextMember>
252void QFieldList<N, nextMember>::append(QFieldList<N, nextMember> &o)
260 _last->*nextMember = o._first;
264 o._first = o._last = 0; o._count = 0;
268template<
class N, N *N::*nextMember>
269void QFieldList<N, nextMember>::prepend(QFieldList<N, nextMember> &o)
277 o._last->*nextMember = _first;
281 o._first = o._last = 0; o._count = 0;
285template<
class N, N *N::*nextMember>
286void QFieldList<N, nextMember>::insertAfter(N *after, QFieldList<N, nextMember> &o)
290 }
else if (after == _last) {
292 }
else if (!o.isEmpty()) {
298 o._last->*nextMember = after->*nextMember;
299 after->*nextMember = o._first;
302 o._first = o._last = 0; o._count = 0;
306template<
class N, N *N::*nextMember>
307void QFieldList<N, nextMember>::copyAndClear(QFieldList<N, nextMember> &o)
312 o._first = o._last =
nullptr;
316template<
class N, N *N::*nextMember>
317template <
typename Tag>
318void QFieldList<N, nextMember>::copyAndClearAppend(QForwardFieldList<N, nextMember, Tag> &o)
323 while (N *n = o.takeFirst()) append(n);
326template<
class N, N *N::*nextMember>
327template <
typename Tag>
328void QFieldList<N, nextMember>::copyAndClearPrepend(QForwardFieldList<N, nextMember, Tag> &o)
333 while (N *n = o.takeFirst()) prepend(n);
336template<
class N, N *N::*nextMember>
337bool QFieldList<N, nextMember>::flag()
const
342template<
class N, N *N::*nextMember>
343void QFieldList<N, nextMember>::setFlag()
348template<
class N, N *N::*nextMember>
349void QFieldList<N, nextMember>::clearFlag()
354template<
class N, N *N::*nextMember>
355void QFieldList<N, nextMember>::setFlagValue(
bool v)
void copyAndClearPrepend(QForwardFieldList< N, nextMember, Tag > &)
void insertAfter(N *, QFieldList< N, nextMember > &)
void copyAndClear(QFieldList< N, nextMember > &)
void append(QFieldList< N, nextMember > &)
void copyAndClearAppend(QForwardFieldList< N, nextMember, Tag > &)
void prepend(QFieldList< N, nextMember > &)
void copyAndClearPrepend(QForwardFieldList< N, nextMember, OtherTag > &)