MCPcopy Create free account
hub / github.com/JSBSim-Team/jsbsim / Load

Method Load

src/input_output/FGPropertyReader.cpp:67–144  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

65//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
66
67void FGPropertyReader::Load(Element* el, FGPropertyManager* PM, bool override_props)
68{
69 Element *property_element = el->FindElement("property");
70 if (property_element && FGJSBBase::debug_lvl > 0) {
71 FGLogging log(LogLevel::DEBUG);
72 log << "\n ";
73 if (override_props)
74 log << "Overriding";
75 else
76 log << "Declared";
77 log << " properties\n\n";
78 }
79
80 while (property_element) {
81 SGPropertyNode* node = nullptr;
82 double value=0.0;
83 bool has_value_attribute = !property_element->GetAttributeValue("value").empty();
84
85 if (has_value_attribute)
86 value = property_element->GetAttributeValueAsNumber("value");
87
88 string interface_property_string = property_element->GetDataLine();
89 if (PM->HasNode(interface_property_string)) {
90 node = PM->GetNode(interface_property_string);
91 if (override_props) {
92
93 if (FGJSBBase::debug_lvl > 0) {
94 FGXMLLogging log(property_element, LogLevel::DEBUG);
95 if (interface_prop_initial_value.find(node) == interface_prop_initial_value.end()) {
96 log << " The following property will be overridden but it has not been\n"
97 << " defined in the current model '" << el->GetName() << "'\n";
98 }
99
100 log << " " << "Overriding value for property " << interface_property_string
101 << "\n (old value: " << node->getDoubleValue()
102 << " new value: " << value << ")\n\n";
103 }
104
105 node->setDoubleValue(value);
106 }
107 else {
108 if (has_value_attribute) {
109 FGXMLLogging log(property_element, LogLevel::WARN);
110 log << " Property " << interface_property_string
111 << " is already defined.\n"
112 << " Its value (" << node->getDoubleValue() << ") will not"
113 << " be overridden.\n";
114 }
115 property_element = el->FindNextElement("property");
116 continue;
117 }
118 } else {
119 node = PM->GetNode(interface_property_string, true);
120 if (node) {
121 node->setDoubleValue(value);
122
123 if (FGJSBBase::debug_lvl > 0) {
124 FGLogging log(LogLevel::DEBUG);

Callers

nothing calls this directly

Calls 11

FindElementMethod · 0.80
emptyMethod · 0.80
GetAttributeValueMethod · 0.80
GetDataLineMethod · 0.80
GetNodeMethod · 0.80
getDoubleValueMethod · 0.80
setDoubleValueMethod · 0.80
FindNextElementMethod · 0.80
endMethod · 0.45
GetNameMethod · 0.45

Tested by

no test coverage detected