|
17 | 17 |
|
18 | 18 | using namespace Methcla::Audio;
|
19 | 19 |
|
| 20 | +#define METHCLA_ASSERT_NODE_IS_BLANK(node) \ |
| 21 | + BOOST_ASSERT(node != nullptr); \ |
| 22 | + BOOST_ASSERT(node->m_parent == nullptr); \ |
| 23 | + BOOST_ASSERT(node->m_prev == nullptr); \ |
| 24 | + BOOST_ASSERT(node->m_next == nullptr); \ |
| 25 | + |
| 26 | +#define METHCLA_ASSERT_NODE_IS_LINKED(node) \ |
| 27 | + BOOST_ASSERT(m_first != nullptr); \ |
| 28 | + BOOST_ASSERT(m_last != nullptr); \ |
| 29 | + BOOST_ASSERT(node->m_prev != nullptr || node == m_first); \ |
| 30 | + BOOST_ASSERT(node->m_next != nullptr || node == m_last); \ |
| 31 | + BOOST_ASSERT(m_first != m_last || (m_first == node && node == m_last)); |
| 32 | + |
20 | 33 | Group::Group(Environment& env, NodeId nodeId)
|
21 | 34 | : Node(env, nodeId)
|
22 | 35 | , m_first(nullptr)
|
@@ -86,38 +99,46 @@ void Group::addToTail(Node* node)
|
86 | 99 |
|
87 | 100 | void Group::addBefore(Node* target, Node* node)
|
88 | 101 | {
|
89 |
| - assert(target != nullptr); |
90 |
| - assert(node != nullptr); |
91 |
| - assert(target->parent() == this); |
92 |
| - assert(node->parent() == nullptr); |
93 |
| - assert(node->m_prev == nullptr); |
94 |
| - assert(node->m_next == nullptr); |
| 102 | + BOOST_ASSERT(target != nullptr); |
| 103 | + BOOST_ASSERT(target->parent() == this); |
| 104 | + METHCLA_ASSERT_NODE_IS_BLANK(node); |
95 | 105 |
|
96 | 106 | node->m_parent = this;
|
97 | 107 | node->m_prev = target->m_prev;
|
98 | 108 | target->m_prev = node;
|
99 | 109 | node->m_next = target;
|
100 | 110 |
|
101 |
| - if (target == m_first) |
| 111 | + if (target == m_first) { |
| 112 | + BOOST_ASSERT(node->m_prev == nullptr); |
102 | 113 | m_first = node;
|
| 114 | + } else { |
| 115 | + BOOST_ASSERT(node->m_prev != nullptr); |
| 116 | + node->m_prev->m_next = node; |
| 117 | + } |
| 118 | + |
| 119 | + METHCLA_ASSERT_NODE_IS_LINKED(node); |
103 | 120 | }
|
104 | 121 |
|
105 | 122 | void Group::addAfter(Node* target, Node* node)
|
106 | 123 | {
|
107 |
| - assert(target != nullptr); |
108 |
| - assert(node != nullptr); |
109 |
| - assert(target->parent() == this); |
110 |
| - assert(node->parent() == nullptr); |
111 |
| - assert(node->m_prev == nullptr); |
112 |
| - assert(node->m_next == nullptr); |
| 124 | + BOOST_ASSERT(target != nullptr); |
| 125 | + BOOST_ASSERT(target->parent() == this); |
| 126 | + METHCLA_ASSERT_NODE_IS_BLANK(node); |
113 | 127 |
|
114 | 128 | node->m_parent = this;
|
115 | 129 | node->m_next = target->m_next;
|
116 | 130 | target->m_next = node;
|
117 | 131 | node->m_prev = target;
|
118 | 132 |
|
119 |
| - if (target == m_last) |
| 133 | + if (target == m_last) { |
| 134 | + BOOST_ASSERT(node->m_next == nullptr); |
120 | 135 | m_last = node;
|
| 136 | + } else { |
| 137 | + BOOST_ASSERT(node->m_next != nullptr); |
| 138 | + node->m_next->m_prev = node; |
| 139 | + } |
| 140 | + |
| 141 | + METHCLA_ASSERT_NODE_IS_LINKED(node); |
121 | 142 | }
|
122 | 143 |
|
123 | 144 | void Group::remove(Node* node)
|
|
0 commit comments