Simplify copyProperties
- with initial-state save/restore gone, all uses of copyProperties are now simple. For selective copying, use copyPropertiesWithAttribute.
This commit is contained in:
@@ -780,16 +780,11 @@ copyPropertyValue(const SGPropertyNode *in, SGPropertyNode *out)
|
|||||||
*
|
*
|
||||||
* @param in The source property tree.
|
* @param in The source property tree.
|
||||||
* @param out The destination property tree.
|
* @param out The destination property tree.
|
||||||
* @param attr_value Only copy properties with given attribute values.
|
|
||||||
* @param attr_mask Mask for attributes to be considered by attr_value
|
|
||||||
* (default is 0 = attributes not considered, all
|
|
||||||
* properties copied).
|
|
||||||
* @return true if all properties were copied, false if some failed
|
* @return true if all properties were copied, false if some failed
|
||||||
* (for example, if the property's value is tied read-only).
|
* (for example, if the property's value is tied read-only).
|
||||||
*/
|
*/
|
||||||
bool
|
bool
|
||||||
copyProperties (const SGPropertyNode *in, SGPropertyNode *out,
|
copyProperties (const SGPropertyNode *in, SGPropertyNode *out)
|
||||||
int attr_value, int attr_mask)
|
|
||||||
{
|
{
|
||||||
using namespace simgear;
|
using namespace simgear;
|
||||||
bool retval = copyPropertyValue(in, out);
|
bool retval = copyPropertyValue(in, out);
|
||||||
@@ -804,14 +799,7 @@ copyProperties (const SGPropertyNode *in, SGPropertyNode *out,
|
|||||||
int nChildren = in->nChildren();
|
int nChildren = in->nChildren();
|
||||||
for (int i = 0; i < nChildren; i++) {
|
for (int i = 0; i < nChildren; i++) {
|
||||||
const SGPropertyNode * in_child = in->getChild(i);
|
const SGPropertyNode * in_child = in->getChild(i);
|
||||||
int mask = attr_mask;
|
SGPropertyNode * out_child = out->getChild(in_child->getNameString(),
|
||||||
/* attributes have no meaning for nodes without values - except
|
|
||||||
* the PRESERVE flag. So ignore them. */
|
|
||||||
if (!in_child->hasValue())
|
|
||||||
mask &= SGPropertyNode::PRESERVE;
|
|
||||||
if ((in_child->getAttributes() & mask) == (attr_value & mask))
|
|
||||||
{
|
|
||||||
SGPropertyNode * out_child = out->getChild(in_child->getNameString(),
|
|
||||||
in_child->getIndex(),
|
in_child->getIndex(),
|
||||||
false);
|
false);
|
||||||
if (!out_child)
|
if (!out_child)
|
||||||
@@ -820,18 +808,9 @@ copyProperties (const SGPropertyNode *in, SGPropertyNode *out,
|
|||||||
in_child->getIndex(),
|
in_child->getIndex(),
|
||||||
true);
|
true);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
if (out_child && !copyProperties(in_child, out_child))
|
||||||
mask = attr_mask;
|
|
||||||
if (!out_child->hasValue())
|
|
||||||
mask &= SGPropertyNode::PRESERVE;
|
|
||||||
if ((out_child->getAttributes() & mask) != (attr_value & mask))
|
|
||||||
out_child = NULL;
|
|
||||||
}
|
|
||||||
if (out_child &&
|
|
||||||
(!copyProperties(in_child, out_child, attr_value, attr_mask)))
|
|
||||||
retval = false;
|
retval = false;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
|
|||||||
@@ -61,8 +61,7 @@ void writeProperties (const std::string &file,
|
|||||||
/**
|
/**
|
||||||
* Copy properties from one node to another.
|
* Copy properties from one node to another.
|
||||||
*/
|
*/
|
||||||
bool copyProperties (const SGPropertyNode *in, SGPropertyNode *out,
|
bool copyProperties (const SGPropertyNode *in, SGPropertyNode *out);
|
||||||
int attr_value=0, int attr_mask=0);
|
|
||||||
|
|
||||||
|
|
||||||
bool copyPropertiesWithAttribute(const SGPropertyNode *in, SGPropertyNode *out,
|
bool copyPropertiesWithAttribute(const SGPropertyNode *in, SGPropertyNode *out,
|
||||||
|
|||||||
Reference in New Issue
Block a user