2 // simple.cxx -- a really simplistic class to manage airport ID,
3 // lat, lon of the center of one of it's runways, and
6 // Written by Curtis Olson, started April 1998.
8 // Copyright (C) 1998 Curtis L. Olson - curt@me.umn.edu
10 // This program is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU General Public License as
12 // published by the Free Software Foundation; either version 2 of the
13 // License, or (at your option) any later version.
15 // This program is distributed in the hope that it will be useful, but
16 // WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // General Public License for more details.
20 // You should have received a copy of the GNU General Public License
21 // along with this program; if not, write to the Free Software
22 // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
27 #include <simgear/compiler.h>
29 #include <simgear/logstream.hxx>
30 #include <simgear/fgpath.hxx>
31 #include <simgear/fgstream.hxx>
33 #include <Main/options.hxx>
36 #include STL_FUNCTIONAL
37 #include STL_ALGORITHM
42 fgAIRPORTS::fgAIRPORTS() {
47 int fgAIRPORTS::load( const string& file ) {
50 // build the path name to the airport file
51 FGPath path( current_options.get_fg_root() );
52 path.append( "Airports" );
55 airports.erase( airports.begin(), airports.end() );
57 fg_gzifstream in( path.str() );
58 if ( !in.is_open() ) {
59 FG_LOG( FG_GENERAL, FG_ALERT, "Cannot open file: " << path.str() );
64 // We can use the STL copy algorithm because the input
65 // file doesn't contain and comments or blank lines.
66 copy( istream_iterator<fgAIRPORT,ptrdiff_t>(in.stream()),
67 istream_iterator<fgAIRPORT,ptrdiff_t>(),
68 inserter( airports, airports.begin() ) );
71 // read in each line of the file
77 while ( in.get(c) && c != '\0' ) {
87 while ( ! in.eof() ) {
99 // search for the specified id
101 fgAIRPORTS::search( const string& id, fgAIRPORT* a ) const
103 const_iterator it = airports.find( fgAIRPORT(id) );
104 if ( it != airports.end() )
117 fgAIRPORTS::search( const string& id ) const
120 this->search( id, &a );
126 fgAIRPORTS::~fgAIRPORTS( void ) {