Restore the old behavior. Additions are likely.

This commit is contained in:
ehofman
2005-06-30 19:10:18 +00:00
parent fdd9bb1af6
commit 38e5084018
2 changed files with 4 additions and 79 deletions

View File

@@ -778,7 +778,6 @@ SGPropertyNode::alias (SGPropertyNode * target)
clearValue();
_value.alias = target;
_type = ALIAS;
_value.alias->incrementRef();
return true;
}
@@ -802,7 +801,6 @@ SGPropertyNode::unalias ()
if (_type != ALIAS)
return false;
_type = NONE;
_value.alias->decrementRef();
_value.alias = 0;
return true;
}
@@ -914,10 +912,10 @@ SGPropertyNode::getChildren (const char * name) const
/**
* Detach a child node from the tree and return a guarded pointer to it.
* Remove a child node
*/
SGPropertyNode_ptr
SGPropertyNode::detachChild (const char * name, int index, bool keep)
SGPropertyNode::removeChild (const char * name, int index, bool keep)
{
SGPropertyNode_ptr ret;
int pos = find_child(name, index, _children);
@@ -940,64 +938,6 @@ SGPropertyNode::detachChild (const char * name, int index, bool keep)
}
/**
* Remove a child node, and all children that aren't referenced.
* Returns "true" if the node and all subnodes could be removed.
*/
bool
SGPropertyNode::removeChild (const char * name, int index)
{
int pos = find_child(name, index, _children);
if (pos >= 0) {
vector<SGPropertyNode_ptr>::iterator it = _children.begin();
it += pos;
SGPropertyNode *node = _children[pos];
if (node->_count != 1 || node->isTied() || !node->removeChildren())
return false;
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 true;
}
/**
* Remove all children nodes, or all with a given name.
* Returns "true" if the node and all subnodes could be removed.
*/
bool
SGPropertyNode::removeChildren(const char *name)
{
bool success = true;
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->_count != 1 || node->isTied() || !node->removeChildren())
success = false;
else {
if (_path_cache)
_path_cache->erase(node->getName());
node->setAttribute(REMOVED, true);
node->clearValue();
fireChildRemoved(node);
_children.erase(it);
}
}
return success;
}
const char *
SGPropertyNode::getDisplayName (bool simplify) const
{

View File

@@ -707,27 +707,12 @@ public:
/**
* Detach a child node from the tree and return guarded pointr to it.
* Remove a child node
*/
SGPropertyNode_ptr detachChild (const char * name, int index = 0,
SGPropertyNode_ptr removeChild (const char * name, int index = 0,
bool keep = true);
/**
* Remove a child node. Returns "true" if the node and all subnodes could
* be removed, and "false" if at least one node had to remain, because it
* was tied, aliased, or refcounted through SGPropertyNode_ptr.
*/
bool removeChild (const char * name, int index = 0);
/**
* Remove all children nodes, or all with a given name. True if all nodes
* were removed.
*/
bool removeChildren(const char * name = 0);
//
// Alias support.
//