17 static constexpr
int MISSING_INT = INT_MAX;
40 Date(
int ye,
int mo=1,
int da=1);
73 bool operator<(
const Date& dt)
const;
74 bool operator>(
const Date& dt)
const;
75 bool operator==(
const Date& dt)
const;
76 bool operator!=(
const Date& dt)
const;
79 static void validate(
int ye,
int mo,
int da);
85 static void julian_to_calendar(
int jday,
unsigned short& year,
unsigned char& month,
unsigned char& day);
110 Time(
int ho,
int mi=0,
int se=0);
137 bool operator<(
const Time& dt)
const;
138 bool operator>(
const Time& dt)
const;
139 bool operator==(
const Time& dt)
const;
140 bool operator!=(
const Time& dt)
const;
148 static void validate(
int ho,
int mi,
int se);
164 unsigned char minute;
165 unsigned char second;
177 Datetime(
int ye,
int mo=1,
int da=1,
int ho=0,
int mi=0,
int se=0);
215 bool operator==(
const Datetime& dt)
const;
216 bool operator!=(
const Datetime& dt)
const;
217 bool operator<(
const Datetime& dt)
const;
218 bool operator>(
const Datetime& dt)
const;
219 bool operator<=(
const Datetime& dt)
const;
220 bool operator>=(
const Datetime& dt)
const;
225 int print_iso8601(FILE* out,
char sep=
'T',
const char* end=
"\n")
const;
234 void to_stream_iso8601(std::ostream& out,
char sep=
'T',
const char* tz=
"")
const;
256 static void validate(
int ye,
int mo,
int da,
int ho,
int mi,
int se);
262 static void normalise_h24(
int& ye,
int& mo,
int& da,
int& ho,
int& mi,
int& se);
282 int yemin,
int momin,
int damin,
int homin,
int mimin,
int semin,
283 int yemax,
int momax,
int damax,
int homax,
int mimax,
int semax);
306 void set(
int yemin,
int momin,
int damin,
int homin,
int mimin,
int semin,
307 int yemax,
int momax,
int damax,
int homax,
int mimax,
int semax);
382 bool operator==(
const Coords& dt)
const;
383 bool operator!=(
const Coords& dt)
const;
384 bool operator<(
const Coords& dt)
const;
385 bool operator>(
const Coords& dt)
const;
386 bool operator<=(
const Coords& dt)
const;
387 bool operator>=(
const Coords& dt)
const;
390 int print(FILE* out,
const char* end=
"\n")
const;
410 static constexpr
int IMIN = -9000000;
412 static constexpr
int IMAX = 9000000;
414 static constexpr
double DMIN = -90.0;
416 static constexpr
double DMAX = 90.0;
430 bool operator==(
const LatRange& lr)
const;
431 bool operator!=(
const LatRange& lr)
const;
443 void get(
double& min,
double& max)
const;
446 void set(
int min,
int max);
449 void set(
double min,
double max);
495 bool operator==(
const LonRange& lr)
const;
496 bool operator!=(
const LonRange& lr)
const;
512 void get(
double& min,
double& max)
const;
515 void set(
int min,
int max);
518 void set(
double min,
double max);
549 bool operator==(
const Level& l)
const;
550 bool operator!=(
const Level& l)
const;
551 bool operator<(
const Level& l)
const;
552 bool operator>(
const Level& l)
const;
569 void to_stream(std::ostream& out,
const char* undef=
"-")
const;
580 int print(FILE* out,
const char* undef=
"-",
const char* end=
"\n")
const;
596 Trange(
int pind=MISSING_INT,
int p1=MISSING_INT,
int p2=MISSING_INT)
611 bool operator==(
const Trange& tr)
const;
612 bool operator!=(
const Trange& tr)
const;
613 bool operator<(
const Trange& t)
const;
614 bool operator>(
const Trange& t)
const;
622 void to_stream(std::ostream& out,
const char* undef=
"-")
const;
633 int print(FILE* out,
const char* undef=
"-",
const char* end=
"\n")
const;
int ltype1
Type of the level or the first layer. See Level type values.
Definition: types.h:535
static constexpr int IMIN
Minimum possible integer value.
Definition: types.h:410
int compare(const Time &other) const
Generic comparison.
LonRange()=default
Construct a range that matches any longitude.
int ltype2
Type of the the second layer. See Level type values.
Definition: types.h:539
bool is_disjoint(const DatetimeRange &dtr) const
Check if the two ranges are completely disjoint.
int compare(const Datetime &other) const
Generic comparison.
Datetime()
Construct a missing datetime.
int to_julian() const
Convert the date to Julian day.
int compare(const Date &other) const
Generic comparison.
bool is_missing() const
Check if this datetime 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.
Time()
Construct a missing time.
static Trange instant()
Time range for instant values.
static void julian_to_calendar(int jday, unsigned short &year, unsigned char &month, unsigned char &day)
Convert a Julian day into a calendar date.
void to_stream_iso8601(std::ostream &out) const
Write the date to an output stream in ISO8601 date format.
void set(int lat, int lon)
Set from integers in 1/100000 of a degree.
Calendar date.
Definition: types.h:25
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:337
static constexpr int IMAX
Maximum possible integer value.
Definition: types.h:412
int p1
Time range P1 indicator.
Definition: types.h:592
void set(int min, int max)
Set the extremes as integers.
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:484
Information on how a value has been sampled or computed with regards to time.
Definition: types.h:587
static constexpr double DMAX
Maximum possible double value.
Definition: types.h:416
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.
bool is_missing() const
Check if these coordinates are undefined.
int pind
Time range type indicator.
Definition: types.h:590
static Datetime from_julian(int jday, int ho=0, int mi=0, int se=0)
Set the date from a Julian day.
Coords()
Construct a missing Coords.
double dmax() const
Get the upper extreme as double, or 180.0 if missing.
bool contains(const Datetime &dt) const
Check if a Datetime is inside this range.
void to_csv(CSVWriter &out) const
Write the datetime to a CSV writer as 3 fields.
void set(int min, int max)
Set the extremes as integers.
double dmax() const
Get the upper extreme as double.
static Date from_julian(int jday)
Create a date from a Julian day.
static constexpr double DMIN
Minimum possible double value.
Definition: types.h:414
bool is_missing() const
Check if this time is the missing value.
Vertical level or layer.
Definition: types.h:532
int compare(const Coords &o) const
Compare two Coords strutures, for use in sorting.
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...
double dmin() const
Get the lower extreme as double, or -180.0 if missing.
double dmin() const
Get the lower extreme as double.
int l2
L2 value of the second layer. See Level type values.
Definition: types.h:541
double dlat() const
Get the latitude in degrees.
void to_csv_iso8601(CSVWriter &out) const
Write the date as a CSV field in ISO8601 date format.
Range of datetimes.
Definition: types.h:272
int compare(const Level &l) const
Generic comparison.
int imax
Final point of the longitude range.
Definition: types.h:486
void to_csv_iso8601(CSVWriter &out, char sep='T', const char *tz="") const
Write the datetime as a CSV field in ISO8601 date 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.
int print(FILE *out, const char *undef="-", const char *end="\n") const
Print to an output stream.
bool contains(int lon) const
Check if a point is inside this range (extremes included)
Datetime max
Upper bound of the range.
Definition: types.h:277
int lat
Latitude in 1/100000 of a degree (5 significant digits preserved)
Definition: types.h:340
int imin
Minimum latitude.
Definition: types.h:419
int print(FILE *out, const char *end="\n") const
Print to an output stream.
Range of latitudes.
Definition: types.h:407
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:95
LatRange()=default
Construct a LatRange matching any latitude.
Datetime min
Lower bound of the range.
Definition: types.h:275
int lon
Longitude in 1/100000 of a degree (5 significant digits preserved) and normalised between -180...
Definition: types.h:346
void to_stream_iso8601(std::ostream &out) const
Write the time to an output stream in ISO8601 extended format (hh:mm:ss).
bool is_missing() const
Return true if the LatRange matches any latitude.
bool is_missing() const
Check if this date is the missing value.
int compare(const Trange &t) const
Generic comparison.
bool is_missing() const
Check if this level is fully set to the missing value.
void set(const Datetime &min, const Datetime &max)
Set the extremes.
Date and time.
Definition: types.h:158
int print_iso8601(FILE *out, char sep='T', const char *end="\n") const
Print to an output stream in ISO8601 combined format.
int imax
Maximum latitude.
Definition: types.h:421
Time time() const
Return a Time with this time.
static Datetime from_iso8601(const char *str)
Parse an ISO8601 datetime string.
Date()
Construct a missing date.
int to_julian() const
Convert the date to Julian day.
bool is_missing() const
Check if this range is open on both sides.
void to_csv_iso8601(CSVWriter &out) const
Write the time as a CSV field in ISO8601 date format.
double dlon() const
Get the longitude in degrees.
bool is_missing() const
Return true if the LonRange matches any longitude.
void merge(const DatetimeRange &range)
Merge range into this one, resulting in the smallest range that contains both.
void to_stream(std::ostream &out, const char *undef="-") const
Format to an output stream.
static int days_in_month(int year, int month)
Return the number of days in the given month.
Range of longitudes.
Definition: types.h:481
void to_csv(CSVWriter &out) const
Write the datetime to a CSV writer as 4 fields.
int l1
L1 value of the level or the first layer. See Level type values.
Definition: types.h:537
bool is_missing() const
Check if this level is fully set to the missing value.
static Level cloud(int ltype2=MISSING_INT, int l2=MISSING_INT)
Create a cloud special level. See Level type values.
int p2
Time range P2 indicator.
Definition: types.h:594
Date date() const
Return a Date with this date.
int print(FILE *out, const char *undef="-", const char *end="\n") const
Print to an output stream.
bool contains(int lat) const
Check if a point is inside this range (extremes included)
std::string describe() const
Return a string description of this time range.
std::string describe() const
Return a string description of this level.
void to_stream(std::ostream &out, const char *undef="-") const
Format to an output stream.
static void validate(int ho, int mi, int se)
Raise an exception if the three values do not represent a valid time.