4#ifndef QDOUBLEENDEDLIST_P_H
5#define QDOUBLEENDEDLIST_P_H
18#include <QtCore/private/qglobal_p.h>
28 Q_ASSERT((m_prev && m_next) || (!m_prev && !m_next));
29 return m_prev !=
nullptr;
38 Q_ASSERT((m_prev && m_next) || (!m_prev && !m_next));
42 m_prev->m_next = m_next;
43 m_next->m_prev = m_prev;
58 m_head.m_next = &m_head;
59 m_head.m_prev = &m_head;
60 assertHeadConsistent();
65 assertHeadConsistent();
67 m_head.m_next->remove();
68 assertHeadConsistent();
73 assertHeadConsistent();
74 return m_head.m_next == &m_head;
79 assertHeadConsistent();
83 nnode->m_next = m_head.m_next ? m_head.m_next : &m_head;
84 nnode->m_next->m_prev = nnode;
86 m_head.m_next = nnode;
87 nnode->m_prev = &m_head;
88 assertHeadConsistent();
93 assertHeadConsistent();
97 nnode->m_prev = m_head.m_prev ? m_head.m_prev : &m_head;
98 nnode->m_prev->m_next = nnode;
100 m_head.m_prev = nnode;
101 nnode->m_next = &m_head;
102 assertHeadConsistent();
109 assertHeadConsistent();
114 assertHeadConsistent();
116 nnode != &m_head; nnode = nnode->m_next) {
124 template<
typename T,
typename Node>
135 m_node = m_node->m_next;
142 m_node = m_node->m_next;
154 Node *m_node =
nullptr;
160 const N *
first()
const {
return checkedNodeToN(m_head.m_next); }
161 N *
first() {
return checkedNodeToN(m_head.m_next); }
163 const N *
last()
const {
return checkedNodeToN(m_head.m_prev); }
164 N *
last() {
return checkedNodeToN(m_head.m_prev); }
166 const N *
next(
const N *current)
const
170 return checkedNodeToN(nnode->m_next);
177 return checkedNodeToN(nnode->m_next);
180 const N *
prev(
const N *current)
const
184 return checkedNodeToN(nnode->m_prev);
191 return checkedNodeToN(nnode->m_prev);
196 assertHeadConsistent();
202 assertHeadConsistent();
208 assertHeadConsistent();
214 assertHeadConsistent();
220 assertHeadConsistent();
222 for (
const auto *node = m_head.m_next; node != &m_head; node = node->m_next)
230 return static_cast<N *
>(node);
235 return static_cast<const N *
>(node);
240 assertHeadConsistent();
241 return (!node || node == &m_head) ?
nullptr : nodeToN(node);
244 void assertHeadConsistent()
const
248 Q_ASSERT(m_head.m_next != &m_head || m_head.m_prev == &m_head);
base_iterator operator++(int)
bool operator!=(const base_iterator &other) const
base_iterator & operator++()
bool operator==(const base_iterator &other) const
const N * next(const N *current) const
const_iterator end() const
base_iterator< N, QInheritedListNode > iterator
bool contains(const N *n) const
base_iterator< const N, const QInheritedListNode > const_iterator
const N * prev(const N *current) const
const_iterator begin() const
Combined button and popup list for selecting options.
settings remove("monkey")