59 m_head.m_next = &m_head;
60 m_head.m_prev = &m_head;
61 assertHeadConsistent();
66 assertHeadConsistent();
68 m_head.m_next->remove();
69 assertHeadConsistent();
74 assertHeadConsistent();
75 return m_head.m_next == &m_head;
80 assertHeadConsistent();
81 QInheritedListNode *nnode = n;
84 nnode->m_next = m_head.m_next ? m_head.m_next : &m_head;
85 nnode->m_next->m_prev = nnode;
87 m_head.m_next = nnode;
88 nnode->m_prev = &m_head;
89 assertHeadConsistent();
94 assertHeadConsistent();
95 QInheritedListNode *nnode = n;
98 nnode->m_prev = m_head.m_prev ? m_head.m_prev : &m_head;
99 nnode->m_prev->m_next = nnode;
101 m_head.m_prev = nnode;
102 nnode->m_next = &m_head;
103 assertHeadConsistent();
108 QInheritedListNode *nnode = n;
110 assertHeadConsistent();
115 assertHeadConsistent();
116 for (
const QInheritedListNode *nnode = m_head.m_next;
117 nnode != &m_head; nnode = nnode->m_next) {
125 template<
typename T,
typename Node>
136 m_node = m_node->m_next;
143 m_node = m_node->m_next;
150 base_iterator(Node *node) : m_node(node)
152 Q_ASSERT(m_node !=
nullptr);
155 Node *m_node =
nullptr;
161 const N *
first()
const {
return checkedNodeToN(m_head.m_next); }
162 N *
first() {
return checkedNodeToN(m_head.m_next); }
164 const N *
last()
const {
return checkedNodeToN(m_head.m_prev); }
165 N *
last() {
return checkedNodeToN(m_head.m_prev); }
167 const N *
next(
const N *current)
const
170 const QInheritedListNode *nnode = current;
171 return checkedNodeToN(nnode->m_next);
177 const QInheritedListNode *nnode = current;
178 return checkedNodeToN(nnode->m_next);
181 const N *
prev(
const N *current)
const
184 const QInheritedListNode *nnode = current;
185 return checkedNodeToN(nnode->m_prev);
191 const QInheritedListNode *nnode = current;
192 return checkedNodeToN(nnode->m_prev);
197 assertHeadConsistent();
203 assertHeadConsistent();
209 assertHeadConsistent();
215 assertHeadConsistent();
221 assertHeadConsistent();
222 qsizetype result = 0;
223 for (
const auto *node = m_head.m_next; node != &m_head; node = node->m_next)
229 static N *nodeToN(QInheritedListNode *node)
231 return static_cast<N *>(node);
234 static const N *nodeToN(
const QInheritedListNode *node)
236 return static_cast<
const N *>(node);
239 N *checkedNodeToN(QInheritedListNode *node)
const
241 assertHeadConsistent();
242 return (!node || node == &m_head) ?
nullptr : nodeToN(node);
245 void assertHeadConsistent()
const
247 Q_ASSERT(m_head.m_next !=
nullptr);
248 Q_ASSERT(m_head.m_prev !=
nullptr);
249 Q_ASSERT(m_head.m_next != &m_head || m_head.m_prev == &m_head);
252 QInheritedListNode m_head;