]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/datetime.h
implemented wxDC::DoGetSize() correctly for metafile DC classes
[wxWidgets.git] / include / wx / datetime.h
index 5e6f63d698dfec1683d2f8c6f7c615e3ba1619db..2f331299ade4cc4d1b9785eec0f810ff6a3a5631 100644 (file)
 #ifndef _WX_DATETIME_H
 #define _WX_DATETIME_H
 
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-    #pragma interface "datetime.h"
-#endif
-
 #include "wx/defs.h"
 
 #if wxUSE_DATETIME
@@ -56,6 +52,27 @@ class WXDLLIMPEXP_BASE wxDateSpan;
  *   5. wxDateTimeHolidayAuthority for Easter and other christian feasts
  */
 
+/* Two wrapper functions for thread safety */
+#ifdef HAVE_LOCALTIME_R
+#define wxLocaltime_r localtime_r
+#else
+struct tm *wxLocaltime_r(const time_t*, struct tm*);
+#if !defined(__WINDOWS__)
+     // On Windows, localtime _is_ threadsafe!
+#warning using pseudo thread-safe wrapper for localtime to emulate localtime_r
+#endif
+#endif
+
+#ifdef HAVE_GMTIME_R
+#define wxGmtime_r gmtime_r
+#else
+struct tm *wxGmtime_r(const time_t*, struct tm*);
+#if !defined(__WINDOWS__)
+     // On Windows, gmtime _is_ threadsafe!
+#warning using pseudo thread-safe wrapper for gmtime to emulate gmtime_r
+#endif
+#endif
+
 /*
   The three (main) classes declared in this header represent:
 
@@ -773,12 +790,10 @@ public:
     inline wxDateTime ToTimezone(const TimeZone& tz, bool noDST = false) const;
     wxDateTime& MakeTimezone(const TimeZone& tz, bool noDST = false);
 
-#if wxABI_VERSION >= 20602
         // interpret current value as being in another timezone and transform
         // it to local one
     inline wxDateTime FromTimezone(const TimeZone& tz, bool noDST = false) const;
     wxDateTime& MakeFromTimezone(const TimeZone& tz, bool noDST = false);
-#endif // ABI >= 2.6.2
 
         // transform to/from GMT/UTC
     wxDateTime ToUTC(bool noDST = false) const { return ToTimezone(UTC, noDST); }
@@ -787,12 +802,10 @@ public:
     wxDateTime ToGMT(bool noDST = false) const { return ToUTC(noDST); }
     wxDateTime& MakeGMT(bool noDST = false) { return MakeUTC(noDST); }
 
-#if wxABI_VERSION >= 20602
     wxDateTime FromUTC(bool noDST = false) const
         { return FromTimezone(UTC, noDST); }
     wxDateTime& MakeFromUTC(bool noDST = false)
         { return MakeFromTimezone(UTC, noDST); }
-#endif // ABI >= 2.6.2
 
         // is daylight savings time in effect at this moment according to the
         // rules of the specified country?
@@ -1063,6 +1076,9 @@ public:
         return localtime(&t);
     }
 
+    // get current time using thread-safe function
+    static struct tm *GetTmNow(struct tm *tmstruct);
+
 private:
     // the current country - as it's the same for all program objects (unless
     // it runs on a _really_ big cluster system :-), this is a static member:
@@ -1545,7 +1561,8 @@ inline bool wxDateTime::IsInStdRange() const
 /* static */
 inline wxDateTime wxDateTime::Now()
 {
-    return wxDateTime(*GetTmNow());
+    struct tm tmstruct;
+    return wxDateTime(*GetTmNow(&tmstruct));
 }
 
 /* static */
@@ -1862,16 +1879,12 @@ wxDateTime::ToTimezone(const wxDateTime::TimeZone& tz, bool noDST) const
     MODIFY_AND_RETURN( MakeTimezone(tz, noDST) );
 }
 
-#if wxABI_VERSION >= 20602
-
 inline wxDateTime
 wxDateTime::FromTimezone(const wxDateTime::TimeZone& tz, bool noDST) const
 {
     MODIFY_AND_RETURN( MakeFromTimezone(tz, noDST) );
 }
 
-#endif // ABI >= 2.6.2
-
 // ----------------------------------------------------------------------------
 // wxTimeSpan construction
 // ----------------------------------------------------------------------------