-bool
-SGPropertyNode::tie (const SGRawValue<bool> &rawValue, bool useDefault)
-{
- if (_type == ALIAS || _tied)
- return false;
-
- useDefault = useDefault && hasValue();
- bool old_val = false;
- if (useDefault)
- old_val = getBoolValue();
-
- clear_value();
- _type = BOOL;
- _tied = true;
- _value.bool_val = rawValue.clone();
-
- if (useDefault)
- setBoolValue(old_val);
-
- return true;
-}
-
-bool
-SGPropertyNode::tie (const SGRawValue<int> &rawValue, bool useDefault)
-{
- if (_type == ALIAS || _tied)
- return false;
-
- useDefault = useDefault && hasValue();
- int old_val = 0;
- if (useDefault)
- old_val = getIntValue();
-
- clear_value();
- _type = INT;
- _tied = true;
- _value.int_val = rawValue.clone();
-
- if (useDefault)
- setIntValue(old_val);
-
- return true;
-}
-
-bool
-SGPropertyNode::tie (const SGRawValue<long> &rawValue, bool useDefault)
-{
- if (_type == ALIAS || _tied)
- return false;
-
- useDefault = useDefault && hasValue();
- long old_val = 0;
- if (useDefault)
- old_val = getLongValue();
-
- clear_value();
- _type = LONG;
- _tied = true;
- _value.long_val = rawValue.clone();
-
- if (useDefault)
- setLongValue(old_val);
-
- return true;
-}
-
-bool
-SGPropertyNode::tie (const SGRawValue<float> &rawValue, bool useDefault)
-{
- if (_type == ALIAS || _tied)
- return false;
-
- useDefault = useDefault && hasValue();
- float old_val = 0.0;
- if (useDefault)
- old_val = getFloatValue();
-
- clear_value();
- _type = FLOAT;
- _tied = true;
- _value.float_val = rawValue.clone();
-
- if (useDefault)
- setFloatValue(old_val);
-
- return true;
-}
-
-bool
-SGPropertyNode::tie (const SGRawValue<double> &rawValue, bool useDefault)
-{
- if (_type == ALIAS || _tied)
- return false;
-
- useDefault = useDefault && hasValue();
- double old_val = 0.0;
- if (useDefault)
- old_val = getDoubleValue();
-
- clear_value();
- _type = DOUBLE;
- _tied = true;
- _value.double_val = rawValue.clone();
-
- if (useDefault)
- setDoubleValue(old_val);
-
- return true;
-
+std::ostream& SGPropertyNode::printOn(std::ostream& stream) const
+{
+ if (!getAttribute(READ))
+ return stream;
+ switch (_type) {
+ case props::ALIAS:
+ return _value.alias->printOn(stream);
+ case props::BOOL:
+ stream << (get_bool() ? "true" : "false");
+ break;
+ case props::INT:
+ stream << get_int();
+ break;
+ case props::LONG:
+ stream << get_long();
+ break;
+ case props::FLOAT:
+ stream << get_float();
+ break;
+ case props::DOUBLE:
+ stream << get_double();
+ break;
+ case props::STRING:
+ case props::UNSPECIFIED:
+ stream << get_string();
+ break;
+ case props::EXTENDED:
+ static_cast<SGRawExtended*>(_value.val)->printOn(stream);
+ break;
+ case props::NONE:
+ break;
+ default: // avoid compiler warning
+ break;
+ }
+ return stream;