- SGPropertyNode *node = _children[pos];
- if (node->nChildren() && node->removeChildren())
- dirty = true;
-
- if (node->_count == 1 && !node->nChildren()) {
- if (keep)
- _removedChildren.push_back(node);
-
- if (_path_cache)
- _path_cache->erase(name); // EMH - TODO: Take "index" into account!
-
- node->setAttribute(REMOVED, true);
- node->clearValue();
- fireChildRemoved(node);
- _children.erase(it);
- }
- }
- return dirty;
-}
-
-/**
- * Remove all children nodes, or all with a given name. Returns
- * "true" if not all nodes could be removed.
- */
-bool
-SGPropertyNode::removeChildren(const char *name)
-{
- bool dirty = false;
- vector<SGPropertyNode_ptr>::iterator it = _children.end();
- vector<SGPropertyNode_ptr>::iterator begin = _children.begin();
- while (it-- != begin) {
- SGPropertyNode *node = *it;
- if (name && !compare_strings(node->getName(), name))
- continue;
-
- if (node->nChildren() && node->removeChildren())
- dirty = true;
-
- if (node->isTied() || node->_count != 1 || node->nChildren())
- dirty = true;
- else {
- if (_path_cache)
- _path_cache->erase(node->getName());
-
- node->setAttribute(REMOVED, true);
- node->clearValue();
- fireChildRemoved(node);
- _children.erase(it);