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
|
value is outside the range of built-in long type), an assert will be triggered
|
||||||
in debug mode.
|
in debug mode.
|
||||||
|
|
||||||
|
\membersection{wxLongLong::ToString}\label{wxlonglongtostring}
|
||||||
|
|
||||||
|
\constfunc{wxString}{ToString}{\void}
|
||||||
|
|
||||||
|
Returns the string representation of a wxLongLong.
|
||||||
|
|
||||||
\membersection{wxLongLong::operator$+$}\label{wxlonglongoperatorplus}
|
\membersection{wxLongLong::operator$+$}\label{wxlonglongoperatorplus}
|
||||||
|
|
||||||
\constfunc{wxLongLong}{operator$+$}{\param{const wxLongLong\& }{ll}}
|
\constfunc{wxLongLong}{operator$+$}{\param{const wxLongLong\& }{ll}}
|
||||||
|
@@ -18,7 +18,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "wx/defs.h"
|
#include "wx/defs.h"
|
||||||
#include "wx/wxchar.h"
|
#include "wx/string.h"
|
||||||
|
|
||||||
#include <limits.h> // for LONG_MAX
|
#include <limits.h> // for LONG_MAX
|
||||||
|
|
||||||
@@ -203,6 +203,7 @@ public:
|
|||||||
// negation operator
|
// negation operator
|
||||||
wxLongLongNative operator-() const
|
wxLongLongNative operator-() const
|
||||||
{ return wxLongLongNative(-m_ll); }
|
{ return wxLongLongNative(-m_ll); }
|
||||||
|
wxLongLongNative& Negate() { m_ll = -m_ll; return *this; }
|
||||||
|
|
||||||
// subtraction
|
// subtraction
|
||||||
wxLongLongNative operator-(const wxLongLongNative& ll) const
|
wxLongLongNative operator-(const wxLongLongNative& ll) const
|
||||||
@@ -303,6 +304,10 @@ public:
|
|||||||
{ return m_ll >= l; }
|
{ return m_ll >= l; }
|
||||||
|
|
||||||
// miscellaneous
|
// miscellaneous
|
||||||
|
|
||||||
|
// return the string representation of this number
|
||||||
|
wxString ToString() const;
|
||||||
|
|
||||||
// conversion to byte array: returns a pointer to static buffer!
|
// conversion to byte array: returns a pointer to static buffer!
|
||||||
void *asArray() const;
|
void *asArray() const;
|
||||||
|
|
||||||
@@ -489,12 +494,16 @@ public:
|
|||||||
wxLongLongWx& remainder) const;
|
wxLongLongWx& remainder) const;
|
||||||
|
|
||||||
// input/output
|
// input/output
|
||||||
|
|
||||||
|
// return the string representation of this number
|
||||||
|
wxString ToString() const;
|
||||||
|
|
||||||
|
void *asArray() const;
|
||||||
|
|
||||||
#if wxUSE_STD_IOSTREAM
|
#if wxUSE_STD_IOSTREAM
|
||||||
friend wxSTD ostream& operator<<(wxSTD ostream&, const wxLongLongWx&);
|
friend wxSTD ostream& operator<<(wxSTD ostream&, const wxLongLongWx&);
|
||||||
#endif // wxUSE_STD_IOSTREAM
|
#endif // wxUSE_STD_IOSTREAM
|
||||||
|
|
||||||
void *asArray() const;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// long is at least 32 bits, so represent our 64bit number as 2 longs
|
// long is at least 32 bits, so represent our 64bit number as 2 longs
|
||||||
|
|
||||||
|
@@ -44,7 +44,7 @@
|
|||||||
//#define TEST_ARRAYS
|
//#define TEST_ARRAYS
|
||||||
//#define TEST_CHARSET
|
//#define TEST_CHARSET
|
||||||
//#define TEST_CMDLINE
|
//#define TEST_CMDLINE
|
||||||
#define TEST_DATETIME
|
//#define TEST_DATETIME
|
||||||
//#define TEST_DIR
|
//#define TEST_DIR
|
||||||
//#define TEST_DLLLOADER
|
//#define TEST_DLLLOADER
|
||||||
//#define TEST_ENVIRON
|
//#define TEST_ENVIRON
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
//#define TEST_LIST
|
//#define TEST_LIST
|
||||||
//#define TEST_LOCALE
|
//#define TEST_LOCALE
|
||||||
//#define TEST_LOG
|
//#define TEST_LOG
|
||||||
//#define TEST_LONGLONG
|
#define TEST_LONGLONG
|
||||||
//#define TEST_MIME
|
//#define TEST_MIME
|
||||||
//#define TEST_PATHLIST
|
//#define TEST_PATHLIST
|
||||||
//#define TEST_REGCONF
|
//#define TEST_REGCONF
|
||||||
@@ -1364,6 +1364,35 @@ static void TestMimeAssociate()
|
|||||||
|
|
||||||
#include <wx/utils.h>
|
#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()
|
static void TestOsInfo()
|
||||||
{
|
{
|
||||||
puts("*** Testing OS info functions ***\n");
|
puts("*** Testing OS info functions ***\n");
|
||||||
@@ -1410,6 +1439,17 @@ static void TestUserInfo()
|
|||||||
// get a random 64 bit number
|
// get a random 64 bit number
|
||||||
#define RAND_LL() MAKE_LL(rand(), rand(), rand(), rand())
|
#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
|
#if wxUSE_LONGLONG_WX
|
||||||
inline bool operator==(const wxLongLongWx& a, const wxLongLongNative& b)
|
inline bool operator==(const wxLongLongWx& a, const wxLongLongNative& b)
|
||||||
{ return a.GetHi() == b.GetHi() && a.GetLo() == b.GetLo(); }
|
{ return a.GetHi() == b.GetHi() && a.GetLo() == b.GetLo(); }
|
||||||
@@ -1635,17 +1675,6 @@ static void TestLongLongComparison()
|
|||||||
#if wxUSE_LONGLONG_WX
|
#if wxUSE_LONGLONG_WX
|
||||||
puts("*** Testing wxLongLong comparison ***\n");
|
puts("*** Testing wxLongLong comparison ***\n");
|
||||||
|
|
||||||
static const long testLongs[] =
|
|
||||||
{
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
-1,
|
|
||||||
LONG_MAX,
|
|
||||||
LONG_MIN,
|
|
||||||
0x1234,
|
|
||||||
-0x1234
|
|
||||||
};
|
|
||||||
|
|
||||||
static const long ls[2] =
|
static const long ls[2] =
|
||||||
{
|
{
|
||||||
0x1234,
|
0x1234,
|
||||||
@@ -1654,7 +1683,7 @@ static void TestLongLongComparison()
|
|||||||
|
|
||||||
wxLongLongWx lls[2];
|
wxLongLongWx lls[2];
|
||||||
lls[0] = ls[0];
|
lls[0] = ls[0];
|
||||||
lls[1] = ls[1];
|
lls[1] = ls[1];
|
||||||
|
|
||||||
for ( size_t n = 0; n < WXSIZEOF(testLongs); n++ )
|
for ( size_t n = 0; n < WXSIZEOF(testLongs); n++ )
|
||||||
{
|
{
|
||||||
@@ -1681,6 +1710,23 @@ static void TestLongLongComparison()
|
|||||||
#endif // wxUSE_LONGLONG_WX
|
#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 MAKE_LL
|
||||||
#undef RAND_LL
|
#undef RAND_LL
|
||||||
|
|
||||||
@@ -5084,8 +5130,9 @@ int main(int argc, char **argv)
|
|||||||
TestAddition();
|
TestAddition();
|
||||||
TestLongLongConversion();
|
TestLongLongConversion();
|
||||||
TestBitOperations();
|
TestBitOperations();
|
||||||
|
TestLongLongComparison();
|
||||||
}
|
}
|
||||||
TestLongLongComparison();
|
TestLongLongPrint();
|
||||||
#endif // TEST_LONGLONG
|
#endif // TEST_LONGLONG
|
||||||
|
|
||||||
#ifdef TEST_HASH
|
#ifdef TEST_HASH
|
||||||
@@ -5105,8 +5152,12 @@ int main(int argc, char **argv)
|
|||||||
#endif // TEST_MIME
|
#endif // TEST_MIME
|
||||||
|
|
||||||
#ifdef TEST_INFO_FUNCTIONS
|
#ifdef TEST_INFO_FUNCTIONS
|
||||||
TestOsInfo();
|
TestDiskInfo();
|
||||||
TestUserInfo();
|
if ( 0 )
|
||||||
|
{
|
||||||
|
TestOsInfo();
|
||||||
|
TestUserInfo();
|
||||||
|
}
|
||||||
#endif // TEST_INFO_FUNCTIONS
|
#endif // TEST_INFO_FUNCTIONS
|
||||||
|
|
||||||
#ifdef TEST_PATHLIST
|
#ifdef TEST_PATHLIST
|
||||||
|
@@ -57,27 +57,6 @@ void *wxLongLongNative::asArray() const
|
|||||||
return temp;
|
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
|
#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
|
// Use of this program, for any purpose, is granted the author, Ian
|
||||||
// Kaplan, as long as this copyright notice is included in the source
|
// Kaplan, as long as this copyright notice is included in the source
|
||||||
// code or any source code derived from this program. The user assumes
|
// 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
|
// init everything
|
||||||
wxLongLongWx dividend = *this,
|
wxLongLongWx dividend = *this,
|
||||||
@@ -592,7 +571,7 @@ wxLongLongWx& wxLongLongWx::operator/=(const wxLongLongWx& ll)
|
|||||||
Divide(ll, quotient, remainder);
|
Divide(ll, quotient, remainder);
|
||||||
|
|
||||||
*this = quotient;
|
*this = quotient;
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -626,27 +605,54 @@ void *wxLongLongWx::asArray(void) const
|
|||||||
return temp;
|
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
|
#if wxUSE_STD_IOSTREAM
|
||||||
|
|
||||||
// input/output
|
// input/output
|
||||||
wxSTD ostream& operator<< (wxSTD ostream& o, const wxLongLongWx& ll)
|
wxSTD ostream& operator<< (wxSTD ostream& o, const wxLongLong& ll)
|
||||||
{
|
{
|
||||||
char result[65];
|
return o << ll.ToString();
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // wxUSE_STD_IOSTREAM
|
#endif // wxUSE_STD_IOSTREAM
|
||||||
|
|
||||||
#endif // wxUSE_LONGLONG_NATIVE
|
|
||||||
|
|
||||||
#endif // wxUSE_LONGLONG
|
#endif // wxUSE_LONGLONG
|
||||||
|
Reference in New Issue
Block a user