#if wxUSE_LONGLONG
#include "wx/longlong.h"
+#if defined(__MWERKS__) && defined(__WXMSW__)
+#include <string.h> // for memset()
+#else
#include <memory.h> // for memset()
+#endif
+
#include <math.h> // for fabs()
// ============================================================================
return temp;
}
-#if wxUSE_STD_IOSTREAM
-
-// input/output
-wxSTD ostream& operator<< (wxSTD ostream& o, const wxLongLongNative& ll)
-{
- char result[65];
-
- wxSTD memset(result, 'A', 64);
-
- result[64] = '\0';
-
- for (int i = 0; i < 64; i++)
- {
- result[63 - i] = '0' + (char) ((ll.GetValue() >> i) & 1);
- }
-
- return o << result;
-}
-
-#endif // wxUSE_STD_IOSTREAM
-
#endif // wxUSE_LONGLONG_NATIVE
// ============================================================================
// Use of this program, for any purpose, is granted the author, Ian
// Kaplan, as long as this copyright notice is included in the source
// code or any source code derived from this program. The user assumes
- // all responsibility for using this code.
+ // all responsibility for using this code.
// init everything
wxLongLongWx dividend = *this,
Divide(ll, quotient, remainder);
*this = quotient;
-
+
return *this;
}
return temp;
}
-#if wxUSE_STD_IOSTREAM
+#endif // wxUSE_LONGLONG_WX
-// input/output
-wxSTD ostream& operator<< (wxSTD ostream& o, const wxLongLongWx& ll)
+wxString
+#if wxUSE_LONGLONG_NATIVE
+wxLongLongNative::ToString() const
+#else
+wxLongLongWx::ToString() const
+#endif
{
- char result[65];
+ // TODO: this is awfully inefficient, anything better?
+ wxString result;
- memset(result, 'A', 64);
+ wxLongLong ll = *this;
- result[64] = '\0';
+ bool neg;
+ if ( ll < 0 )
+ {
+ ll.Negate();
+ neg = TRUE;
+ }
+ else
+ {
+ neg = FALSE;
+ }
- for (int i = 0; i < 32; i++)
+ while ( ll != 0 )
{
- result[31 - i] = (char) ('0' + (int) ((ll.m_hi >> i) & 1));
- result[63 - i] = (char) ('0' + (int) ((ll.m_lo >> i) & 1));
+ result.Prepend((wxChar)(_T('0') + (ll % 10).ToLong()));
+ ll /= 10;
}
- return o << result;
+ if ( result.empty() )
+ result = _T('0');
+ else if ( neg )
+ result.Prepend(_T('-'));
+
+ return result;
}
-#endif // wxUSE_STD_IOSTREAM
-#endif // wxUSE_LONGLONG_NATIVE
+#if wxUSE_STD_IOSTREAM
+
+// input/output
+wxSTD ostream& operator<< (wxSTD ostream& o, const wxLongLong& ll)
+{
+ return o << ll.ToString();
+}
+
+#endif // wxUSE_STD_IOSTREAM
#endif // wxUSE_LONGLONG