Better fix
[wxWidgets.git] / include / wx / longlong.h
index 69b6c4ca477154ab70877313b1b783fd9661a3bd..e05287c965395ca9536aff7b61e667e6160dd813 100644 (file)
@@ -67,8 +67,8 @@
         #define wxUSE_LONGLONG_NATIVE 0
     #endif
 
         #define wxUSE_LONGLONG_NATIVE 0
     #endif
 
-    class WXDLLIMPEXP_BASE wxLongLongWx;
-    class WXDLLIMPEXP_BASE wxULongLongWx;
+    class WXDLLIMPEXP_FWD_BASE wxLongLongWx;
+    class WXDLLIMPEXP_FWD_BASE wxULongLongWx;
 #if defined(__VISUALC__) && !defined(__WIN32__)
     #define wxLongLong wxLongLongWx
     #define wxULongLong wxULongLongWx
 #if defined(__VISUALC__) && !defined(__WIN32__)
     #define wxLongLong wxLongLongWx
     #define wxULongLong wxULongLongWx
@@ -86,8 +86,8 @@
 
 #ifndef wxUSE_LONGLONG_WX
     #define wxUSE_LONGLONG_WX 0
 
 #ifndef wxUSE_LONGLONG_WX
     #define wxUSE_LONGLONG_WX 0
-    class WXDLLIMPEXP_BASE wxLongLongNative;
-    class WXDLLIMPEXP_BASE wxULongLongNative;
+    class WXDLLIMPEXP_FWD_BASE wxLongLongNative;
+    class WXDLLIMPEXP_FWD_BASE wxULongLongNative;
     typedef wxLongLongNative wxLongLong;
     typedef wxULongLongNative wxULongLong;
 #endif
     typedef wxLongLongNative wxLongLong;
     typedef wxULongLongNative wxULongLong;
 #endif
@@ -113,9 +113,9 @@ public:
         // from long long
     wxLongLongNative(wxLongLong_t ll) : m_ll(ll) { }
         // from 2 longs
         // from long long
     wxLongLongNative(wxLongLong_t ll) : m_ll(ll) { }
         // from 2 longs
-    wxLongLongNative(long hi, unsigned long lo) : m_ll(0)
+    wxLongLongNative(wxInt32 hi, wxUint32 lo)
     {
     {
-        // assign first to avoid precision loss!
+        // cast to wxLongLong_t first to avoid precision loss!
         m_ll = ((wxLongLong_t) hi) << 32;
         m_ll |= (wxLongLong_t) lo;
     }
         m_ll = ((wxLongLong_t) hi) << 32;
         m_ll |= (wxLongLong_t) lo;
     }
@@ -129,13 +129,19 @@ public:
 
     // assignment operators
         // from native 64 bit integer
 
     // assignment operators
         // from native 64 bit integer
+#ifndef wxLongLongIsLong
     wxLongLongNative& operator=(wxLongLong_t ll)
         { m_ll = ll; return *this; }
     wxLongLongNative& operator=(wxULongLong_t ll)
         { m_ll = ll; return *this; }
     wxLongLongNative& operator=(wxLongLong_t ll)
         { m_ll = ll; return *this; }
     wxLongLongNative& operator=(wxULongLong_t ll)
         { m_ll = ll; return *this; }
+#endif // !wxLongLongNative
     wxLongLongNative& operator=(const wxULongLongNative &ll);
     wxLongLongNative& operator=(const wxULongLongNative &ll);
+    wxLongLongNative& operator=(int l)
+        { m_ll = l; return *this; }
     wxLongLongNative& operator=(long l)
         { m_ll = l; return *this; }
     wxLongLongNative& operator=(long l)
         { m_ll = l; return *this; }
+    wxLongLongNative& operator=(unsigned int l)
+        { m_ll = l; return *this; }
     wxLongLongNative& operator=(unsigned long l)
         { m_ll = l; return *this; }
 #if wxUSE_LONGLONG_WX
     wxLongLongNative& operator=(unsigned long l)
         { m_ll = l; return *this; }
 #if wxUSE_LONGLONG_WX
@@ -154,11 +160,11 @@ public:
 
     // accessors
         // get high part
 
     // accessors
         // get high part
-    long GetHi() const
-        { return wx_truncate_cast(long, m_ll >> 32); }
+    wxInt32 GetHi() const
+        { return wx_truncate_cast(wxInt32, m_ll >> 32); }
         // get low part
         // get low part
-    unsigned long GetLo() const
-        { return wx_truncate_cast(unsigned long, m_ll); }
+    wxUint32 GetLo() const
+        { return wx_truncate_cast(wxUint32, m_ll); }
 
         // get absolute value
     wxLongLongNative Abs() const { return wxLongLongNative(*this).Abs(); }
 
         // get absolute value
     wxLongLongNative Abs() const { return wxLongLongNative(*this).Abs(); }
