added wxLongLong::ToString()

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@11475 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2001-08-25 16:42:11 +00:00
parent 6dc34ebbd8
commit 3a994742ab
4 changed files with 131 additions and 59 deletions

View 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}}

View 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

View 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

View 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;
}
#endif // wxUSE_LONGLONG_WX
wxString
#ifdef wxUSE_LONGLONG_NATIVE
wxLongLongNative
#else
wxLognLongWx
#endif
::ToString() const
{
// TODO: this is awfully inefficient, anything better?
wxString result;
wxLongLong ll = *this;
bool neg;
if ( ll < 0 )
{
ll.Negate();
neg = TRUE;
}
else
{
neg = FALSE;
}
while ( ll != 0 )
{
result.Prepend((wxChar)(_T('0') + (ll % 10).ToLong()));
ll /= 10;
}
if ( result.empty() )
result = _T('0');
else if ( neg )
result.Prepend(_T('-'));
return result;
}
#if wxUSE_STD_IOSTREAM
// input/output
wxSTD ostream& operator<< (wxSTD ostream& o, const wxLongLongWx& ll)
wxSTD ostream& operator<< (wxSTD ostream& o, const wxLongLong& ll)
{
char result[65];
memset(result, 'A', 64);
result[64] = '\0';
for (int i = 0; i < 32; i++)
{
result[31 - i] = (char) ('0' + (int) ((ll.m_hi >> i) & 1));
result[63 - i] = (char) ('0' + (int) ((ll.m_lo >> i) & 1));
}
return o << result;
return o << ll.ToString();
}
#endif // wxUSE_STD_IOSTREAM
#endif // wxUSE_LONGLONG_NATIVE
#endif // wxUSE_LONGLONG