//
// 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$
DECREASING
};
+ void set(double dist, int dir = -1, int mod = -1, int tend = -1);
+
inline double getVisibility_m() const { return _distance; }
inline double getVisibility_ft() const { return _distance == NaN ? NaN : _distance * SG_METER_TO_FEET; }
inline double getVisibility_sm() const { return _distance == NaN ? NaN : _distance * SG_METER_TO_SM; }
friend class SGMetar;
public:
SGMetarRunway() :
- _deposit(0),
+ _deposit(-1),
+ _deposit_string(0),
_extent(-1),
_extent_string(0),
_depth(NaN),
_comment(0),
_wind_shear(false) {}
- inline const char *getDeposit() const { return _deposit; }
+ inline int getDeposit() const { return _deposit; }
+ inline const char *getDepositString() const { return _deposit_string; }
inline double getExtent() const { return _extent; }
inline const char *getExtentString() const { return _extent_string; }
inline double getDepth() const { return _depth; }
inline const char *getFrictionString() const { return _friction_string; }
inline const char *getComment() const { return _comment; }
inline const bool getWindShear() const { return _wind_shear; }
- inline SGMetarVisibility getMinVisibility() const { return _min_visibility; }
- inline SGMetarVisibility getMaxVisibility() const { return _max_visibility; }
+ inline const SGMetarVisibility& getMinVisibility() const { return _min_visibility; }
+ inline const SGMetarVisibility& getMaxVisibility() const { return _max_visibility; }
protected:
SGMetarVisibility _min_visibility;
SGMetarVisibility _max_visibility;
- const char *_deposit;
+ int _deposit;
+ const char *_deposit_string;
int _extent;
const char *_extent_string;
double _depth;
_type(0),
_type_long(0) {}
+ void set(double alt, int cov = -1);
+
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; }
class SGMetar {
public:
- SGMetar(const char *m);
-
- // The following contructor is tempting, but it is not
- // correct, it creates an anonymous instance of SGMetar and
- // then immediately throws it away.
- // SGMetar(const string m) { SGMetar(m.c_str()); }
-
+ SGMetar(const string& m, const string& proxy = "", const string& port = "",
+ const string &auth = "", const time_t time = 0);
~SGMetar();
enum ReportType {
inline const char *getData() const { return _data; }
inline const char *getUnusedData() const { return _m; }
+ inline const bool getProxy() const { return _x_proxy; }
inline const char *getId() const { return _icao; }
inline int getYear() const { return _year; }
inline int getMonth() const { return _month; }
inline int getWindDir() const { return _wind_dir; }
inline double getWindSpeed_mps() const { return _wind_speed; }
- inline double getWindSpeed_kmh() const { return _wind_speed == NaN ? NaN : _wind_speed * 3.6; }
+ inline double getWindSpeed_kmh() const { return _wind_speed == NaN ? NaN : _wind_speed * SG_MPS_TO_KMH; }
inline double getWindSpeed_kt() const { return _wind_speed == NaN ? NaN : _wind_speed * SG_MPS_TO_KT; }
inline double getWindSpeed_mph() const { return _wind_speed == NaN ? NaN : _wind_speed * SG_MPS_TO_MPH; }
inline double getGustSpeed_mps() const { return _gust_speed; }
- inline double getGustSpeed_kmh() const { return _gust_speed == NaN ? NaN : _gust_speed * 3.6; }
+ inline double getGustSpeed_kmh() const { return _gust_speed == NaN ? NaN : _gust_speed * SG_MPS_TO_KMH; }
inline double getGustSpeed_kt() const { return _gust_speed == NaN ? NaN : _gust_speed * SG_MPS_TO_KT; }
inline double getGustSpeed_mph() const { return _gust_speed == NaN ? NaN : _gust_speed * SG_MPS_TO_MPH; }
inline int getWindRangeFrom() const { return _wind_range_from; }
inline int getWindRangeTo() const { return _wind_range_to; }
- inline SGMetarVisibility& getMinVisibility() { return _min_visibility; }
- inline SGMetarVisibility& getMaxVisibility() { return _max_visibility; }
- inline SGMetarVisibility& getVertVisibility() { return _vert_visibility; }
- inline SGMetarVisibility *getDirVisibility() { return _dir_visibility; }
+ inline const SGMetarVisibility& getMinVisibility() const { return _min_visibility; }
+ inline const SGMetarVisibility& getMaxVisibility() const { return _max_visibility; }
+ inline const SGMetarVisibility& getVertVisibility() const { return _vert_visibility; }
+ inline const SGMetarVisibility *getDirVisibility() const { return _dir_visibility; }
inline double getTemperature_C() const { return _temp; }
inline double getTemperature_F() const { return _temp == NaN ? NaN : 1.8 * _temp + 32; }
inline double getPressure_hPa() const { return _pressure == NaN ? NaN : _pressure / 100; }
inline double getPressure_inHg() const { return _pressure == NaN ? NaN : _pressure * SG_PA_TO_INHG; }
+ inline int getRain() const { return _rain; }
+ inline int getHail() const { return _hail; }
+ inline int getSnow() const { return _snow; }
+ inline bool getCAVOK() const { return _cavok; }
+
double getRelHumidity() const;
- inline vector<SGMetarCloud>& getClouds() { return _clouds; }
- inline map<string, SGMetarRunway>& getRunways() { return _runways; }
- inline vector<string>& getWeather() { return _weather; }
+ 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; }
protected:
+ string _url;
int _grpcount;
+ bool _x_proxy;
char *_data;
char *_m;
char _icao[5];
double _temp;
double _dewp;
double _pressure;
+ int _rain;
+ int _hail;
+ int _snow;
+ bool _cavok;
SGMetarVisibility _min_visibility;
SGMetarVisibility _max_visibility;
bool scanPreambleDate();
bool scanPreambleTime();
+ void useCurrentDate();
bool scanType();
bool scanId();
int scanNumber(char **str, int *num, int min, int max = 0);
bool scanBoundary(char **str);
const struct Token *scanToken(char **str, const struct Token *list);
- char *loadData(const char *id);
+ char *loadData(const char *id, const string& proxy, const string& port,
+ const string &auth, time_t time);
void normalizeData();
};