]> git.saurik.com Git - wxWidgets.git/commitdiff
added wxLongLong::ToString()
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 25 Aug 2001 16:42:11 +0000 (16:42 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 25 Aug 2001 16:42:11 +0000 (16:42 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@11475 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/latex/wx/longlong.tex
include/wx/longlong.h
samples/console/console.cpp
src/common/longlong.cpp

index f2d56c11911f2d15af4e88e6aef6ca047af136ea..d0df8e6bb7e3aa854a955fb72204af05775f1ef8 100644 (file)
@@ -107,6 +107,12 @@ Truncate wxLongLong to long. If the conversion loses data (i.e. the wxLongLong
 value is outside the range of built-in long type), an assert will be triggered
 in debug mode.
 
+\membersection{wxLongLong::ToString}\label{wxlonglongtostring}
+
+\constfunc{wxString}{ToString}{\void}
+
+Returns the string representation of a wxLongLong.
+
 \membersection{wxLongLong::operator$+$}\label{wxlonglongoperatorplus}
 
 \constfunc{wxLongLong}{operator$+$}{\param{const wxLongLong\& }{ll}}
index 621abc3e3dd2f1c8799c7637732abe2fe903a0fe..26f9e1c112a09c7995269563ccd4f75773439b58 100644 (file)
@@ -18,7 +18,7 @@
 #endif
 
 #include "wx/defs.h"
-#include "wx/wxchar.h"
+#include "wx/string.h"
 
 #include <limits.h>     // for LONG_MAX
 
@@ -203,6 +203,7 @@ public:
         // negation operator
     wxLongLongNative operator-() const
         { return wxLongLongNative(-m_ll); }
+    wxLongLongNative& Negate() { m_ll = -m_ll; return *this; }
 
         // subtraction
     wxLongLongNative operator-(const wxLongLongNative& ll) const
@@ -303,6 +304,10 @@ public:
         { return m_ll >= l; }
 
     // miscellaneous
+
+        // return the string representation of this number
+    wxString ToString() const;
+
         // conversion to byte array: returns a pointer to static buffer!
     void *asArray() const;
 
@@ -489,12 +494,16 @@ public:
                 wxLongLongWx& remainder) const;
 
     // input/output
+
+    // return the string representation of this number
+    wxString ToString() const;
+
+    void *asArray() const;
+
 #if wxUSE_STD_IOSTREAM
     friend wxSTD ostream& operator<<(wxSTD ostream&, const wxLongLongWx&);
 #endif // wxUSE_STD_IOSTREAM
 
-    void *asArray() const;
-
 private:
     // long is at least 32 bits, so represent our 64bit number as 2 longs
 
index 240849422659bc198537faaef59a06508a04e090..8a75d830ab5330afdbf7d18de176e18a925a3dea 100644 (file)
@@ -44,7 +44,7 @@
 //#define TEST_ARRAYS
 //#define TEST_CHARSET
 //#define TEST_CMDLINE
-#define TEST_DATETIME
+//#define TEST_DATETIME
 //#define TEST_DIR
 //#define TEST_DLLLOADER
 //#define TEST_ENVIRON
@@ -58,7 +58,7 @@
 //#define TEST_LIST
 //#define TEST_LOCALE
 //#define TEST_LOG
-//#define TEST_LONGLONG
+#define TEST_LONGLONG
 //#define TEST_MIME
 //#define TEST_PATHLIST
 //#define TEST_REGCONF
@@ -1364,6 +1364,35 @@ static void TestMimeAssociate()
 
 #include <wx/utils.h>
 
+static void TestDiskInfo()
+{
+    puts("*** Testing wxGetDiskSpace() ***\n");
+
+    for ( ;; )
+    {
+        char pathname[128];
+        printf("\nEnter a directory name: ");
+        if ( !fgets(pathname, WXSIZEOF(pathname), stdin) )
+            break;
+
+        // kill the last '\n'
+        pathname[strlen(pathname) - 1] = 0;
+
+        wxLongLong total, free;
+        if ( !wxGetDiskSpace(pathname, &total, &free) )
+        {
+            wxPuts(_T("ERROR: wxGetDiskSpace failed."));
+        }
+        else
+        {
+            wxPrintf(_T("%s total bytes, %s free bytes on '%s'.\n"),
+                    total.ToString().c_str(),
+                    free.ToString().c_str(),
+                    pathname);
+        }
+    }
+}
+
 static void TestOsInfo()
 {
     puts("*** Testing OS info functions ***\n");
@@ -1410,6 +1439,17 @@ static void TestUserInfo()
 // get a random 64 bit number
 #define RAND_LL()   MAKE_LL(rand(), rand(), rand(), rand())
 
+static const long testLongs[] =
+{
+    0,
+    1,
+    -1,
+    LONG_MAX,
+    LONG_MIN,
+    0x1234,
+    -0x1234
+};
+
 #if wxUSE_LONGLONG_WX
 inline bool operator==(const wxLongLongWx& a, const wxLongLongNative& b)
     { return a.GetHi() == b.GetHi() && a.GetLo() == b.GetLo(); }
@@ -1635,17 +1675,6 @@ static void TestLongLongComparison()
 #if wxUSE_LONGLONG_WX
     puts("*** Testing wxLongLong comparison ***\n");
 
-    static const long testLongs[] =
-    {
-        0,
-        1,
-        -1,
-        LONG_MAX,
-        LONG_MIN,
-        0x1234,
-        -0x1234
-    };
-
     static const long ls[2] =
     {
         0x1234,
@@ -1654,7 +1683,7 @@ static void TestLongLongComparison()
 
     wxLongLongWx lls[2];
     lls[0] = ls[0];
-    lls[1] = ls[1]; 
+    lls[1] = ls[1];
 
     for ( size_t n = 0; n < WXSIZEOF(testLongs); n++ )
     {
@@ -1681,6 +1710,23 @@ static void TestLongLongComparison()
 #endif // wxUSE_LONGLONG_WX
 }
 
+static void TestLongLongPrint()
+{
+    wxPuts(_T("*** Testing wxLongLong printing ***\n"));
+
+    for ( size_t n = 0; n < WXSIZEOF(testLongs); n++ )
+    {
+        wxLongLong ll = testLongs[n];
+        wxPrintf(_T("%ld == %s\n"), testLongs[n], ll.ToString().c_str());
+    }
+
+    wxLongLong ll(0x12345678, 0x87654321);
+    wxPrintf(_T("0x1234567887654321 = %s\n"), ll.ToString().c_str());
+
+    ll.Negate();
+    wxPrintf(_T("-0x1234567887654321 = %s\n"), ll.ToString().c_str());
+}
+
 #undef MAKE_LL
 #undef RAND_LL
 
@@ -5084,8 +5130,9 @@ int main(int argc, char **argv)
         TestAddition();
         TestLongLongConversion();
         TestBitOperations();
+        TestLongLongComparison();
     }
-    TestLongLongComparison();
+    TestLongLongPrint();
 #endif // TEST_LONGLONG
 
 #ifdef TEST_HASH
@@ -5105,8 +5152,12 @@ int main(int argc, char **argv)
 #endif // TEST_MIME
 
 #ifdef TEST_INFO_FUNCTIONS
-    TestOsInfo();
-    TestUserInfo();
+    TestDiskInfo();
+    if ( 0 )
+    {
+        TestOsInfo();
+        TestUserInfo();
+    }
 #endif // TEST_INFO_FUNCTIONS
 
 #ifdef TEST_PATHLIST
index 319f92a40bcfb4f8d0a11b8955725178a89c153e..824f039db299b94b04784b356437b96f419e738f 100644 (file)
@@ -57,27 +57,6 @@ void *wxLongLongNative::asArray() const
     return temp;
 }
 
-#if wxUSE_STD_IOSTREAM
-
-// input/output
-wxSTD ostream& operator<< (wxSTD ostream& o, const wxLongLongNative& ll)
-{
-    char result[65];
-
-    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
 
 // ============================================================================
@@ -478,7 +457,7 @@ void wxLongLongWx::Divide(const wxLongLongWx& divisorIn,
     //     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,
@@ -592,7 +571,7 @@ wxLongLongWx& wxLongLongWx::operator/=(const wxLongLongWx& ll)
     Divide(ll, quotient, remainder);
 
     *this = quotient;
-    
+
     return *this;
 }
 
@@ -626,27 +605,54 @@ void *wxLongLongWx::asArray(void) const
     return temp;
 }
 
-#if wxUSE_STD_IOSTREAM
+#endif // wxUSE_LONGLONG_WX
 
-// input/output
-wxSTD ostream& operator<< (wxSTD ostream& o, const wxLongLongWx& ll)
+wxString
+#ifdef wxUSE_LONGLONG_NATIVE
+wxLongLongNative
+#else
+wxLognLongWx
+#endif
+::ToString() const
 {
-    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