diff options
author | Igor Pavlov <ipavlov@users.sourceforge.net> | 2010-04-15 04:00:00 +0400 |
---|---|---|
committer | Kornel LesiĆski <kornel@geekhood.net> | 2016-05-28 02:16:03 +0300 |
commit | 3dacb5eb8afda99aad81f4723cb966c0fa91ba1d (patch) | |
tree | 1e1f05aaadf64b4ff99d21bcd4282e8ab4365396 /CPP/Windows | |
parent | 76b173af78d09dea806d3ed35c0f67a09b496357 (diff) |
9.139.13
Diffstat (limited to 'CPP/Windows')
-rwxr-xr-x | CPP/Windows/PropVariant.cpp | 167 | ||||
-rwxr-xr-x | CPP/Windows/PropVariant.h | 34 |
2 files changed, 52 insertions, 149 deletions
diff --git a/CPP/Windows/PropVariant.cpp b/CPP/Windows/PropVariant.cpp index 1db6c236..c2b15744 100755 --- a/CPP/Windows/PropVariant.cpp +++ b/CPP/Windows/PropVariant.cpp @@ -9,13 +9,13 @@ namespace NWindows { namespace NCOM { -CPropVariant::CPropVariant(const PROPVARIANT& varSrc) +CPropVariant::CPropVariant(const PROPVARIANT &varSrc) { vt = VT_EMPTY; InternalCopy(&varSrc); } -CPropVariant::CPropVariant(const CPropVariant& varSrc) +CPropVariant::CPropVariant(const CPropVariant &varSrc) { vt = VT_EMPTY; InternalCopy(&varSrc); @@ -33,12 +33,12 @@ CPropVariant::CPropVariant(LPCOLESTR lpszSrc) *this = lpszSrc; } -CPropVariant& CPropVariant::operator=(const CPropVariant& varSrc) +CPropVariant& CPropVariant::operator=(const CPropVariant &varSrc) { InternalCopy(&varSrc); return *this; } -CPropVariant& CPropVariant::operator=(const PROPVARIANT& varSrc) +CPropVariant& CPropVariant::operator=(const PROPVARIANT &varSrc) { InternalCopy(&varSrc); return *this; @@ -96,89 +96,21 @@ CPropVariant& CPropVariant::operator=(bool bSrc) return *this; } -CPropVariant& CPropVariant::operator=(UInt32 value) -{ - if (vt != VT_UI4) - { - InternalClear(); - vt = VT_UI4; - } - ulVal = value; - return *this; -} - -CPropVariant& CPropVariant::operator=(UInt64 value) -{ - if (vt != VT_UI8) - { - InternalClear(); - vt = VT_UI8; - } - uhVal.QuadPart = value; - return *this; -} - -CPropVariant& CPropVariant::operator=(const FILETIME &value) -{ - if (vt != VT_FILETIME) - { - InternalClear(); - vt = VT_FILETIME; - } - filetime = value; - return *this; -} - -CPropVariant& CPropVariant::operator=(Int32 value) -{ - if (vt != VT_I4) - { - InternalClear(); - vt = VT_I4; - } - lVal = value; - - return *this; -} - -CPropVariant& CPropVariant::operator=(Byte value) -{ - if (vt != VT_UI1) - { - InternalClear(); - vt = VT_UI1; - } - bVal = value; - return *this; -} - -CPropVariant& CPropVariant::operator=(Int16 value) -{ - if (vt != VT_I2) - { - InternalClear(); - vt = VT_I2; - } - iVal = value; - return *this; -} +#define SET_PROP_FUNC(type, id, dest) \ + CPropVariant& CPropVariant::operator=(type value) \ + { if (vt != id) { InternalClear(); vt = id; } \ + dest = value; return *this; } -/* -CPropVariant& CPropVariant::operator=(LONG value) -{ - if (vt != VT_I4) - { - InternalClear(); - vt = VT_I4; - } - lVal = value; - return *this; -} -*/ +SET_PROP_FUNC(Byte, VT_UI1, bVal) +SET_PROP_FUNC(Int16, VT_I2, iVal) +SET_PROP_FUNC(Int32, VT_I4, lVal) +SET_PROP_FUNC(UInt32, VT_UI4, ulVal) +SET_PROP_FUNC(UInt64, VT_UI8, uhVal.QuadPart) +SET_PROP_FUNC(const FILETIME &, VT_FILETIME, filetime) -static HRESULT MyPropVariantClear(PROPVARIANT *propVariant) +static HRESULT MyPropVariantClear(PROPVARIANT *prop) { - switch(propVariant->vt) + switch(prop->vt) { case VT_UI1: case VT_I1: @@ -196,11 +128,11 @@ static HRESULT MyPropVariantClear(PROPVARIANT *propVariant) case VT_R8: case VT_CY: case VT_DATE: - propVariant->vt = VT_EMPTY; - propVariant->wReserved1 = 0; + prop->vt = VT_EMPTY; + prop->wReserved1 = 0; return S_OK; } - return ::VariantClear((VARIANTARG *)propVariant); + return ::VariantClear((VARIANTARG *)prop); } HRESULT CPropVariant::Clear() @@ -236,7 +168,7 @@ HRESULT CPropVariant::Copy(const PROPVARIANT* pSrc) } -HRESULT CPropVariant::Attach(PROPVARIANT* pSrc) +HRESULT CPropVariant::Attach(PROPVARIANT *pSrc) { HRESULT hr = Clear(); if (FAILED(hr)) @@ -246,7 +178,7 @@ HRESULT CPropVariant::Attach(PROPVARIANT* pSrc) return S_OK; } -HRESULT CPropVariant::Detach(PROPVARIANT* pDest) +HRESULT CPropVariant::Detach(PROPVARIANT *pDest) { HRESULT hr = MyPropVariantClear(pDest); if (FAILED(hr)) @@ -267,7 +199,7 @@ HRESULT CPropVariant::InternalClear() return hr; } -void CPropVariant::InternalCopy(const PROPVARIANT* pSrc) +void CPropVariant::InternalCopy(const PROPVARIANT *pSrc) { HRESULT hr = Copy(pSrc); if (FAILED(hr)) @@ -280,52 +212,25 @@ void CPropVariant::InternalCopy(const PROPVARIANT* pSrc) int CPropVariant::Compare(const CPropVariant &a) { if (vt != a.vt) - return 0; // it's mean some bug + return 0; // it's bug case switch (vt) { - case VT_EMPTY: - return 0; - - /* - case VT_I1: - return MyCompare(cVal, a.cVal); - */ - case VT_UI1: - return MyCompare(bVal, a.bVal); - - case VT_I2: - return MyCompare(iVal, a.iVal); - case VT_UI2: - return MyCompare(uiVal, a.uiVal); - - case VT_I4: - return MyCompare(lVal, a.lVal); - /* - case VT_INT: - return MyCompare(intVal, a.intVal); - */ - case VT_UI4: - return MyCompare(ulVal, a.ulVal); - /* - case VT_UINT: - return MyCompare(uintVal, a.uintVal); - */ - case VT_I8: - return MyCompare(hVal.QuadPart, a.hVal.QuadPart); - case VT_UI8: - return MyCompare(uhVal.QuadPart, a.uhVal.QuadPart); - - case VT_BOOL: - return -MyCompare(boolVal, a.boolVal); - - case VT_FILETIME: - return ::CompareFileTime(&filetime, &a.filetime); + case VT_EMPTY: return 0; + // case VT_I1: return MyCompare(cVal, a.cVal); + case VT_UI1: return MyCompare(bVal, a.bVal); + case VT_I2: return MyCompare(iVal, a.iVal); + case VT_UI2: return MyCompare(uiVal, a.uiVal); + case VT_I4: return MyCompare(lVal, a.lVal); + case VT_UI4: return MyCompare(ulVal, a.ulVal); + // case VT_UINT: return MyCompare(uintVal, a.uintVal); + case VT_I8: return MyCompare(hVal.QuadPart, a.hVal.QuadPart); + case VT_UI8: return MyCompare(uhVal.QuadPart, a.uhVal.QuadPart); + case VT_BOOL: return -MyCompare(boolVal, a.boolVal); + case VT_FILETIME: return ::CompareFileTime(&filetime, &a.filetime); case VT_BSTR: return 0; // Not implemented // return MyCompare(aPropVarint.cVal); - - default: - return 0; + default: return 0; } } diff --git a/CPP/Windows/PropVariant.h b/CPP/Windows/PropVariant.h index 5552bbe2..d018034e 100755 --- a/CPP/Windows/PropVariant.h +++ b/CPP/Windows/PropVariant.h @@ -14,41 +14,39 @@ class CPropVariant : public tagPROPVARIANT public: CPropVariant() { vt = VT_EMPTY; wReserved1 = 0; } ~CPropVariant() { Clear(); } - CPropVariant(const PROPVARIANT& varSrc); - CPropVariant(const CPropVariant& varSrc); + CPropVariant(const PROPVARIANT &varSrc); + CPropVariant(const CPropVariant &varSrc); CPropVariant(BSTR bstrSrc); CPropVariant(LPCOLESTR lpszSrc); CPropVariant(bool bSrc) { vt = VT_BOOL; wReserved1 = 0; boolVal = (bSrc ? VARIANT_TRUE : VARIANT_FALSE); }; - CPropVariant(UInt32 value) { vt = VT_UI4; wReserved1 = 0; ulVal = value; } - CPropVariant(UInt64 value) { vt = VT_UI8; wReserved1 = 0; uhVal = *(ULARGE_INTEGER*)&value; } - CPropVariant(const FILETIME &value) { vt = VT_FILETIME; wReserved1 = 0; filetime = value; } - CPropVariant(Int32 value) { vt = VT_I4; wReserved1 = 0; lVal = value; } CPropVariant(Byte value) { vt = VT_UI1; wReserved1 = 0; bVal = value; } CPropVariant(Int16 value) { vt = VT_I2; wReserved1 = 0; iVal = value; } - // CPropVariant(LONG value, VARTYPE vtSrc = VT_I4) { vt = vtSrc; lVal = value; } + CPropVariant(Int32 value) { vt = VT_I4; wReserved1 = 0; lVal = value; } + CPropVariant(UInt32 value) { vt = VT_UI4; wReserved1 = 0; ulVal = value; } + CPropVariant(UInt64 value) { vt = VT_UI8; wReserved1 = 0; uhVal.QuadPart = value; } + CPropVariant(const FILETIME &value) { vt = VT_FILETIME; wReserved1 = 0; filetime = value; } - CPropVariant& operator=(const CPropVariant& varSrc); - CPropVariant& operator=(const PROPVARIANT& varSrc); + CPropVariant& operator=(const CPropVariant &varSrc); + CPropVariant& operator=(const PROPVARIANT &varSrc); CPropVariant& operator=(BSTR bstrSrc); CPropVariant& operator=(LPCOLESTR lpszSrc); CPropVariant& operator=(const char *s); CPropVariant& operator=(bool bSrc); + CPropVariant& operator=(Byte value); + CPropVariant& operator=(Int16 value); + CPropVariant& operator=(Int32 value); CPropVariant& operator=(UInt32 value); + CPropVariant& operator=(Int64 value); CPropVariant& operator=(UInt64 value); CPropVariant& operator=(const FILETIME &value); - CPropVariant& operator=(Int32 value); - CPropVariant& operator=(Byte value); - CPropVariant& operator=(Int16 value); - // CPropVariant& operator=(LONG value); - HRESULT Clear(); - HRESULT Copy(const PROPVARIANT* pSrc); - HRESULT Attach(PROPVARIANT* pSrc); - HRESULT Detach(PROPVARIANT* pDest); + HRESULT Copy(const PROPVARIANT *pSrc); + HRESULT Attach(PROPVARIANT *pSrc); + HRESULT Detach(PROPVARIANT *pDest); HRESULT InternalClear(); - void InternalCopy(const PROPVARIANT* pSrc); + void InternalCopy(const PROPVARIANT *pSrc); int Compare(const CPropVariant &a1); }; |