source: XIOS/dev/branch_openmp/src/date/user_defined.hpp @ 1501

Last change on this file since 1501 was 591, checked in by rlacroix, 9 years ago

Remove leftovers from the XMLIO age.

File size: 2.8 KB
Line 
1#ifndef __XIOS_CUserDefinedCalendar__
2#define __XIOS_CUserDefinedCalendar__
3
4/// XIOS headers ///
5#include "xios_spl.hpp"
6#include "calendar.hpp"
7#include "array_new.hpp"
8
9namespace xios
10{
11  /// ////////////////////// Déclarations ////////////////////// ///
12  /*! A custom calendar that we can configured to be suitable for planets other than the Earth. */
13  class CUserDefinedCalendar : public CCalendar
14  {
15    private:
16      /// Typedef ///
17      typedef CCalendar SuperClass;
18
19    public:
20      /// Constructor ///
21      CUserDefinedCalendar(int dayLength, const CArray<int,1>& monthLengths);
22      CUserDefinedCalendar(int dayLength, int yearLength);
23
24      /// Destructor ///
25      virtual ~CUserDefinedCalendar(void);
26
27      /// Setters ///
28      /*! Configure the leap year information. */
29      void configureLeapYear(int leapYearMonth, double leapYearDrift, double leapYearDriftOffset = 0.0);
30
31      /// Getters ///
32      virtual StdString getType(void) const;
33
34      /*! Returns the duration of the date's month in days. */
35      virtual int getMonthLength(const CDate& date) const;
36      /*! Returns the duration of the date's year in seconds. */
37      virtual int getYearTotalLength(const CDate& date) const;
38      /*! Returns the duration of a day in hours. Note that this value is
39          not necessarily exact since it can be rounded but it is always
40          the smallest integer number of hours that can hold a day. */
41      virtual int getDayLength(void) const;
42      /*! Returns the duration of a year in months. */
43      virtual int getYearLength(void) const;
44      /*! Returns the day length expressed in seconds. */
45      virtual int getDayLengthInSeconds(void) const;
46      /*! Test if the calendar can have leap year. */
47      virtual bool hasLeapYear() const;
48
49      /*! Simplify a duration based on the calendar information. */
50      virtual CDuration& resolve(CDuration& dur, bool noNegativeTime = false) const;
51
52      /*! Parse a date using the calendar's parser. */
53      virtual void parseDate(StdIStream& in, CDate& date) const;
54
55      /*! Test if a date is valid with regard to the current calendar. */
56      virtual bool checkDate(CDate& date) const;
57
58    private:
59      int dayLength; //!< length of a day in seconds
60      CArray<int,1> monthLengths; //!< length of each months in days
61      int yearLength; //!< length of a year in seconds
62
63      int leapYearMonth; //!< month to which an extra day should be added in case of a leap year
64      double leapYearDrift; //!< yearly drift (fraction of a day, must be in range [0, 1))
65      double leapYearDriftOffset; //!< initial drift (fraction of a day, must be in range [0, 1))
66
67      /*! Test if the specified year is a leap year. */
68      bool isLeapYear(int year) const;
69  }; // class CUserDefinedCalendar
70
71} // namespace xios
72
73#endif // __XIOS_CUserDefinedCalendar__
Note: See TracBrowser for help on using the repository browser.