uLib  User mode C/C++ extended API library for Win32 programmers.
LargeInt.cpp
Go to the documentation of this file.
1 #include <uLib/LargeInt.h>
2 
3 // Excuse the terse one-line format of this quickie...
4 // (Meaning, don't reformat it..)
5 
7 
8 LargeInt::LargeInt( const INT64 Val ) { _val.QuadPart = Val; }
9 LargeInt::LargeInt( const DWORD Lo, const LONG Hi ) { Set( Lo, Hi ); }
10 LargeInt::LargeInt( const LARGE_INTEGER& Val ) { _val.QuadPart = Val.QuadPart; }
11 //LargeInt::LargeInt( const ULARGE_INTEGER& Val ) { _val = LITERAL( LARGE_INTEGER, Val ); } // Under consideration
12 LargeInt::LargeInt( const FILETIME& Val ) { Set( Val.dwLowDateTime, Val.dwHighDateTime ); }
13 LargeInt::LargeInt( const LUID& Val ) { Set( Val.LowPart, Val.HighPart ); }
14 LargeInt::LargeInt( const LargeInt& Val ) { _val.QuadPart = Val._val.QuadPart; }
15 
16 LargeInt& LargeInt::Set( DWORD Lo, LONG Hi )
17 {
18  _val.LowPart = Lo;
19  _val.HighPart = Hi;
20  return *this;
21 }
22 
23 LargeInt::operator LARGE_INTEGER() const { return _val; }
24 LargeInt::operator ULARGE_INTEGER() const { return LITERAL( ULARGE_INTEGER, _val ); }
25 LargeInt::operator PLARGE_INTEGER() const { return (PLARGE_INTEGER)&_val; }
26 LargeInt::operator PULARGE_INTEGER() const { return (PULARGE_INTEGER)&_val; }
27 
28 LargeInt::operator INT64() const { return _val.QuadPart; }
29 LargeInt::operator INT32() const { return _val.LowPart; }
30 LargeInt::operator UINT64() const { return (UINT64)_val.QuadPart; }
31 LargeInt::operator UINT32() const { return (UINT32)_val.LowPart; }
32 
33 // The following two are warranted because there is *no guarantee*
34 // that LUID and FILETIME have the same alignment as LARGE_INTEGER,
35 // even though an alignment deviation would be quite illogical..
36 
37 LargeInt::operator LUID() const
38 {
39  LUID luid = { _val.LowPart, _val.HighPart };
40  return luid;
41 }
42 LargeInt::operator FILETIME() const
43 {
44  FILETIME ft = { _val.LowPart, (DWORD)_val.HighPart };
45  return ft;
46 }
47 
48 LargeInt& LargeInt::operator = ( const INT64 rhs ) { _val.QuadPart = rhs; return *this; }
49 LargeInt& LargeInt::operator = ( const LARGE_INTEGER& rhs ) { _val.QuadPart = rhs.QuadPart; return *this; }
50 //LargeInt& LargeInt::operator = ( const ULARGE_INTEGER& rhs ) { _val = LITERAL( LARGE_INTEGER, rhs.QuadPart ); return *this; }
51 LargeInt& LargeInt::operator = ( const LUID& rhs ) { return Set( rhs.LowPart, rhs.HighPart ); }
52 LargeInt& LargeInt::operator = ( const FILETIME& rhs ) { return Set( rhs.dwLowDateTime, rhs.dwHighDateTime ); }
53 
54 LargeInt& LargeInt::operator += ( const INT64 rhs ) { _val.QuadPart += rhs; return *this; }
55 LargeInt& LargeInt::operator -= ( const INT64 rhs ) { _val.QuadPart -= rhs; return *this; }
56 LargeInt& LargeInt::operator *= ( const INT64 rhs ) { _val.QuadPart *= rhs; return *this; }
57 LargeInt& LargeInt::operator /= ( const INT64 rhs ) { _val.QuadPart /= rhs; return *this; }
58 LargeInt& LargeInt::operator %= ( const INT64 rhs ) { _val.QuadPart %= rhs; return *this; }
59 LargeInt& LargeInt::operator &= ( const INT64 rhs ) { _val.QuadPart &= rhs; return *this; }
60 LargeInt& LargeInt::operator |= ( const INT64 rhs ) { _val.QuadPart |= rhs; return *this; }
61 LargeInt& LargeInt::operator ^= ( const INT64 rhs ) { _val.QuadPart ^= rhs; return *this; }
62 
63 LargeInt& LargeInt::operator += ( const LARGE_INTEGER& rhs ) { _val.QuadPart += rhs.QuadPart; return *this; }
64 LargeInt& LargeInt::operator -= ( const LARGE_INTEGER& rhs ) { _val.QuadPart -= rhs.QuadPart; return *this; }
65 LargeInt& LargeInt::operator *= ( const LARGE_INTEGER& rhs ) { _val.QuadPart *= rhs.QuadPart; return *this; }
66 LargeInt& LargeInt::operator /= ( const LARGE_INTEGER& rhs ) { _val.QuadPart /= rhs.QuadPart; return *this; }
67 LargeInt& LargeInt::operator %= ( const LARGE_INTEGER& rhs ) { _val.QuadPart %= rhs.QuadPart; return *this; }
68 LargeInt& LargeInt::operator &= ( const LARGE_INTEGER& rhs ) { _val.QuadPart &= rhs.QuadPart; return *this; }
69 LargeInt& LargeInt::operator |= ( const LARGE_INTEGER& rhs ) { _val.QuadPart |= rhs.QuadPart; return *this; }
70 LargeInt& LargeInt::operator ^= ( const LARGE_INTEGER& rhs ) { _val.QuadPart ^= rhs.QuadPart; return *this; }
71 
72 LargeInt& LargeInt::operator >>= ( const BYTE rhs ) { _val.QuadPart >>= rhs; return *this; }
73 LargeInt& LargeInt::operator <<= ( const BYTE rhs ) { _val.QuadPart <<= rhs; return *this; }
74 
75 // Pre-/Post-Increment/Decrement
76 
77 LargeInt LargeInt::operator ++ () { return ++_val.QuadPart; } // Pre
78 LargeInt LargeInt::operator -- () { return --_val.QuadPart; }
79 LargeInt LargeInt::operator ++ (int) { return _val.QuadPart++; } // Post
80 LargeInt LargeInt::operator -- (int) { return _val.QuadPart--; }
81 
82 LargeInt LargeInt::operator - () const { return LargeInt( -_val.QuadPart ); }
83 
84 LargeInt LargeInt::operator + ( const INT64 rhs ) const { return LargeInt( _val.QuadPart + rhs ); }
85 LargeInt LargeInt::operator - ( const INT64 rhs ) const { return LargeInt( _val.QuadPart - rhs ); }
86 LargeInt LargeInt::operator * ( const INT64 rhs ) const { return LargeInt( _val.QuadPart * rhs ); }
87 LargeInt LargeInt::operator / ( const INT64 rhs ) const { return LargeInt( _val.QuadPart / rhs ); }
88 LargeInt LargeInt::operator % ( const INT64 rhs ) const { return LargeInt( _val.QuadPart % rhs ); }
89 LargeInt LargeInt::operator & ( const INT64 rhs ) const { return LargeInt( _val.QuadPart & rhs ); }
90 LargeInt LargeInt::operator | ( const INT64 rhs ) const { return LargeInt( _val.QuadPart | rhs ); }
91 LargeInt LargeInt::operator ^ ( const INT64 rhs ) const { return LargeInt( _val.QuadPart ^ rhs ); }
92 
93 LargeInt LargeInt::operator >> ( const BYTE rhs ) const { return LargeInt( _val.QuadPart >> rhs ); }
94 LargeInt LargeInt::operator << ( const BYTE rhs ) const { return LargeInt( _val.QuadPart << rhs ); }
95 
96 LargeInt LargeInt::operator + ( const LARGE_INTEGER& rhs ) const { return LargeInt( _val.QuadPart + rhs.QuadPart ); }
97 LargeInt LargeInt::operator - ( const LARGE_INTEGER& rhs ) const { return LargeInt( _val.QuadPart - rhs.QuadPart ); }
98 LargeInt LargeInt::operator * ( const LARGE_INTEGER& rhs ) const { return LargeInt( _val.QuadPart * rhs.QuadPart ); }
99 LargeInt LargeInt::operator / ( const LARGE_INTEGER& rhs ) const { return LargeInt( _val.QuadPart / rhs.QuadPart ); }
100 LargeInt LargeInt::operator % ( const LARGE_INTEGER& rhs ) const { return LargeInt( _val.QuadPart % rhs.QuadPart ); }
101 LargeInt LargeInt::operator & ( const LARGE_INTEGER& rhs ) const { return LargeInt( _val.QuadPart & rhs.QuadPart ); }
102 LargeInt LargeInt::operator | ( const LARGE_INTEGER& rhs ) const { return LargeInt( _val.QuadPart | rhs.QuadPart ); }
103 LargeInt LargeInt::operator ^ ( const LARGE_INTEGER& rhs ) const { return LargeInt( _val.QuadPart ^ rhs.QuadPart ); }
104 
106 // EOF
unsigned long DWORD
Definition: Common.h:414
#define END_NAMESPACE(name)
Definition: Common.h:225
Definition: DynArray.h:18
signed __int64 INT64
Definition: Common.h:401
unsigned __int64 UINT64
Definition: Common.h:400
#define BEGIN_NAMESPACE(name)
Definition: Common.h:224
#define LITERAL(type, x)
Definition: Common.h:969
unsigned char BYTE
Definition: Common.h:412