X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fenvironment%2Fmetar.hxx;h=e501a0c4611ff8b8c6a235cd0cfb92063d6ef7c6;hb=b47d1ad5fd8ed111cae99c1f65f5bb65a5371501;hp=a446152d6d44f23bca427cfb5e48ada440c78241;hpb=b2a4cd488dfcfbf1d02fa41f2dfa5ad39aabb13a;p=simgear.git diff --git a/simgear/environment/metar.hxx b/simgear/environment/metar.hxx index a446152d..e501a0c4 100644 --- a/simgear/environment/metar.hxx +++ b/simgear/environment/metar.hxx @@ -16,7 +16,7 @@ // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software -// Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // // $Id$ @@ -29,16 +29,16 @@ #include -SG_USING_STD(vector); -SG_USING_STD(map); -SG_USING_STD(string); +using std::vector; +using std::map; +using std::string; const double SGMetarNaN = -1E20; #define NaN SGMetarNaN struct Token { - char *id; - char *text; + const char *id; + const char *text; }; @@ -130,25 +130,38 @@ protected: class SGMetarCloud { friend class SGMetar; public: - SGMetarCloud() : - _coverage(-1), - _altitude(NaN), - _type(0), - _type_long(0) {} + enum Coverage { + COVERAGE_NIL = -1, + COVERAGE_CLEAR = 0, + COVERAGE_FEW = 1, + COVERAGE_SCATTERED = 2, + COVERAGE_BROKEN = 3, + COVERAGE_OVERCAST = 4 + }; + + static const char * COVERAGE_NIL_STRING; + static const char * COVERAGE_CLEAR_STRING; + static const char * COVERAGE_FEW_STRING; + static const char * COVERAGE_SCATTERED_STRING; + static const char * COVERAGE_BROKEN_STRING; + static const char * COVERAGE_OVERCAST_STRING; - void set(double alt, int cov = -1); + SGMetarCloud() : _coverage(COVERAGE_NIL), _altitude(NaN), _type(0), _type_long(0) {} - inline int getCoverage() const { return _coverage; } - inline double getAltitude_m() const { return _altitude; } - inline double getAltitude_ft() const { return _altitude == NaN ? NaN : _altitude * SG_METER_TO_FEET; } - inline char *getTypeString() const { return _type; } - inline char *getTypeLongString() const { return _type_long; } + void set(double alt, Coverage cov = COVERAGE_NIL ); + + inline Coverage getCoverage() const { return _coverage; } + static Coverage getCoverage( const std::string & coverage ); + inline double getAltitude_m() const { return _altitude; } + inline double getAltitude_ft() const { return _altitude == NaN ? NaN : _altitude * SG_METER_TO_FEET; } + inline const char *getTypeString() const { return _type; } + inline const char *getTypeLongString() const { return _type_long; } protected: - int _coverage; // quarters: 0 -> clear ... 4 -> overcast - double _altitude; // 1000 m - char *_type; // CU - char *_type_long; // cumulus + Coverage _coverage; // quarters: 0 -> clear ... 4 -> overcast + double _altitude; // 1000 m + const char *_type; // CU + const char *_type_long; // cumulus }; @@ -165,6 +178,21 @@ public: RTD }; + enum Intensity { + NIL = 0, + LIGHT = 1, + MODERATE = 2, + HEAVY = 3 + }; + + struct Weather { + Weather() { intensity = NIL; vincinity = false; } + Intensity intensity; + bool vincinity; + vector descriptions; + vector phenomena; + }; + inline const char *getData() const { return _data; } inline const char *getUnusedData() const { return _m; } inline const bool getProxy() const { return _x_proxy; } @@ -212,6 +240,7 @@ public: inline const vector& getClouds() const { return _clouds; } inline const map& getRunways() const { return _runways; } inline const vector& getWeather() const { return _weather; } + inline const vector getWeather2() const { return _weather2; } protected: string _url; @@ -238,6 +267,7 @@ protected: int _hail; int _snow; bool _cavok; + vector _weather2; SGMetarVisibility _min_visibility; SGMetarVisibility _max_visibility;