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;
87 static void julian_to_calendar(
int jday,
unsigned short& year,
unsigned char& month,
unsigned char& day);
90std::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;
155std::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;
242 int print(FILE* out,
const char* end=
"\n")
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);
285std::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;
354std::ostream& operator<<(std::ostream& out,
const DatetimeRange& dtr);
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;
451std::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;
529std::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;
620std::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;
677 int print(FILE* out,
const char* undef=
"-",
const char* end=
"\n")
const;
680std::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;
737 int print(FILE* out,
const char* undef=
"-",
const char* end=
"\n")
const;
740std::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;
787std::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;
847std::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;
902std::ostream& operator<<(std::ostream&,
const DBStation&);
908template<>
struct hash<dballe::Level>
911 typedef size_t result_type;
912 result_type operator()(
argument_type const& o)
const noexcept;
915template<>
struct hash<dballe::Trange>
918 typedef size_t result_type;
919 result_type operator()(
argument_type const& o)
const noexcept;
922template<>
struct hash<dballe::Coords>
925 typedef size_t result_type;
926 result_type operator()(
argument_type const& o)
const noexcept;
929template<>
struct hash<dballe::Ident>
932 typedef size_t result_type;
933 result_type operator()(
argument_type const& o)
const noexcept;
936template<>
struct hash<dballe::Station>
939 typedef size_t result_type;
940 result_type operator()(
argument_type const& o)
const noexcept;
943template<>
struct hash<dballe::DBStation>
946 typedef size_t result_type;
947 result_type operator()(
argument_type const& o)
const noexcept;
A station identifier, that can be any string (including the empty string) or a missing value.
Definition: types.h:748
bool is_missing() const
Check if the Ident is set to the missing value.
const char * get() const
Get the string value (might be nullptr in case of missing value)
Definition: types.h:765
void clear()
Set to missing value.
Coordinates.
Definition: types.h:369
void set_lat(double lat)
Set the latitude only.
int compare(const Coords &o) const
Compare two Coords strutures, for use in sorting.
static int lon_to_int(double lat)
Convert a longitude to the internal integer representation.
Coords(int lat, int lon)
Construct a coords from integers in 1/100000 of a degree.
std::string to_string(const char *undef="-") const
Format to a string.
static double lon_from_int(int lon)
Convert a longitude from the internal integer representation.
double dlat() const
Get the latitude in degrees.
void set(int lat, int lon)
Set from integers in 1/100000 of a degree.
double dlon() const
Get the longitude in degrees.
void set_lon(double lon)
Set the longitude only.
static double lat_from_int(int lat)
Convert a latitude from the internal integer representation.
Coords()=default
Construct a missing Coords.
void set_lon(int lon)
Set the longitude only, in 1/100000 of a degree.
static int lat_to_int(double lat)
Convert a latitude to the internal integer representation.
int lon
Longitude in 1/100000 of a degree (5 significant digits preserved) and normalised between -180....
Definition: types.h:377
bool is_missing() const
Check if these coordinates are undefined.
int lat
Latitude in 1/100000 of a degree (5 significant digits preserved)
Definition: types.h:371
void set(double lat, double lon)
Set from values in degrees.
void set_lat(int lat)
Set the latitude only, in 1/100000 of a degree.
Coords(double lat, double lon)
Construct a coords from values in degrees.
int print(FILE *out, const char *end="\n") const
Print to an output stream.
bool is_missing() const
Return true if all the station fields are empty.
int id
Database ID of the station.
Definition: types.h:857
std::string to_string(const char *undef="-") const
Format to a string.
int print(FILE *out, const char *end="\n") const
Print the Station to a FILE*.
Calendar date.
Definition: types.h:28
int to_julian() const
Convert the date to Julian day.
static Date from_julian(int jday)
Create a date from a Julian day.
Date(const Date &d)=default
Copy constructor.
Date(int ye, int mo=1, int da=1)
Construct from broken down values.
bool is_missing() const
Check if this date is the missing value.
static void validate(int ye, int mo, int da)
Raise an exception if the three values do not represent a valid date.
void to_csv_iso8601(CSVWriter &out) const
Write the date as a CSV field in ISO8601 date format.
void to_stream_iso8601(std::ostream &out) const
Write the date to an output stream in ISO8601 date format.
static int days_in_month(int year, int month)
Return the number of days in the given month.
static void julian_to_calendar(int jday, unsigned short &year, unsigned char &month, unsigned char &day)
Convert a Julian day into a calendar date.
Date()
Construct a missing date.
int compare(const Date &other) const
Generic comparison.
static int calendar_to_julian(int year, int month, int day)
Convert a calendar date into a Julian day.
Range of datetimes.
Definition: types.h:295
Datetime min
Lower bound of the range.
Definition: types.h:297
bool contains(const Datetime &dt) const
Check if a Datetime is inside this range.
void merge(const DatetimeRange &range)
Merge range into this one, resulting in the smallest range that contains both.
bool contains(const DatetimeRange &dtr) const
Check if a range is inside this range (extremes included)
Datetime max
Upper bound of the range.
Definition: types.h:299
void set(const Datetime &min, const Datetime &max)
Set the extremes.
bool is_missing() const
Check if this range is open on both sides.
bool is_disjoint(const DatetimeRange &dtr) const
Check if the two ranges are completely disjoint.
void set(int yemin, int momin, int damin, int homin, int mimin, int semin, int yemax, int momax, int damax, int homax, int mimax, int semax)
Set the extremes from broken down components.
int print(FILE *out, const char *end="\n") const
Print to an output stream in ISO8601 combined format.
Date and time.
Definition: types.h:165
void set_upper_bound()
Fill possibly missing fields with their highest valid value.
static Datetime from_julian(int jday, int ho=0, int mi=0, int se=0)
Set the date from a Julian day.
int print(FILE *out, const char *end="\n") const
Print to an output stream in ISO8601 combined format.
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.
void to_csv_iso8601(CSVWriter &out, char sep='T', const char *tz="") const
Write the datetime as a CSV field in ISO8601 date format.
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.
Datetime(int ye, int mo=1, int da=1, int ho=0, int mi=0, int se=0)
Construct from broken down values.
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 Datetime from_iso8601(const char *str)
Parse an ISO8601 datetime string.
int compare(const Datetime &other) const
Generic comparison.
Time time() const
Return a Time with this time.
Datetime()
Construct a missing datetime.
Date date() const
Return a Date with this date.
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.
int print_iso8601(FILE *out, char sep='T', const char *end="\n") const
Print to an output stream in ISO8601 combined format.
int to_julian() const
Convert the date to Julian day.
std::string to_string(char sep='T', const char *tz="") const
Write to a string in ISO8601 combined format.
bool is_missing() const
Check if this datetime is the missing value.
void set_lower_bound()
Fill possibly missing fields with their lowest valid value.
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.
Range of latitudes.
Definition: types.h:468
bool contains(int lat) const
Check if a point is inside this range (extremes included)
static constexpr double DMAX
Maximum possible double value.
Definition: types.h:476
static constexpr double DMIN
Minimum possible double value.
Definition: types.h:474
LatRange(double min, double max)
Construct a LatRange given extremes in degrees.
bool contains(double lat) const
Check if a point is inside this range (extremes included)
int print(FILE *out, const char *end="\n") const
Print the LatRange to a FILE*.
double dmax() const
Get the upper extreme as double.
void set(int min, int max)
Set the extremes as integers.
int imax
Maximum latitude.
Definition: types.h:481
bool contains(const LatRange &lr) const
Check if a range is inside this range (extremes included)
static constexpr int IMAX
Maximum possible integer value.
Definition: types.h:472
double dmin() const
Get the lower extreme as double.
int imin
Minimum latitude.
Definition: types.h:479
static constexpr int IMIN
Minimum possible integer value.
Definition: types.h:470
LatRange()=default
Construct a LatRange matching any latitude.
LatRange(int min, int max)
Construct a LatRange given integer extremes.
void set(double min, double max)
Set the extremes in degrees.
void get(double &min, double &max) const
Get the extremes as double.
bool is_missing() const
Return true if the LatRange matches any latitude.
Vertical level or layer.
Definition: types.h:625
int l1
L1 value of the level or the first layer.
Definition: types.h:629
int l2
L2 value of the second layer.
Definition: types.h:633
int ltype1
Type of the level or the first layer.
Definition: types.h:627
int print(FILE *out, const char *undef="-", const char *end="\n") const
Print to an output stream.
int ltype2
Type of the the second layer.
Definition: types.h:631
void to_csv(CSVWriter &out) const
Write the datetime to a CSV writer as 4 fields.
int compare(const Level &l) const
Generic comparison.
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.
void to_stream(std::ostream &out, const char *undef="-") const
Format to an output stream.
static Level cloud(int ltype2=MISSING_INT, int l2=MISSING_INT)
Create a cloud special level.
std::string describe() const
Return a string description of this level.
Range of longitudes.
Definition: types.h:552
double dmin() const
Get the lower extreme as double, or -180.0 if missing.
int print(FILE *out, const char *end="\n") const
Print the LonRange to a FILE*.
int imin
Initial point of the longitude range.
Definition: types.h:554
int imax
Final point of the longitude range.
Definition: types.h:556
bool contains(const LonRange &lr) const
Check if a range is inside this range (extremes included)
bool is_missing() const
Return true if the LonRange matches any longitude.
void set(const LonRange &lr)
Set from another LonRange, throwing an error in case of open ended ranges.
void set(int min, int max)
Set the extremes as integers, throwing an error in case of open ended ranges.
LonRange()=default
Construct a range that matches any longitude.
bool contains(double lon) const
Check if a point is inside this range (extremes included)
double dmax() const
Get the upper extreme as double, or 180.0 if missing.
bool contains(int lon) const
Check if a point is inside this range (extremes included)
LonRange(double min, double max)
Construct a range given extremes in degrees.
void get(double &min, double &max) const
Get the extremes in degrees.
LonRange(int min, int max)
Construct a range given integer extremes.
void set(double min, double max)
Set the extremes in degrees, throwing an error in case of open ended ranges.
Station information.
Definition: types.h:794
int print(FILE *out, const char *end="\n") const
Print the Station to a FILE*.
Ident ident
Mobile station identifier.
Definition: types.h:802
bool is_missing() const
Return true if all the station fields are empty.
std::string to_string(const char *undef="-") const
Format to a string.
Coords coords
Station coordinates.
Definition: types.h:799
std::string report
Report name for this station.
Definition: types.h:796
Time of the day.
Definition: types.h:100
Time(int ho, int mi=0, int se=0)
Construct from broken down values.
Time()
Construct a missing time.
void to_csv_iso8601(CSVWriter &out) const
Write the time as a CSV field in ISO8601 date format.
void to_stream_iso8601(std::ostream &out) const
Write the time to an output stream in ISO8601 extended format (hh:mm:ss).
int compare(const Time &other) const
Generic comparison.
bool is_missing() const
Check if this time is the missing value.
static void validate(int ho, int mi, int se)
Raise an exception if the three values do not represent a valid time.
Information on how a value has been sampled or computed with regards to time.
Definition: types.h:687
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(FILE *out, const char *undef="-", const char *end="\n") const
Print to an output stream.
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 Trange instant()
Time range for instant values.
std::string describe() const
Return a string description of this time range.
int p2
Time range P2 indicator.
Definition: types.h:693
std::string to_string(const char *undef="-") const
Format to a string.
int compare(const Trange &t) const
Generic comparison.
bool is_missing() const
Check if this level is fully set to the missing value.