mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-23 00:02:38 -05:00
[FEATURE] Introduces mesh virtual datasets With the mesh calculator the user can choose to create those "virtual" dataset groups that will be added to the layer. Then, for these dataset groups, values are not stored in memory but each dataset is calculated when needed whit the formula entered in the mesh calculator. Those virtual dataset groups are saved with the project. If needed, the user can remove them or can persist them on files to make them persistent. Co-authored-by: Étienne Trimaille <gustrimaille@yahoo.fr>
124 lines
3.0 KiB
C++
124 lines
3.0 KiB
C++
/*
|
|
MDAL - Mesh Data Abstraction Library (MIT License)
|
|
Copyright (C) 2019 Vincent Cloarec (vcloarec at gmail dot com)
|
|
*/
|
|
|
|
#ifndef MDAL_DATE_TIME_HPP
|
|
#define MDAL_DATE_TIME_HPP
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "mdal.h"
|
|
|
|
namespace MDAL
|
|
{
|
|
|
|
class RelativeTimestamp
|
|
{
|
|
public:
|
|
enum Unit
|
|
{
|
|
milliseconds = 0,
|
|
seconds,
|
|
minutes,
|
|
hours,
|
|
days,
|
|
weeks,
|
|
months_CF,
|
|
exact_years
|
|
};
|
|
|
|
RelativeTimestamp();
|
|
RelativeTimestamp( double duration, Unit unit );
|
|
|
|
double value( Unit unit ) const;
|
|
|
|
bool operator==( const RelativeTimestamp &other ) const;
|
|
bool operator<( const RelativeTimestamp &other ) const;
|
|
|
|
private:
|
|
RelativeTimestamp( int64_t ms );
|
|
int64_t mDuration = 0; //in ms
|
|
|
|
friend class DateTime;
|
|
};
|
|
|
|
class DateTime
|
|
{
|
|
public:
|
|
|
|
enum Calendar
|
|
{
|
|
Gregorian = 0,
|
|
ProlepticGregorian,
|
|
Julian,
|
|
};
|
|
|
|
enum Epoch
|
|
{
|
|
Unix = 0,
|
|
JulianDay
|
|
};
|
|
|
|
DateTime();
|
|
//! Constructor with date/time values and calendar type
|
|
DateTime( int year, int month, int day, int hours = 0, int minutes = 0, double seconds = 0, Calendar calendar = Gregorian );
|
|
//! Constructor with Julian day or Unix Epoch
|
|
DateTime( double value, Epoch epoch );
|
|
|
|
//! Constructor with ISO 8601 string
|
|
DateTime( const std::string &fromISO8601 );
|
|
|
|
//! Returns a string with the date/time expressed in Greogrian proleptic calendar with ISO8601 format (local time zone)
|
|
//! Do not support negative year
|
|
std::string toStandardCalendarISO8601() const;
|
|
|
|
//! Returns the Julian day value
|
|
double toJulianDay() const;
|
|
|
|
//! Returns the Julain day value expressed with a string
|
|
std::string toJulianDayString() const;
|
|
|
|
//! Returns a array of int with {year,month,day,hours,minutes,seconds} with standard calendar format
|
|
std::vector<int> expandToCalendarArray() const;
|
|
|
|
//! operators
|
|
RelativeTimestamp operator-( const DateTime &other ) const;
|
|
DateTime operator+( const RelativeTimestamp &duration ) const;
|
|
DateTime operator-( const RelativeTimestamp &duration ) const;
|
|
bool operator==( const DateTime &other ) const;
|
|
bool operator<( const DateTime &other ) const;
|
|
|
|
bool isValid() const;
|
|
|
|
private:
|
|
|
|
struct DateTimeValues
|
|
{
|
|
int year;
|
|
int month;
|
|
int day;
|
|
int hours;
|
|
int minutes;
|
|
double seconds;
|
|
};
|
|
|
|
DateTime( int64_t julianTime );
|
|
|
|
DateTimeValues dateTimeGregorianProleptic() const;
|
|
|
|
void setWithGregorianCalendarDate( DateTimeValues values );
|
|
void setWithJulianCalendarDate( DateTimeValues values );
|
|
void setWithGregorianJulianCalendarDate( DateTimeValues values );//Uses the adapted formula depending of the date (< or > 1582-10-15)
|
|
|
|
std::string toString( DateTimeValues values ) const;
|
|
|
|
int64_t mJulianTime = 0; //Julian day in ms
|
|
|
|
bool mValid = false;
|
|
};
|
|
}
|
|
|
|
#endif // MDAL_DATE_TIME_HPP
|