| 232 | } |
| 233 | |
| 234 | BaseNode* BaseBuilder::removeNode(BaseNode* node) noexcept { |
| 235 | if (!node->isActive()) |
| 236 | return node; |
| 237 | |
| 238 | BaseNode* prev = node->prev(); |
| 239 | BaseNode* next = node->next(); |
| 240 | |
| 241 | if (_firstNode == node) |
| 242 | _firstNode = next; |
| 243 | else |
| 244 | prev->_next = next; |
| 245 | |
| 246 | if (_lastNode == node) |
| 247 | _lastNode = prev; |
| 248 | else |
| 249 | next->_prev = prev; |
| 250 | |
| 251 | node->_prev = nullptr; |
| 252 | node->_next = nullptr; |
| 253 | node->clearFlags(NodeFlags::kIsActive); |
| 254 | if (node->isSection()) |
| 255 | _dirtySectionLinks = true; |
| 256 | |
| 257 | if (_cursor == node) |
| 258 | _cursor = prev; |
| 259 | |
| 260 | return node; |
| 261 | } |
| 262 | |
| 263 | void BaseBuilder::removeNodes(BaseNode* first, BaseNode* last) noexcept { |
| 264 | if (first == last) { |
no test coverage detected