8 #include <dballe/fwd.h> 42 Date(
int ye,
int mo=1,
int da=1);
75 bool operator<(
const Date& dt)
const;
76 bool operator>(
const Date& dt)
const;
77 bool operator==(
const Date& dt)
const;
78 bool operator!=(
const Date& dt)
const;
81 static void validate(
int ye,
int mo,
int da);
87 static void julian_to_calendar(
int jday,
unsigned short& year,
unsigned char& month,
unsigned char& day);
90 std::ostream& operator<<(std::ostream& out,
const Date& dt);
102 unsigned char minute;
103 unsigned char second;
114 Time(
int ho,
int mi=0,
int se=0);
141 bool operator<(
const Time& dt)
const;
142 bool operator>(
const Time& dt)
const;
143 bool operator==(
const Time& dt)
const;
144 bool operator!=(
const Time& dt)
const;
152 static void validate(
int ho,
int mi,
int se);
155 std::ostream& operator<<(std::ostream& out,
const Time& t);
170 unsigned char minute;
171 unsigned char second;
183 Datetime(
int ye,
int mo=1,
int da=1,
int ho=0,
int mi=0,
int se=0);
227 bool operator==(
const Datetime& o)
const;
228 bool operator!=(
const Datetime& o)
const;
229 bool operator<(
const Datetime& o)
const;
230 bool operator>(
const Datetime& o)
const;
231 bool operator<=(
const Datetime& o)
const;
232 bool operator>=(
const Datetime& o)
const;
237 int print_iso8601(FILE* out,
char sep=
'T',
const char* end=
"\n")
const;
242 int print(FILE* out,
const char* end=
"\n")
const;
251 void to_stream_iso8601(std::ostream& out,
char sep=
'T',
const char* tz=
"")
const;
259 std::string
to_string(
char sep=
'T',
const char* tz=
"")
const;
276 static void validate(
int ye,
int mo,
int da,
int ho,
int mi,
int se);
282 static void normalise_h24(
int& ye,
int& mo,
int& da,
int& ho,
int& mi,
int& se);
285 std::ostream& operator<<(std::ostream& out,
const Datetime& dt);
304 int yemin,
int momin,
int damin,
int homin,
int mimin,
int semin,
305 int yemax,
int momax,
int damax,
int homax,
int mimax,
int semax);
332 void set(
int yemin,
int momin,
int damin,
int homin,
int mimin,
int semin,
333 int yemax,
int momax,
int damax,
int homax,
int mimax,
int semax);
351 int print(FILE* out,
const char* end=
"\n")
const;
354 std::ostream& operator<<(std::ostream& out,
const DatetimeRange& dtr);
402 void set(
int lat,
int lon);
405 void set(
double lat,
double lon);
425 bool operator==(
const Coords& o)
const;
426 bool operator!=(
const Coords& o)
const;
427 bool operator<(
const Coords& o)
const;
428 bool operator>(
const Coords& o)
const;
429 bool operator<=(
const Coords& o)
const;
430 bool operator>=(
const Coords& o)
const;
433 int print(FILE* out,
const char* end=
"\n")
const;
436 std::string
to_string(
const char* undef=
"-")
const;
451 std::ostream& operator<<(std::ostream&,
const Coords&);
470 static constexpr
int IMIN = -9000000;
472 static constexpr
int IMAX = 9000000;
474 static constexpr
double DMIN = -90.0;
476 static constexpr
double DMAX = 90.0;
490 bool operator==(
const LatRange& lr)
const;
491 bool operator!=(
const LatRange& lr)
const;
503 void get(
double& min,
double& max)
const;
506 void set(
int min,
int max);
509 void set(
double min,
double max);
526 int print(FILE* out,
const char* end=
"\n")
const;
529 std::ostream& operator<<(std::ostream& out,
const LatRange& lr);
565 bool operator==(
const LonRange& lr)
const;
566 bool operator!=(
const LonRange& lr)
const;
582 void get(
double& min,
double& max)
const;
588 void set(
int min,
int max);
594 void set(
double min,
double max);
617 int print(FILE* out,
const char* end=
"\n")
const;
620 std::ostream& operator<<(std::ostream& out,
const LonRange& lr);
641 bool operator==(
const Level& o)
const;
642 bool operator!=(
const Level& o)
const;
643 bool operator<(
const Level& o)
const;
644 bool operator>(
const Level& o)
const;
645 bool operator<=(
const Level& o)
const;
646 bool operator>=(
const Level& o)
const;
663 void to_stream(std::ostream& out,
const char* undef=
"-")
const;
666 std::string
to_string(
const char* undef=
"-")
const;
677 int print(FILE* out,
const char* undef=
"-",
const char* end=
"\n")
const;
680 std::ostream& operator<<(std::ostream& out,
const Level& l);
695 Trange(
int pind=MISSING_INT,
int p1=MISSING_INT,
int p2=MISSING_INT)
710 bool operator==(
const Trange& o)
const;
711 bool operator!=(
const Trange& o)
const;
712 bool operator<(
const Trange& o)
const;
713 bool operator>(
const Trange& o)
const;
714 bool operator<=(
const Trange& o)
const;
715 bool operator>=(
const Trange& o)
const;
723 void to_stream(std::ostream& out,
const char* undef=
"-")
const;
726 std::string
to_string(
const char* undef=
"-")
const;
737 int print(FILE* out,
const char* undef=
"-",
const char* end=
"\n")
const;
740 std::ostream& operator<<(std::ostream& out,
const Trange& l);
750 char* value =
nullptr;
754 Ident(
const char* value);
755 Ident(
const std::string& value);
761 Ident& operator=(
const char* o);
762 Ident& operator=(
const std::string& o);
765 const char*
get()
const {
return value; }
770 int compare(
const Ident& o)
const;
771 int compare(
const char* o)
const;
772 int compare(
const std::string& o)
const;
773 template<
typename T>
bool operator==(
const T& o)
const {
return compare(o) == 0; }
774 template<
typename T>
bool operator!=(
const T& o)
const {
return compare(o) != 0; }
775 template<
typename T>
bool operator<(
const T& o)
const {
return compare(o) < 0; }
776 template<
typename T>
bool operator<=(
const T& o)
const {
return compare(o) <= 0; }
777 template<
typename T>
bool operator>(
const T& o)
const {
return compare(o) > 0; }
778 template<
typename T>
bool operator>=(
const T& o)
const {
return compare(o) >= 0; }
783 operator const char*()
const {
return value; }
784 operator std::string()
const;
787 std::ostream& operator<<(std::ostream&,
const Ident&);
810 bool operator==(
const Station& o)
const 814 bool operator!=(
const Station& o)
const 818 bool operator<(
const Station& o)
const 822 bool operator<=(
const Station& o)
const 826 bool operator>(
const Station& o)
const 830 bool operator>=(
const Station& o)
const 841 int print(FILE* out,
const char* end=
"\n")
const;
844 std::string
to_string(
const char* undef=
"-")
const;
847 std::ostream& operator<<(std::ostream&,
const Station&);
857 int id = MISSING_INT;
865 bool operator==(
const DBStation& o)
const 869 bool operator!=(
const DBStation& o)
const 873 bool operator<(
const DBStation& o)
const 875 return std::tie(
id,
report,
coords,
ident) < std::tie(o.id, o.report, o.coords, o.ident);
877 bool operator<=(
const DBStation& o)
const 879 return std::tie(
id,
report,
coords,
ident) <= std::tie(o.id, o.report, o.coords, o.ident);
881 bool operator>(
const DBStation& o)
const 883 return std::tie(
id,
report,
coords,
ident) > std::tie(o.id, o.report, o.coords, o.ident);
885 bool operator>=(
const DBStation& o)
const 887 return std::tie(
id,
report,
coords,
ident) >= std::tie(o.id, o.report, o.coords, o.ident);
896 int print(FILE* out,
const char* end=
"\n")
const;
899 std::string
to_string(
const char* undef=
"-")
const;
902 std::ostream& operator<<(std::ostream&,
const DBStation&);
911 typedef size_t result_type;
912 result_type operator()(
argument_type const& o)
const noexcept;
918 typedef size_t result_type;
919 result_type operator()(
argument_type const& o)
const noexcept;
925 typedef size_t result_type;
926 result_type operator()(
argument_type const& o)
const noexcept;
932 typedef size_t result_type;
933 result_type operator()(
argument_type const& o)
const noexcept;
939 typedef size_t result_type;
940 result_type operator()(
argument_type const& o)
const noexcept;
943 template<>
struct hash<
dballe::DBStation>
946 typedef size_t result_type;
947 result_type operator()(
argument_type const& o)
const noexcept;
double dmax() const
Get the upper extreme as double.
Time time() const
Return a Time with this time.
int ltype1
Type of the level or the first layer.
Definition: types.h:627
static constexpr int IMIN
Minimum possible integer value.
Definition: types.h:470
void to_stream_iso8601(std::ostream &out) const
Write the time to an output stream in ISO8601 extended format (hh:mm:ss).
LonRange()=default
Construct a range that matches any longitude.
int ltype2
Type of the the second layer.
Definition: types.h:631
void to_csv_iso8601(CSVWriter &out) const
Write the time as a CSV field in ISO8601 date format.
Ident ident
Mobile station identifier.
Definition: types.h:802
Coords()=default
Construct a missing Coords.
std::string describe() const
Return a string description of this time range.
double dlat() const
Get the latitude in degrees.
Datetime()
Construct a missing datetime.
bool contains(int lat) const
Check if a point is inside this range (extremes included)
Station information.
Definition: types.h:793
bool is_missing() const
Check if the Ident is set to the missing value.
Date date() const
Return a Date with this date.
static void validate(int ye, int mo, int da)
Raise an exception if the three values do not represent a valid date.
Time()
Construct a missing time.
int compare(const Time &other) const
Generic comparison.
static Trange instant()
Time range for instant values.
bool is_missing() const
Return true if the LatRange matches any latitude.
int print(FILE *out, const char *undef="-", const char *end="\) const
Print to an output stream.
static void julian_to_calendar(int jday, unsigned short &year, unsigned char &month, unsigned char &day)
Convert a Julian day into a calendar date.
int compare(const Trange &t) const
Generic comparison.
Calendar date.
Definition: types.h:27
bool is_missing() const
Check if this range is open on both sides.
bool is_missing() const
Return true if all the station fields are empty.
Coords coords
Station coordinates.
Definition: types.h:799
static Datetime upper_bound(int ye, int mo, int da, int ho, int mi, int se)
Return a Datetime filling the parts set to MISSING_INT with their highest possible values...
Coordinates.
Definition: types.h:368
static constexpr int IMAX
Maximum possible integer value.
Definition: types.h:472
std::string to_string(const char *undef="-") const
Format to a string.
int p1
Time range P1 indicator.
Definition: types.h:691
void to_csv(CSVWriter &out) const
Write the datetime to a CSV writer as 3 fields.
int print_iso8601(FILE *out, char sep='T', const char *end="\) const
Print to an output stream in ISO8601 combined format.
std::string to_string(const char *undef="-") const
Format to a string.
static int calendar_to_julian(int year, int month, int day)
Convert a calendar date into a Julian day.
int imin
Initial point of the longitude range.
Definition: types.h:554
std::string to_string(const char *undef="-") const
Format to a string.
void set_lat(double lat)
Set the latitude only.
Information on how a value has been sampled or computed with regards to time.
Definition: types.h:686
int print(FILE *out, const char *end="\) const
Print to an output stream.
static constexpr double DMAX
Maximum possible double value.
Definition: types.h:476
static void normalise_h24(int &ye, int &mo, int &da, int &ho, int &mi, int &se)
Convert a datetime with an hour of 24:00:00 to hour 00:00:00 of the following day.
void to_stream(std::ostream &out, const char *undef="-") const
Format to an output stream.
int pind
Time range type indicator.
Definition: types.h:689
static int lon_to_int(double lat)
Convert a longitude to the internal integer representation.
void set_lower_bound()
Fill possibly missing fields with their lowest valid value.
double dmax() const
Get the upper extreme as double, or 180.0 if missing.
void to_stream_iso8601(std::ostream &out) const
Write the date to an output stream in ISO8601 date format.
int print(FILE *out, const char *end="\) const
Print the Station to a FILE*.
static int lat_to_int(double lat)
Convert a latitude to the internal integer representation.
static Datetime from_julian(int jday, int ho=0, int mi=0, int se=0)
Set the date from a Julian day.
int to_julian() const
Convert the date to Julian day.
int print(FILE *out, const char *end="\) const
Print to an output stream in ISO8601 combined format.
static Date from_julian(int jday)
Create a date from a Julian day.
static constexpr double DMIN
Minimum possible double value.
Definition: types.h:474
bool is_missing() const
Return true if all the station fields are empty.
bool contains(int lon) const
Check if a point is inside this range (extremes included)
void to_stream_iso8601(std::ostream &out, char sep='T', const char *tz="") const
Write the datetime to an output stream in ISO8601 combined format.
int print(FILE *out, const char *end="\) const
Print the Station to a FILE*.
Vertical level or layer.
Definition: types.h:624
int print(FILE *out, const char *end="\) const
Print the LonRange to a FILE*.
bool is_missing() const
Return true if the LonRange matches any longitude.
A station identifier, that can be any string (including the empty string) or a missing value...
Definition: types.h:747
static Datetime lower_bound(int ye, int mo, int da, int ho, int mi, int se)
Return a Datetime filling the parts set to MISSING_INT with their lowest possible values...
static double lon_from_int(int lon)
Convert a longitude from the internal integer representation.
std::string to_string(char sep='T', const char *tz="") const
Write to a string in ISO8601 combined format.
int l2
L2 value of the second layer.
Definition: types.h:633
int to_julian() const
Convert the date to Julian day.
bool is_missing() const
Check if this date is the missing value.
bool contains(const Datetime &dt) const
Check if a Datetime is inside this range.
void set_upper_bound()
Fill possibly missing fields with their highest valid value.
Range of datetimes.
Definition: types.h:294
std::string to_string(const char *undef="-") const
Format to a string.
int imax
Final point of the longitude range.
Definition: types.h:556
void to_csv_iso8601(CSVWriter &out) const
Write the date as a CSV field in ISO8601 date format.
Datetime max
Upper bound of the range.
Definition: types.h:299
bool is_missing() const
Check if this time is the missing value.
void clear()
Set to missing value.
void to_stream(std::ostream &out, const char *undef="-") const
Format to an output stream.
std::string report
Report name for this station.
Definition: types.h:796
int lat
Latitude in 1/100000 of a degree (5 significant digits preserved)
Definition: types.h:371
int imin
Minimum latitude.
Definition: types.h:479
int id
Database ID of the station.
Definition: types.h:857
Range of latitudes.
Definition: types.h:467
static void validate(int ye, int mo, int da, int ho, int mi, int se)
Raise an exception if the three values do not represent a valid date/time.
Time of the day.
Definition: types.h:99
LatRange()=default
Construct a LatRange matching any latitude.
Datetime min
Lower bound of the range.
Definition: types.h:297
int lon
Longitude in 1/100000 of a degree (5 significant digits preserved) and normalised between -180...
Definition: types.h:377
int compare(const Coords &o) const
Compare two Coords strutures, for use in sorting.
double dmin() const
Get the lower extreme as double.
int print(FILE *out, const char *end="\) const
Print to an output stream in ISO8601 combined format.
void to_csv_iso8601(CSVWriter &out, char sep='T', const char *tz="") const
Write the datetime as a CSV field in ISO8601 date format.
Date and time.
Definition: types.h:164
int imax
Maximum latitude.
Definition: types.h:481
int compare(const Level &l) const
Generic comparison.
bool is_disjoint(const DatetimeRange &dtr) const
Check if the two ranges are completely disjoint.
static Datetime from_iso8601(const char *str)
Parse an ISO8601 datetime string.
int compare(const Date &other) const
Generic comparison.
double dlon() const
Get the longitude in degrees.
bool is_missing() const
Check if this datetime is the missing value.
Date()
Construct a missing date.
bool is_missing() const
Check if these coordinates are undefined.
std::string describe() const
Return a string description of this level.
static double lat_from_int(int lat)
Convert a latitude from the internal integer representation.
void merge(const DatetimeRange &range)
Merge range into this one, resulting in the smallest range that contains both.
static int days_in_month(int year, int month)
Return the number of days in the given month.
Range of longitudes.
Definition: types.h:551
int print(FILE *out, const char *undef="-", const char *end="\) const
Print to an output stream.
int l1
L1 value of the level or the first layer.
Definition: types.h:629
int compare(const Datetime &other) const
Generic comparison.
static Level cloud(int ltype2=MISSING_INT, int l2=MISSING_INT)
Create a cloud special level.
int p2
Time range P2 indicator.
Definition: types.h:693
void set_lon(double lon)
Set the longitude only.
bool is_missing() const
Check if this level is fully set to the missing value.
std::string to_string(const char *undef="-") const
Format to a string.
int print(FILE *out, const char *end="\) const
Print the LatRange to a FILE*.
static void validate(int ho, int mi, int se)
Raise an exception if the three values do not represent a valid time.
double dmin() const
Get the lower extreme as double, or -180.0 if missing.
void to_csv(CSVWriter &out) const
Write the datetime to a CSV writer as 4 fields.
bool is_missing() const
Check if this level is fully set to the missing value.