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:
@@ -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}}
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user