From: curt Date: Wed, 6 Jun 2001 17:43:16 +0000 (+0000) Subject: Optimized property node accesses. X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=64254d741039ccbabb606a60694603ab1abd2dea;p=flightgear.git Optimized property node accesses. --- diff --git a/src/Cockpit/hud.cxx b/src/Cockpit/hud.cxx index fb10cdaaa..f9d3ae04b 100644 --- a/src/Cockpit/hud.cxx +++ b/src/Cockpit/hud.cxx @@ -421,147 +421,129 @@ readLabel(const SGPropertyNode * node) int font_size = (fgGetInt("/sim/startup/xsize") > 1000) ? LARGE : SMALL; - name = node->getStringValue("name"); - x = node->getIntValue("x"); - y = node->getIntValue("y"); - width = node->getIntValue("width"); - height = node->getIntValue("height"); - loadfn = node->getStringValue("data_source"); - label_format = node->getStringValue("label_format"); - prelabel = node->getStringValue("pre_label_string"); - postlabel = node->getStringValue("post_label_string"); - scaling = node->getFloatValue("scale_data"); - options = node->getIntValue("options"); - justi = node->getIntValue("justification"); - blinking = node->getIntValue("blinking"); - latitude = node->getBoolValue("latitude",false); - longitude = node->getBoolValue("longitude",false); - working = node->getBoolValue("working"); - - - SG_LOG(SG_INPUT, SG_INFO, "Done reading instrument " << name); - - - if(justi==0) - justification = LEFT_JUST; - else - if(justi==1) - justification = CENTER_JUST; - else - if(justi==2) - justification = RIGHT_JUST; - - - if(prelabel=="NULL") - pre_label_string = NULL; - else - if(prelabel=="blank") - pre_label_string = " "; - else - pre_label_string = prelabel.c_str(); - + name = node->getStringValue("name"); + x = node->getIntValue("x"); + y = node->getIntValue("y"); + width = node->getIntValue("width"); + height = node->getIntValue("height"); + loadfn = node->getStringValue("data_source"); + label_format = node->getStringValue("label_format"); + prelabel = node->getStringValue("pre_label_string"); + postlabel = node->getStringValue("post_label_string"); + scaling = node->getFloatValue("scale_data"); + options = node->getIntValue("options"); + justi = node->getIntValue("justification"); + blinking = node->getIntValue("blinking"); + latitude = node->getBoolValue("latitude",false); + longitude = node->getBoolValue("longitude",false); + working = node->getBoolValue("working"); + + + SG_LOG(SG_INPUT, SG_INFO, "Done reading instrument " << name); + + + if ( justi == 0 ) { + justification = LEFT_JUST; + } else { + if ( justi == 1 ) { + justification = CENTER_JUST; + } else { + if ( justi == 2 ) { + justification = RIGHT_JUST; + } + } + } - if(postlabel=="blank") - post_label_string = " "; - else - if(postlabel=="NULL") - post_label_string = NULL; - else - if(postlabel=="units") - post_label_string = units; - else - post_label_string = postlabel.c_str(); - + if ( prelabel == "NULL" ) { + pre_label_string = NULL; + } else { + if ( prelabel == "blank" ) { + pre_label_string = " "; + } else { + pre_label_string = prelabel.c_str(); + } + } - if(loadfn=="aux16") - load_fn = get_aux16; - else - if(loadfn=="aux17") - load_fn = get_aux17; - else - if(loadfn=="aux9") - load_fn = get_aux9; - else - if(loadfn=="aux11") - load_fn = get_aux11; - else - if(loadfn=="aux12") - load_fn = get_aux12; - else - if(loadfn=="aux10") - load_fn = get_aux10; - else - if(loadfn=="aux13") - load_fn = get_aux13; - else - if(loadfn=="aux14") - load_fn = get_aux14; - else - if(loadfn=="aux15") - load_fn = get_aux15; - else - if(loadfn=="aux8") - load_fn = get_aux8; - else - if(loadfn=="ax") - load_fn = get_Ax; - else - if(loadfn=="speed") - load_fn = get_speed; - else - if(loadfn=="mach") - load_fn = get_mach; - else - if(loadfn=="altitude") - load_fn = get_altitude; - else - if(loadfn=="agl") - load_fn = get_agl; - else - if(loadfn=="framerate") - load_fn = get_frame_rate; - else - if(loadfn=="heading") - load_fn = get_heading; - else - if(loadfn=="fov") - load_fn = get_fov; - else - if(loadfn=="vfc_tris_culled") - load_fn = get_vfc_tris_culled; - else - if(loadfn=="vfc_tris_drawn") - load_fn = get_vfc_tris_drawn; - else - if(loadfn=="aoa") - load_fn = get_aoa; - else - if(loadfn=="latitude") - load_fn = get_latitude; - else - if(loadfn=="longitude") - load_fn = get_longitude; - - - p = (instr_item *) new instr_label ( x, - y, - width, - height, - load_fn, - label_format.c_str(), - pre_label_string, - post_label_string, - scaling, - options, - justification, - font_size, - blinking, - latitude, - longitude, - working); + if ( postlabel == "blank" ) { + post_label_string = " "; + } else { + if ( postlabel == "NULL" ) { + post_label_string = NULL; + } else { + if ( postlabel == "units" ) { + post_label_string = units; + } else { + post_label_string = postlabel.c_str(); + } + } + } - return p; + if ( loadfn == "aux16" ) { + load_fn = get_aux16; + } else if ( loadfn == "aux17" ) { + load_fn = get_aux17; + } else if ( loadfn == "aux9" ) { + load_fn = get_aux9; + } else if ( loadfn == "aux11" ) { + load_fn = get_aux11; + } else if ( loadfn == "aux12" ) { + load_fn = get_aux12; + } else if ( loadfn == "aux10" ) { + load_fn = get_aux10; + } else if ( loadfn == "aux13" ) { + load_fn = get_aux13; + } else if ( loadfn == "aux14" ) { + load_fn = get_aux14; + } else if ( loadfn == "aux15" ) { + load_fn = get_aux15; + } else if ( loadfn == "aux8" ) { + load_fn = get_aux8; + } else if ( loadfn == "ax" ) { + load_fn = get_Ax; + } else if ( loadfn == "speed" ) { + load_fn = get_speed; + } else if ( loadfn == "mach" ) { + load_fn = get_mach; + } else if ( loadfn == "altitude" ) { + load_fn = get_altitude; + } else if ( loadfn == "agl" ) { + load_fn = get_agl; + } else if ( loadfn == "framerate" ) { + load_fn = get_frame_rate; + } else if ( loadfn == "heading" ) { + load_fn = get_heading; + } else if ( loadfn == "fov" ) { + load_fn = get_fov; + } else if ( loadfn == "vfc_tris_culled" ) { + load_fn = get_vfc_tris_culled; + } else if ( loadfn == "vfc_tris_drawn" ) { + load_fn = get_vfc_tris_drawn; + } else if ( loadfn == "aoa" ) { + load_fn = get_aoa; + } else if ( loadfn == "latitude" ) { + load_fn = get_latitude; + } else if ( loadfn == "longitude" ) { + load_fn = get_longitude; + } + p = (instr_item *) new instr_label ( x, + y, + width, + height, + load_fn, + label_format.c_str(), + pre_label_string, + post_label_string, + scaling, + options, + justification, + font_size, + blinking, + latitude, + longitude, + working); + + return p; } // end readLabel static instr_item * @@ -570,137 +552,139 @@ readTBI(const SGPropertyNode * node) instr_item *p; - name = node->getStringValue("name"); - x = node->getIntValue("x"); - y = node->getIntValue("y"); - width = node->getIntValue("width"); - height = node->getIntValue("height"); - maxBankAngle = node->getFloatValue("maxBankAngle"); - maxSlipAngle = node->getFloatValue("maxSlipAngle"); - gap_width = node->getIntValue("gap_width"); - working = node->getBoolValue("working"); - - SG_LOG(SG_INPUT, SG_INFO, "Done reading instrument " << name); - - - p = (instr_item *) new fgTBI_instr( x, - y, - width, - height, - get_roll, - get_sideslip, - maxBankAngle, - maxSlipAngle, - gap_width, - working); - - return p; + name = node->getStringValue("name"); + x = node->getIntValue("x"); + y = node->getIntValue("y"); + width = node->getIntValue("width"); + height = node->getIntValue("height"); + maxBankAngle = node->getFloatValue("maxBankAngle"); + maxSlipAngle = node->getFloatValue("maxSlipAngle"); + gap_width = node->getIntValue("gap_width"); + working = node->getBoolValue("working"); + + SG_LOG(SG_INPUT, SG_INFO, "Done reading instrument " << name); + + + p = (instr_item *) new fgTBI_instr( x, + y, + width, + height, + get_roll, + get_sideslip, + maxBankAngle, + maxSlipAngle, + gap_width, + working); + + return p; } //end readTBI int readInstrument(const SGPropertyNode * node) { - instr_item *HIptr; + instr_item *HIptr; if ( fgGetString("/sim/startup/units") == "feet" ) { - strcpy(units, " ft"); + strcpy(units, " ft"); } else { - strcpy(units, " m"); + strcpy(units, " m"); } - const SGPropertyNode * ladder_group = node->getNode("ladders"); + const SGPropertyNode * ladder_group = node->getNode("ladders"); - if (ladder_group != 0) { - int nLadders = ladder_group->nChildren(); - for (int j = 0; j < nLadders; j++) { - - HIptr = readLadder(ladder_group->getChild(j)); - HUD_deque.insert( HUD_deque.begin(), HIptr); + if (ladder_group != 0) { + int nLadders = ladder_group->nChildren(); + for (int j = 0; j < nLadders; j++) { + + HIptr = readLadder(ladder_group->getChild(j)); + HUD_deque.insert( HUD_deque.begin(), HIptr); - }// for - ladders - } - - const SGPropertyNode * card_group = node->getNode("cards"); - if (card_group != 0) { - int nCards = card_group->nChildren(); - for (int j = 0; j < nCards; j++) { + }// for - ladders + } - HIptr = readCard(card_group->getChild(j)); - HUD_deque.insert( HUD_deque.begin(), HIptr); + const SGPropertyNode * card_group = node->getNode("cards"); + if (card_group != 0) { + int nCards = card_group->nChildren(); + for (int j = 0; j < nCards; j++) { + + HIptr = readCard(card_group->getChild(j)); + HUD_deque.insert( HUD_deque.begin(), HIptr); - }//for - cards - } + }//for - cards + } - const SGPropertyNode * label_group = node->getNode("labels"); - if (label_group != 0) { - int nLabels = label_group->nChildren(); - for (int j = 0; j < nLabels; j++) { + const SGPropertyNode * label_group = node->getNode("labels"); + if (label_group != 0) { + int nLabels = label_group->nChildren(); + for (int j = 0; j < nLabels; j++) { - HIptr = readLabel(label_group->getChild(j)); - HUD_deque.insert( HUD_deque.begin(), HIptr); + HIptr = readLabel(label_group->getChild(j)); + HUD_deque.insert( HUD_deque.begin(), HIptr); - }//for - labels - } + }//for - labels + } - const SGPropertyNode * tbi_group = node->getNode("tbis"); - if (tbi_group != 0) { - int nTbis = tbi_group->nChildren(); - for (int j = 0; j < nTbis; j++) { + const SGPropertyNode * tbi_group = node->getNode("tbis"); + if (tbi_group != 0) { + int nTbis = tbi_group->nChildren(); + for (int j = 0; j < nTbis; j++) { - HIptr = readTBI(tbi_group->getChild(j)); - HUD_deque.insert( HUD_deque.begin(), HIptr); + HIptr = readTBI(tbi_group->getChild(j)); + HUD_deque.insert( HUD_deque.begin(), HIptr); - }//for - tbis - } - return 0; + }//for - tbis + } + return 0; }//end readinstrument + int readHud( istream &input ) { - SGPropertyNode root; + SGPropertyNode root; - if (!readProperties(input, &root)) { - SG_LOG(SG_INPUT, SG_ALERT, "Malformed property list for hud."); - return 0; - } + if (!readProperties(input, &root)) { + SG_LOG(SG_INPUT, SG_ALERT, "Malformed property list for hud."); + return 0; + } - SG_LOG(SG_INPUT, SG_INFO, "Read properties for " << - root.getStringValue("name")); + SG_LOG(SG_INPUT, SG_INFO, "Read properties for " << + root.getStringValue("name")); - HUD_deque.erase( HUD_deque.begin(), HUD_deque.end()); // empty the HUD deque + HUD_deque.erase( HUD_deque.begin(), HUD_deque.end()); // empty the HUD deque - SG_LOG(SG_INPUT, SG_INFO, "Reading Hud instruments"); + SG_LOG(SG_INPUT, SG_INFO, "Reading Hud instruments"); - const SGPropertyNode * instrument_group = root.getChild("instruments"); - int nInstruments = instrument_group->nChildren(); + const SGPropertyNode * instrument_group = root.getChild("instruments"); + int nInstruments = instrument_group->nChildren(); - for (int i = 0; i < nInstruments; i++) { + for (int i = 0; i < nInstruments; i++) { - const SGPropertyNode * node = instrument_group->getChild(i); + const SGPropertyNode * node = instrument_group->getChild(i); + + SGPath path( globals->get_fg_root() ); + path.append(node->getStringValue("path")); - SGPath path( globals->get_fg_root() ); - path.append(node->getStringValue("path")); + SG_LOG(SG_INPUT, SG_INFO, "Reading Instrument " + << node->getName() + << " from " + << path.str()); - SG_LOG(SG_INPUT, SG_INFO, "Reading Instrument " - << node->getName() - << " from " - << path.str()); + SGPropertyNode root2; + if (readProperties(path.str(), &root2)) { - SGPropertyNode root2; - if (readProperties(path.str(), &root2)) { + readInstrument(&root2); - readInstrument(&root2); + }//if + }//for loop(i) - }//if - }//for loop(i) - return 0; + return 0; } @@ -708,31 +692,31 @@ int fgHUDInit( fgAIRCRAFT * /* current_aircraft */ ) { - HUD_style = 1; + HUD_style = 1; - SG_LOG( SG_COCKPIT, SG_INFO, "Initializing current aircraft HUD" ); + SG_LOG( SG_COCKPIT, SG_INFO, "Initializing current aircraft HUD" ); string hud_path = fgGetString("/sim/hud/path", "Huds/Default/default.xml"); - SGPath path(globals->get_fg_root()); - path.append(hud_path); + SGPath path(globals->get_fg_root()); + path.append(hud_path); - ifstream input(path.c_str()); - if (!input.good()) - { - SG_LOG(SG_INPUT, SG_ALERT, - "Cannot read Hud configuration from " << path.str()); - } - else - { - readHud(input); - input.close(); - } + ifstream input(path.c_str()); + if (!input.good()) + { + SG_LOG(SG_INPUT, SG_ALERT, + "Cannot read Hud configuration from " << path.str()); + } + else + { + readHud(input); + input.close(); + } - fgHUDalphaInit(); - fgHUDReshape(); + fgHUDalphaInit(); + fgHUDReshape(); - return 0; // For now. Later we may use this for an error code. + return 0; // For now. Later we may use this for an error code. } @@ -743,19 +727,19 @@ int fgHUDInit2( fgAIRCRAFT * /* current_aircraft */ ) SG_LOG( SG_COCKPIT, SG_INFO, "Initializing current aircraft HUD" ); - SGPath path(globals->get_fg_root()); - path.append("Huds/Minimal/default.xml"); + SGPath path(globals->get_fg_root()); + path.append("Huds/Minimal/default.xml"); - ifstream input(path.c_str()); - if (!input.good()) { - SG_LOG(SG_INPUT, SG_ALERT, - "Cannot read Hud configuration from " << path.str()); - } - else { - readHud(input); - input.close(); - } + ifstream input(path.c_str()); + if (!input.good()) { + SG_LOG(SG_INPUT, SG_ALERT, + "Cannot read Hud configuration from " << path.str()); + } + else { + readHud(input); + input.close(); + } return 0; // For now. Later we may use this for an error code. @@ -968,8 +952,8 @@ void fgHUDReshape(void) { static void set_hud_color(float r, float g, float b) { fgGetBool("/sim/hud/antialiased") ? - glColor4f(r,g,b,hud_trans_alpha) : - glColor3f(r,g,b); + glColor4f(r,g,b,hud_trans_alpha) : + glColor3f(r,g,b); } // fgUpdateHUD @@ -1010,7 +994,10 @@ void fgUpdateHUD( void ) { glDisable(GL_DEPTH_TEST); glDisable(GL_LIGHTING); - if( fgGetBool("/sim/hud/antialiased") ) { + static const SGPropertyNode * antialiased_node + = fgGetNode("/sim/hud/antialiased"); + + if( antialiased_node->getBoolValue() ) { glEnable(GL_LINE_SMOOTH); // glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); @@ -1104,9 +1091,9 @@ void fgUpdateHUD( void ) { // extern char *fgAPget_TargetLatLonStr( void ); int apY = 480 - 80; -// char scratch[128]; -// HUD_TextList.add( fgText( "AUTOPILOT", 20, apY) ); -// apY -= 15; + // char scratch[128]; + // HUD_TextList.add( fgText( "AUTOPILOT", 20, apY) ); + // apY -= 15; if( current_autopilot->get_HeadingEnabled() ) { HUD_TextList.add( fgText( 40, apY, current_autopilot->get_TargetHeadingStr()) ); @@ -1142,15 +1129,15 @@ void fgUpdateHUD( void ) { HUD_LineList.draw(); -// glEnable(GL_LINE_STIPPLE); -// glLineStipple( 1, 0x00FF ); -// HUD_StippleLineList.draw(); -// glDisable(GL_LINE_STIPPLE); + // glEnable(GL_LINE_STIPPLE); + // glLineStipple( 1, 0x00FF ); + // HUD_StippleLineList.draw(); + // glDisable(GL_LINE_STIPPLE); - if( fgGetBool("/sim/hud/antialiased") ) { -// glDisable(GL_BLEND); - glDisable(GL_LINE_SMOOTH); - glLineWidth(1.0); + if( antialiased_node->getBoolValue() ) { + // glDisable(GL_BLEND); + glDisable(GL_LINE_SMOOTH); + glLineWidth(1.0); } glEnable(GL_DEPTH_TEST);