68bit currency enhancement

This commit is contained in:
John LeMoyne Castle 2010-12-21 15:47:55 +00:00 committed by Noel Power
parent 0da3a0b0a5
commit 5c7eb1c246
2 changed files with 38 additions and 0 deletions

View file

@ -354,6 +354,7 @@ public:
SvStream& operator>>( sal_uInt16& rUInt16 );
SvStream& operator>>( sal_uInt32& rUInt32 );
SvStream& operator>>( sal_uInt64& rUInt64 );
SvStream& operator>>( long& rLong );
SvStream& operator>>( short& rShort );
SvStream& operator>>( int& rInt );
@ -372,6 +373,7 @@ public:
SvStream& operator<<( sal_uInt16 nUInt16 );
SvStream& operator<<( sal_uInt32 nUInt32 );
SvStream& operator<<( sal_uInt64 nuInt64 );
SvStream& operator<<( long nLong );
SvStream& operator<<( short nShort );
SvStream& operator<<( int nInt );

View file

@ -93,6 +93,24 @@ inline static void SwapLongInt( int& r )
{ r = SWAPLONG(r); }
inline static void SwapLongUInt( unsigned int& r )
{ r = SWAPLONG(r); }
inline static void SwapUInt64( sal_uInt64& r )
{
union
{
sal_uInt64 n;
sal_uInt32 c[2];
} s;
s.n = r;
s.c[0] ^= s.c[1]; // swap the 32 bit words
s.c[1] ^= s.c[0];
s.c[0] ^= s.c[1];
// swap the bytes in the words
s.c[0] = SWAPLONG(s.c[0]);
s.c[1] = SWAPLONG(s.c[1]);
r = s.n;
}
#ifdef UNX
inline static void SwapFloat( float& r )
{
@ -106,6 +124,7 @@ inline static void SwapFloat( float& r )
s.c = SWAPLONG( s.c );
r = s.f;
}
inline static void SwapDouble( double& r )
{
if( sizeof(double) != 8 )
@ -1224,6 +1243,15 @@ SvStream& SvStream::operator>> ( sal_uInt32& r )
return *this;
}
SvStream& SvStream::operator>> ( sal_uInt64& r )
{
READNUMBER_WITHOUT_SWAP(sal_uInt64,r)
if( bSwap )
SwapUInt64(r);
return *this;
}
SvStream& SvStream::operator >> ( long& r )
{
#if(SAL_TYPES_SIZEOFLONG != 4)
@ -1364,6 +1392,14 @@ SvStream& SvStream::operator<< ( sal_uInt32 v )
return *this;
}
SvStream& SvStream::operator<< ( sal_uInt64 v )
{
if( bSwap )
SwapUInt64(v);
WRITENUMBER_WITHOUT_SWAP(sal_uInt64,v)
return *this;
}
SvStream& SvStream::operator<< ( long v )
{
#if(SAL_TYPES_SIZEOFLONG != 4)