X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f5cd97870d58ebf1fa2267299f80b864281884c6..0fccfc51e6d8810143d64d1e141ca6834843ac98:/include/wx/datetime.h diff --git a/include/wx/datetime.h b/include/wx/datetime.h index 92398e53f2..35a164dd3a 100644 --- a/include/wx/datetime.h +++ b/include/wx/datetime.h @@ -13,10 +13,14 @@ #ifndef _WX_DATETIME_H #define _WX_DATETIME_H -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(__APPLE__) #pragma interface "datetime.h" #endif +#include "wx/defs.h" + +#if wxUSE_DATETIME + #include #include // for INT_MIN @@ -26,14 +30,20 @@ class WXDLLEXPORT wxDateTime; class WXDLLEXPORT wxTimeSpan; class WXDLLEXPORT wxDateSpan; -// don't use inline functions in debug builds - we don't care about +// a hack: don't use inline functions in debug builds - we don't care about // performances and this only leads to increased rebuild time (because every // time an inline method is changed, all files including the header must be // rebuilt) -// For Mingw32, causes a link error. + +// For Mingw32, causes a link error. (VZ: why?) #if defined( __WXDEBUG__) && !defined(__MINGW32__) + #define wxDATETIME_DONT_INLINE + #undef inline #define inline +#else + // just in case + #undef wxDATETIME_DONT_INLINE #endif // Debug // not all c-runtimes are based on 1/1/1970 being (time_t) 0 @@ -113,7 +123,7 @@ class WXDLLEXPORT wxDateSpan; // wxInvalidDateTime) class WXDLLEXPORT wxDateTime; -WXDLLEXPORT_DATA(extern const wxDateTime&) wxDefaultDateTime; +WXDLLEXPORT_DATA(extern const wxDateTime) wxDefaultDateTime; #define wxInvalidDateTime wxDefaultDateTime // ---------------------------------------------------------------------------- @@ -539,7 +549,7 @@ public: // ------------------------------------------------------------------------ // default ctor does not initialize the object, use Set()! - wxDateTime() { } + wxDateTime() { m_time = wxLongLong((long)ULONG_MAX, ULONG_MAX); } // from time_t: seconds since the Epoch 00:00:00 UTC, Jan 1, 1970) #if (!(defined(__VISAGECPP__) && __IBMCPP__ >= 400)) @@ -649,8 +659,10 @@ public: // ------------------------------------------------------------------------ // set to the given week day in the same week as this one - wxDateTime& SetToWeekDayInSameWeek(WeekDay weekday); - inline wxDateTime GetWeekDayInSameWeek(WeekDay weekday) const; + wxDateTime& SetToWeekDayInSameWeek(WeekDay weekday, + WeekFlags flags = Monday_First); + inline wxDateTime GetWeekDayInSameWeek(WeekDay weekday, + WeekFlags flags = Monday_First) const; // set to the next week day following this one wxDateTime& SetToNextWeekDay(WeekDay weekday); @@ -684,8 +696,12 @@ public: // sets the date to the given day of the given week in the year, // returns TRUE on success and FALSE if given date doesn't exist (e.g. // numWeek is > 53) - bool SetToTheWeek(wxDateTime_t numWeek, WeekDay weekday = Mon); - inline wxDateTime GetWeek(wxDateTime_t numWeek, WeekDay weekday = Mon) const; + bool SetToTheWeek(wxDateTime_t numWeek, + WeekDay weekday = Mon, + WeekFlags flags = Monday_First); + inline wxDateTime GetWeek(wxDateTime_t numWeek, + WeekDay weekday = Mon, + WeekFlags flags = Monday_First) const; // sets the date to the last day of the given (or current) month or the // given (or current) year @@ -773,8 +789,7 @@ public: // result of timezone shift) // ------------------------------------------------------------------------ - // is the date valid? Note that this will return TRUE for non - // initialized objects but FALSE if *this == wxInvalidDateTime + // is the date valid? inline bool IsValid() const { return m_time != wxInvalidDateTime.m_time; } // get the broken down date/time representation in the given timezone @@ -836,6 +851,15 @@ public: // adoption of the Gregorian calendar is simply unknown. bool IsGregorianDate(GregorianAdoption country = Gr_Standard) const; + // dos date and time format + // ------------------------------------------------------------------------ + + // set from the DOS packed format + wxDateTime& SetFromDOS(unsigned long ddt); + + // pack the date in DOS format + unsigned long GetAsDOS() const; + // comparison (see also functions below for operator versions) // ------------------------------------------------------------------------ @@ -1154,6 +1178,12 @@ private: // Beware about weeks: if you specify both weeks and days, the total number of // days added will be 7*weeks + days! See also GetTotalDays() function. // +// Equality operators are defined for wxDateSpans. Two datespans are equal if +// they both give the same target date when added to *every* source date. +// Thus wxDateSpan::Months(1) is not equal to wxDateSpan::Days(30), because +// they not give the same date when added to 1 Feb. But wxDateSpan::Days(14) is +// equal to wxDateSpan::Weeks(2) +// // Finally, notice that for adding hours, minutes &c you don't need this // class: wxTimeSpan will do the job because there are no subtleties // associated with those. @@ -1335,14 +1365,16 @@ protected: // else than datetime.cpp in debug builds: this minimizes rebuilds if we change // some inline function and the performance doesn't matter in the debug builds. -#if !defined(__WXDEBUG__) || defined(wxDEFINE_TIME_CONSTANTS) +#if !defined(wxDATETIME_DONT_INLINE) || defined(wxDEFINE_TIME_CONSTANTS) #define INCLUDED_FROM_WX_DATETIME_H #include "wx/datetime.inl" #undef INCLUDED_FROM_WX_DATETIME_H #endif // if we defined it to be empty above, restore it now -#undef inline +#ifdef wxDATETIME_DONT_INLINE + #undef inline +#endif // ============================================================================ // binary operators @@ -1498,6 +1530,24 @@ inline bool WXDLLEXPORT operator!=(const wxTimeSpan &t1, const wxTimeSpan &t2) // wxDateSpan // ---------------------------------------------------------------------------- +// comparison +// ---------- + +// ds1 == d2 if and only if for every wxDateTime t t + ds1 == t + ds2 +inline WXDLLEXPORT bool operator==(const wxDateSpan& ds1, + const wxDateSpan& ds2) +{ + return ds1.GetYears() == ds2.GetYears() && + ds1.GetMonths() == ds2.GetMonths() && + ds1.GetTotalDays() == ds2.GetTotalDays(); +} + +inline WXDLLEXPORT bool operator!=(const wxDateSpan& ds1, + const wxDateSpan& ds2) +{ + return !(ds1 == ds2); +} + // arithmetics // ----------- @@ -1571,4 +1621,6 @@ inline WXDLLEXPORT void wxPrevWDay(wxDateTime::WeekDay& wd) : (wxDateTime::WeekDay)(wd - 1); } +#endif // wxUSE_DATETIME + #endif // _WX_DATETIME_H