]> git.mxchange.org Git - simgear.git/blobdiff - simgear/environment/metar.hxx
Add optional attribute condition to "copyProperties".
[simgear.git] / simgear / environment / metar.hxx
index f255e103474f9043a72df3edb1717e72040ddaba..e501a0c4611ff8b8c6a235cd0cfb92063d6ef7c6 100644 (file)
@@ -29,9 +29,9 @@
 
 #include <simgear/constants.h>
 
-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
@@ -130,18 +130,35 @@ 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; }
+       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
+       Coverage _coverage;     // quarters: 0 -> clear ... 4 -> overcast
        double _altitude;       // 1000 m
        const char *_type;      // CU
        const char *_type_long; // cumulus
@@ -161,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<string> descriptions;
+               vector<string> phenomena;
+       };
+
        inline const char *getData()            const { return _data; }
        inline const char *getUnusedData()      const { return _m; }
        inline const bool getProxy()            const { return _x_proxy; }
@@ -208,6 +240,7 @@ public:
        inline const vector<SGMetarCloud>& getClouds()  const   { return _clouds; }
        inline const map<string, SGMetarRunway>& getRunways()   const   { return _runways; }
        inline const vector<string>& getWeather()               const   { return _weather; }
+       inline const vector<struct Weather> getWeather2()       const   { return _weather2; }
 
 protected:
        string  _url;
@@ -234,6 +267,7 @@ protected:
        int     _hail;
        int     _snow;
        bool    _cavok;
+       vector<struct Weather> _weather2;
 
        SGMetarVisibility               _min_visibility;
        SGMetarVisibility               _max_visibility;