@@ -344,9 +350,9 @@ public:
         // from long long
     wxULongLongNative(wxULongLong_t ll) : m_ll(ll) { }
         // from 2 longs
         // from long long
     wxULongLongNative(wxULongLong_t ll) : m_ll(ll) { }
         // from 2 longs
-    wxULongLongNative(unsigned long hi, unsigned long lo) : m_ll(0)
+    wxULongLongNative(wxUint32 hi, wxUint32 lo) : m_ll(0)
     {
     {
-        // assign first to avoid precision loss!
+        // cast to wxLongLong_t first to avoid precision loss!
         m_ll = ((wxULongLong_t) hi) << 32;
         m_ll |= (wxULongLong_t) lo;
     }
         m_ll = ((wxULongLong_t) hi) << 32;
         m_ll |= (wxULongLong_t) lo;
     }
@@ -361,12 +367,18 @@ public:
 
     // assignment operators
         // from native 64 bit integer
 
     // assignment operators
         // from native 64 bit integer
+#ifndef wxLongLongIsLong
     wxULongLongNative& operator=(wxULongLong_t ll)
         { m_ll = ll; return *this; }
     wxULongLongNative& operator=(wxLongLong_t ll)
         { m_ll = ll; return *this; }
     wxULongLongNative& operator=(wxULongLong_t ll)
         { m_ll = ll; return *this; }
     wxULongLongNative& operator=(wxLongLong_t ll)
         { m_ll = ll; return *this; }
+#endif // !wxLongLongNative
+    wxULongLongNative& operator=(int l)
+        { m_ll = l; return *this; }
     wxULongLongNative& operator=(long l)
         { m_ll = l; return *this; }
     wxULongLongNative& operator=(long l)
         { m_ll = l; return *this; }
+    wxULongLongNative& operator=(unsigned int l)
+        { m_ll = l; return *this; }
     wxULongLongNative& operator=(unsigned long l)
         { m_ll = l; return *this; }
     wxULongLongNative& operator=(const wxLongLongNative &ll)
     wxULongLongNative& operator=(unsigned long l)
         { m_ll = l; return *this; }
     wxULongLongNative& operator=(const wxLongLongNative &ll)
@@ -380,11 +392,11 @@ public:
 
     // accessors
         // get high part
 
     // accessors
         // get high part
-    unsigned long GetHi() const
-        { return wx_truncate_cast(unsigned long, m_ll >> 32); }
+    wxUint32 GetHi() const
+        { return wx_truncate_cast(wxUint32, m_ll >> 32); }
         // get low part
         // get low part
-    unsigned long GetLo() const
-        { return wx_truncate_cast(unsigned long, m_ll); }
+    wxUint32 GetLo() const
+        { return wx_truncate_cast(wxUint32, m_ll); }
 
         // convert to native ulong long
     wxULongLong_t GetValue() const { return m_ll; }
 
         // convert to native ulong long
     wxULongLong_t GetValue() const { return m_ll; }
@@ -398,6 +410,13 @@ public:
         return wx_truncate_cast(unsigned long, m_ll);
     }
 
         return wx_truncate_cast(unsigned long, m_ll);
     }
 
+        // convert to double
+#ifdef _MSC_VER
+    double ToDouble() const { return wx_truncate_cast(double, (__int64) m_ll); }
+#else
+    double ToDouble() const { return wx_truncate_cast(double, m_ll); }
+#endif
+
     // operations
         // addition
     wxULongLongNative operator+(const wxULongLongNative& ll) const
     // operations
         // addition
     wxULongLongNative operator+(const wxULongLongNative& ll) const
@@ -606,6 +625,12 @@ public:
 
         return *this;
     }
 
         return *this;
     }
+        // from int
+    wxLongLongWx& operator=(int l)
+    {
+        return operator=((long)l);
+    }
+
     wxLongLongWx& operator=(unsigned long l)
     {
         m_lo = l;
     wxLongLongWx& operator=(unsigned long l)
     {
         m_lo = l;
@@ -619,6 +644,12 @@ public:
 
         return *this;
     }
 
         return *this;
     }
+
+    wxLongLongWx& operator=(unsigned int l)
+    {
+        return operator=((unsigned long)l);
+    }
+
     wxLongLongWx& operator=(const class wxULongLongWx &ll);
 
     // from double
     wxLongLongWx& operator=(const class wxULongLongWx &ll);
 
     // from double
@@ -882,6 +913,9 @@ public:
         return (unsigned long)m_lo;
     }
 
         return (unsigned long)m_lo;
     }
 
+        // convert to double
+    double ToDouble() const;
+
     // operations
         // addition
     wxULongLongWx operator+(const wxULongLongWx& ll) const;
     // operations
         // addition
     wxULongLongWx operator+(const wxULongLongWx& ll) const;