-/**
- * Set a raw double-precision floating-point value (no type coercion).
- *
- * Return false if the value could not be set, true otherwise.
- */
-bool
-SGValue::setRawDouble (double value)
-{
- if (_tied) {
- if (_value.double_func.setter != 0) {
- (*_value.double_func.setter)(value);
- return true;
- } else {
- return false;
- }
- } else {
- _value.double_val = value;
- return true;
+ // Empty component means root.
+ else if (components[position].name == "") {
+ return find_node(current->getRootNode(), components, position + 1, create);
+ }
+
+ // . means current directory
+ else if (components[position].name == ".") {
+ return find_node(current, components, position + 1, create);
+ }
+
+ // .. means parent directory
+ else if (components[position].name == "..") {
+ SGPropertyNode * parent = current->getParent();
+ if (parent == 0)
+ throw string("Attempt to move past root with '..'");
+ else
+ return find_node(parent, components, position + 1, create);
+ }
+
+ // Otherwise, a child name
+ else {
+ SGPropertyNode * child =
+ current->getChild(components[position].name,
+ components[position].index,
+ create);
+ return find_node(child, components, position + 1, create);