18#include <QtCore/private/qglobal_p.h>
19#include <QtCore/qtaggedpointer.h>
23template<
class N, N *N::*nextMember,
typename Tag = QtPrivate::TagInfo<N>>
32 template <
typename OtherTag>
39 static inline N *
next(N *v);
41 inline Tag
tag()
const;
44 QTaggedPointer<N, Tag> _first;
49template<
class N, N *N::*nextMember>
65 inline void append(QFieldList<N, nextMember> &);
66 inline void prepend(QFieldList<N, nextMember> &);
70 template <
typename Tag>
72 template <
typename Tag>
75 static inline N *
next(N *v);
88template<
class N, N *N::*nextMember,
typename Tag>
89QForwardFieldList<N, nextMember, Tag>::QForwardFieldList()
93template<
class N, N *N::*nextMember,
typename Tag>
94N *QForwardFieldList<N, nextMember, Tag>::first()
const
99template<
class N, N *N::*nextMember,
typename Tag>
100N *QForwardFieldList<N, nextMember, Tag>::takeFirst()
102 N *value = _first.data();
104 _first = next(value);
105 value->*nextMember =
nullptr;
110template<
class N, N *N::*nextMember,
typename Tag>
111void QForwardFieldList<N, nextMember, Tag>::prepend(N *v)
113 Q_ASSERT(v->*nextMember ==
nullptr);
114 v->*nextMember = _first.data();
118template<
class N, N *N::*nextMember,
typename Tag>
119template <
typename OtherTag>
120void QForwardFieldList<N, nextMember, Tag>::copyAndClearPrepend(QForwardFieldList<N, nextMember, OtherTag> &o)
123 while (N *n = o.takeFirst()) prepend(n);
126template<
class N, N *N::*nextMember,
typename Tag>
127bool QForwardFieldList<N, nextMember, Tag>::isEmpty()
const
129 return _first.isNull();
132template<
class N, N *N::*nextMember,
typename Tag>
133bool QForwardFieldList<N, nextMember, Tag>::isOne()
const
135 return _first.data() && _first->*nextMember == 0;
138template<
class N, N *N::*nextMember,
typename Tag>
139bool QForwardFieldList<N, nextMember, Tag>::isMany()
const
141 return _first.data() && _first->*nextMember != 0;
144template<
class N, N *N::*nextMember,
typename Tag>
145N *QForwardFieldList<N, nextMember, Tag>::next(N *v)
148 return v->*nextMember;
151template<
class N, N *N::*nextMember,
typename Tag>
152Tag QForwardFieldList<N, nextMember, Tag>::tag()
const
157template<
class N, N *N::*nextMember,
typename Tag>
158void QForwardFieldList<N, nextMember, Tag>::setTag(Tag t)
163template<
class N, N *N::*nextMember>
164QFieldList<N, nextMember>::QFieldList()
165: _first(
nullptr), _last(
nullptr), _flag(0), _count(0)
169template<
class N, N *N::*nextMember>
170N *QFieldList<N, nextMember>::first()
const
175template<
class N, N *N::*nextMember>
176N *QFieldList<N, nextMember>::takeFirst()
180 _first = next(value);
181 if (_last == value) {
182 Q_ASSERT(_first ==
nullptr);
185 value->*nextMember =
nullptr;
191template<
class N, N *N::*nextMember>
192void QFieldList<N, nextMember>::append(N *v)
194 Q_ASSERT(v->*nextMember ==
nullptr);
199 _last->*nextMember = v;
205template<
class N, N *N::*nextMember>
206void QFieldList<N, nextMember>::prepend(N *v)
208 Q_ASSERT(v->*nextMember ==
nullptr);
213 v->*nextMember = _first;
219template<
class N, N *N::*nextMember>
220bool QFieldList<N, nextMember>::isEmpty()
const
225template<
class N, N *N::*nextMember>
226bool QFieldList<N, nextMember>::isOne()
const
231template<
class N, N *N::*nextMember>
232bool QFieldList<N, nextMember>::isMany()
const
237template<
class N, N *N::*nextMember>
238int QFieldList<N, nextMember>::count()
const
243template<
class N, N *N::*nextMember>
244N *QFieldList<N, nextMember>::next(N *v)
247 return v->*nextMember;
250template<
class N, N *N::*nextMember>
251void QFieldList<N, nextMember>::append(QFieldList<N, nextMember> &o)
259 _last->*nextMember = o._first;
263 o._first = o._last = 0; o._count = 0;
267template<
class N, N *N::*nextMember>
268void QFieldList<N, nextMember>::prepend(QFieldList<N, nextMember> &o)
276 o._last->*nextMember = _first;
280 o._first = o._last = 0; o._count = 0;
284template<
class N, N *N::*nextMember>
285void QFieldList<N, nextMember>::insertAfter(N *after, QFieldList<N, nextMember> &o)
289 }
else if (after == _last) {
291 }
else if (!o.isEmpty()) {
297 o._last->*nextMember = after->*nextMember;
298 after->*nextMember = o._first;
301 o._first = o._last = 0; o._count = 0;
305template<
class N, N *N::*nextMember>
306void QFieldList<N, nextMember>::copyAndClear(QFieldList<N, nextMember> &o)
311 o._first = o._last =
nullptr;
315template<
class N, N *N::*nextMember>
316template <
typename Tag>
317void QFieldList<N, nextMember>::copyAndClearAppend(QForwardFieldList<N, nextMember, Tag> &o)
322 while (N *n = o.takeFirst()) append(n);
325template<
class N, N *N::*nextMember>
326template <
typename Tag>
327void QFieldList<N, nextMember>::copyAndClearPrepend(QForwardFieldList<N, nextMember, Tag> &o)
332 while (N *n = o.takeFirst()) prepend(n);
335template<
class N, N *N::*nextMember>
336bool QFieldList<N, nextMember>::flag()
const
341template<
class N, N *N::*nextMember>
342void QFieldList<N, nextMember>::setFlag()
347template<
class N, N *N::*nextMember>
348void QFieldList<N, nextMember>::clearFlag()
353template<
class N, N *N::*nextMember>
354void 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 > &)