summaryrefslogtreecommitdiffstats
path: root/public/sdk/inc/stgvar.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'public/sdk/inc/stgvar.hxx')
-rw-r--r--public/sdk/inc/stgvar.hxx604
1 files changed, 604 insertions, 0 deletions
diff --git a/public/sdk/inc/stgvar.hxx b/public/sdk/inc/stgvar.hxx
new file mode 100644
index 000000000..e0160ab89
--- /dev/null
+++ b/public/sdk/inc/stgvar.hxx
@@ -0,0 +1,604 @@
+//+-------------------------------------------------------------------------
+//
+// Microsoft Windows
+// Copyright (C) Microsoft Corporation, 1992 - 1992.
+//
+// File: StgVar.hxx
+//
+// Contents: C++ wrapper for PROPVARIANT.
+//
+// History: 01-Aug-94 KyleP Created
+//
+//--------------------------------------------------------------------------
+
+#if !defined(__STGVAR_HXX__)
+#define __STGVAR_HXX__
+
+#include <objbase.h>
+#include <stgvara.hxx>
+
+//+-------------------------------------------------------------------------
+//
+// Class: CStorageVariant
+//
+// Purpose: C++ wrapper for PROPVARIANT
+//
+// History: 01-Aug-94 KyleP Created
+//
+// Notes: A couple of variant arms are not implemented below.
+// VT_BSTR because its type signature is identical to that of
+// VT_LPSTR. VT_SAFEARRAY because I don't fully understand the
+// structure.
+//
+// Some types are duplicate base types with a different variant
+// tag. These include:
+// VARIANT_BOOL (short)
+// SCODE (long)
+// DATE (double)
+// We cannot create trivial constructors for the above because
+// of the type collision. You must use the Set methods.
+//
+// Some types will automatically coerce and cause confusion,
+// so they don't have constructors. You must use the Set
+// method. These include:
+// VT_UI2
+// VT_UI4
+// VT_UI8
+//
+//--------------------------------------------------------------------------
+
+
+class CCoTaskAllocator : public PMemoryAllocator
+{
+public:
+ virtual void *Allocate(ULONG cbSize);
+ virtual void Free(void *pv);
+};
+
+#ifndef COTASKDECLSPEC
+#define COTASKDECLSPEC __declspec(dllimport)
+#endif
+
+COTASKDECLSPEC CCoTaskAllocator CoTaskAllocator;
+
+
+class CStorageVariant : public CAllocStorageVariant
+{
+public:
+
+ //
+ // Simple types
+ //
+
+ CStorageVariant() { vt = VT_EMPTY; }
+ CStorageVariant(short i) { vt = VT_I2; iVal = i; }
+ CStorageVariant(long l) { vt = VT_I4; lVal = l; }
+ CStorageVariant(LARGE_INTEGER h) { vt = VT_I8; hVal = h; }
+ CStorageVariant(float flt) { vt = VT_R4; fltVal = flt; }
+ CStorageVariant(double dbl) { vt = VT_R8; dblVal = dbl; }
+ CStorageVariant(CY cy) { vt = VT_CY; cyVal = cy; }
+ CStorageVariant(FILETIME ft) { vt = VT_FILETIME; filetime = ft; }
+
+ inline CStorageVariant & operator =(CStorageVariant const &var);
+
+ inline CStorageVariant & operator =(short i);
+ inline CStorageVariant & operator =(USHORT ui);
+ inline CStorageVariant & operator =(long l);
+ inline CStorageVariant & operator =(ULONG ul);
+ inline CStorageVariant & operator =(LARGE_INTEGER h);
+ inline CStorageVariant & operator =(ULARGE_INTEGER uh);
+ inline CStorageVariant & operator =(float flt);
+ inline CStorageVariant & operator =(double dbl);
+ inline CStorageVariant & operator =(CY cy);
+ inline CStorageVariant & operator =(FILETIME ft);
+
+ //
+ // Types with indirection
+ //
+
+ CStorageVariant(BLOB b);
+ CStorageVariant(BYTE *pb, ULONG cb);
+ CStorageVariant(char const *psz);
+ CStorageVariant(WCHAR const *pwsz);
+ CStorageVariant(CLSID const *pcid);
+
+ inline CStorageVariant & operator =(BLOB b);
+ inline CStorageVariant & operator =(char const *psz);
+ inline CStorageVariant & operator =(WCHAR const *pwsz);
+ inline CStorageVariant & operator =(CLSID const *pcid);
+
+ //
+ // Interface types
+ //
+
+ CStorageVariant(IStream *pstr);
+ CStorageVariant(IStorage *pstor);
+
+ //
+ // Counted array types. Elements initially zeroed. Use Set/Get/Size
+ // for access.
+ //
+
+ CStorageVariant(VARENUM vt, ULONG cElements);
+
+ //
+ // To/From C style PROPVARIANT and copy constructor
+ //
+
+ inline CStorageVariant(CStorageVariant const &var);
+
+ CStorageVariant(PROPVARIANT &var);
+
+ //
+ // Destructor
+ //
+
+ ~CStorageVariant();
+
+
+ //
+ // Memory allocation. Uses CoTaskAllocator
+ //
+
+ inline void *operator new(size_t size);
+ inline void operator delete(void *p);
+ inline void *operator new(size_t size, void *p);
+
+ //
+ // Serialization
+ //
+
+ CStorageVariant(PDeSerStream &stm);
+
+ //
+ // Set/Get, all types including arrays.
+ //
+
+ inline void SetEMPTY();
+ inline void SetNULL();
+ inline void SetUI1(BYTE i);
+ inline void SetI2(short i);
+ inline void SetUI2(USHORT ui);
+ inline void SetI4(long l);
+ inline void SetUI4(ULONG ul);
+ inline void SetR4(float f);
+ inline void SetR8(double d);
+ inline void SetI8(LARGE_INTEGER li);
+ inline void SetUI8(ULARGE_INTEGER uli);
+ inline void SetBOOL(VARIANT_BOOL b);
+ inline void SetERROR(SCODE sc);
+ inline void SetCY(CY cy);
+ inline void SetDATE(DATE d);
+ inline void SetFILETIME(FILETIME ft);
+
+
+ inline void SetBSTR(BSTR b);
+
+// void SetSAFEARRAY(SAFEARRAY &sa);
+// SAFEARRAY GetSAFEARRAY();
+
+ inline void SetLPSTR(char const *psz);
+ inline void SetLPWSTR(WCHAR const *pwsz);
+ inline void SetBLOB(BLOB b);
+
+ inline void SetSTREAM(IStream *ps);
+ inline void SetSTREAMED_OBJECT(IStream *ps);
+ inline void SetSTORAGE(IStorage *ps);
+ inline void SetSTORED_OBJECT(IStorage *ps);
+ inline void SetCLSID(CLSID const *pc);
+
+ //
+ // Array access
+ //
+
+ void SetUI1(BYTE i, unsigned pos);
+ void SetI2(short i, unsigned pos);
+ void SetUI2(USHORT ui, unsigned pos);
+ void SetI4(long l, unsigned pos);
+ void SetUI4(ULONG ul, unsigned pos);
+ void SetI8(LARGE_INTEGER li, unsigned pos);
+ void SetUI8(ULARGE_INTEGER uli, unsigned pos);
+ void SetR4(float f, unsigned pos);
+ void SetR8(double d, unsigned pos);
+ void SetBOOL(VARIANT_BOOL b, unsigned pos);
+ void SetCY(CY c, unsigned pos);
+ void SetDATE(DATE d, unsigned pos);
+
+ void SetBSTR(BSTR b, unsigned pos);
+
+// void SetVARIANT(CStorageVariant var, unsigned pos);
+// CStorageVariant GetVARIANT(unsigned pos) const;
+
+ void SetLPSTR(char const *psz, unsigned pos);
+ void SetLPWSTR(WCHAR const *pwsz, unsigned pos);
+ void SetFILETIME(FILETIME f, unsigned pos);
+ void SetCLSID(CLSID c, unsigned pos);
+};
+
+
+inline
+CStorageVariant::CStorageVariant(BYTE *pb, ULONG cb) :
+ CAllocStorageVariant(pb, cb, CoTaskAllocator)
+{
+}
+
+
+inline
+CStorageVariant::CStorageVariant(char const *psz) :
+ CAllocStorageVariant(psz, CoTaskAllocator)
+{
+}
+
+
+inline
+CStorageVariant::CStorageVariant(WCHAR const *pwsz) :
+ CAllocStorageVariant(pwsz, CoTaskAllocator)
+{
+}
+
+
+inline
+CStorageVariant::CStorageVariant(CLSID const *pcid) :
+ CAllocStorageVariant(pcid, CoTaskAllocator)
+{
+}
+
+
+inline
+CStorageVariant::CStorageVariant(VARENUM v, ULONG cElements) :
+ CAllocStorageVariant(v, cElements, CoTaskAllocator)
+{
+}
+
+
+inline
+CStorageVariant::CStorageVariant(PROPVARIANT &var) :
+ CAllocStorageVariant(var, CoTaskAllocator)
+{
+}
+
+
+inline
+CStorageVariant::CStorageVariant(PDeSerStream &MemDeSerStream) :
+ CAllocStorageVariant(MemDeSerStream, CoTaskAllocator)
+{
+}
+
+
+inline
+CStorageVariant::~CStorageVariant()
+{
+ ResetType(CoTaskAllocator);
+}
+
+
+inline void
+CStorageVariant::SetEMPTY()
+{
+ CAllocStorageVariant::SetEMPTY(CoTaskAllocator);
+}
+
+
+inline void
+CStorageVariant::SetNULL()
+{
+ CAllocStorageVariant::SetNULL(CoTaskAllocator);
+}
+
+
+inline void
+CStorageVariant::SetUI1(BYTE b)
+{
+ CAllocStorageVariant::SetUI1(b, CoTaskAllocator);
+}
+
+
+inline void
+CStorageVariant::SetI2(short i)
+{
+ CAllocStorageVariant::SetI2(i, CoTaskAllocator);
+}
+
+
+inline void
+CStorageVariant::SetUI2(USHORT ui)
+{
+ CAllocStorageVariant::SetUI2(ui, CoTaskAllocator);
+}
+
+
+inline void
+CStorageVariant::SetI4(long l)
+{
+ CAllocStorageVariant::SetI4(l, CoTaskAllocator);
+}
+
+
+inline void
+CStorageVariant::SetUI4(ULONG ul)
+{
+ CAllocStorageVariant::SetUI4(ul, CoTaskAllocator);
+}
+
+
+inline void
+CStorageVariant::SetR4(float f)
+{
+ CAllocStorageVariant::SetR4(f, CoTaskAllocator);
+}
+
+
+inline void
+CStorageVariant::SetR8(double d)
+{
+ CAllocStorageVariant::SetR8(d, CoTaskAllocator);
+}
+
+
+inline void
+CStorageVariant::SetI8(LARGE_INTEGER li)
+{
+ CAllocStorageVariant::SetI8(li, CoTaskAllocator);
+}
+
+
+inline void
+CStorageVariant::SetUI8(ULARGE_INTEGER uli)
+{
+ CAllocStorageVariant::SetUI8(uli, CoTaskAllocator);
+}
+
+
+inline void
+CStorageVariant::SetBOOL(VARIANT_BOOL b)
+{
+ CAllocStorageVariant::SetBOOL(b, CoTaskAllocator);
+}
+
+
+inline void
+CStorageVariant::SetERROR(SCODE sc)
+{
+ CAllocStorageVariant::SetERROR(sc, CoTaskAllocator);
+}
+
+
+inline void
+CStorageVariant::SetCY(CY cy)
+{
+ CAllocStorageVariant::SetCY(cy, CoTaskAllocator);
+}
+
+
+inline void
+CStorageVariant::SetDATE(DATE d)
+{
+ CAllocStorageVariant::SetDATE(d, CoTaskAllocator);
+}
+
+
+inline void
+CStorageVariant::SetFILETIME(FILETIME ft)
+{
+ CAllocStorageVariant::SetFILETIME(ft, CoTaskAllocator);
+}
+
+
+inline void
+CStorageVariant::SetSTREAM(IStream *ps)
+{
+ CAllocStorageVariant::SetSTREAM(ps, CoTaskAllocator);
+}
+
+
+inline void
+CStorageVariant::SetSTREAMED_OBJECT(IStream *ps)
+{
+ CAllocStorageVariant::SetSTREAMED_OBJECT(ps, CoTaskAllocator);
+}
+
+
+inline void
+CStorageVariant::SetSTORAGE(IStorage *ps)
+{
+ CAllocStorageVariant::SetSTORAGE(ps, CoTaskAllocator);
+}
+
+
+inline void
+CStorageVariant::SetSTORED_OBJECT(IStorage *ps)
+{
+ CAllocStorageVariant::SetSTORED_OBJECT(ps, CoTaskAllocator);
+}
+
+
+inline void
+CStorageVariant::SetCLSID(CLSID const *pc)
+{
+ CAllocStorageVariant::SetCLSID(pc, CoTaskAllocator);
+}
+
+
+inline CStorageVariant &
+CStorageVariant::operator =(CStorageVariant const &var)
+{
+ ResetType(CoTaskAllocator);
+ new (this) CStorageVariant((PROPVARIANT &) var);
+
+ return(*this);
+}
+
+
+inline CStorageVariant &
+CStorageVariant::operator =(short i)
+{
+ CAllocStorageVariant::SetI2(i, CoTaskAllocator);
+ return(*this);
+}
+
+
+inline CStorageVariant &
+CStorageVariant::operator =(USHORT ui)
+{
+ CAllocStorageVariant::SetUI2(ui, CoTaskAllocator);
+ return(*this);
+}
+
+
+inline void
+CStorageVariant::SetBSTR(BSTR b)
+{
+ CAllocStorageVariant::SetBSTR( b, CoTaskAllocator );
+}
+
+
+inline void
+CStorageVariant::SetLPSTR(char const *psz)
+{
+ CAllocStorageVariant::SetLPSTR(psz, CoTaskAllocator);
+}
+
+
+inline void
+CStorageVariant::SetLPWSTR(WCHAR const *pwsz)
+{
+ CAllocStorageVariant::SetLPWSTR(pwsz, CoTaskAllocator);
+}
+
+
+inline void
+CStorageVariant::SetBLOB(BLOB b)
+{
+ CAllocStorageVariant::SetBLOB(b, CoTaskAllocator);
+}
+
+
+inline CStorageVariant &
+CStorageVariant::operator =(long l)
+{
+ CAllocStorageVariant::SetI4(l, CoTaskAllocator);
+ return(*this);
+}
+
+
+inline CStorageVariant &
+CStorageVariant::operator =(ULONG ul)
+{
+ CAllocStorageVariant::SetUI4(ul, CoTaskAllocator);
+ return(*this);
+}
+
+
+inline CStorageVariant &
+CStorageVariant::operator =(LARGE_INTEGER h)
+{
+ CAllocStorageVariant::SetI8(h, CoTaskAllocator);
+ return(*this);
+}
+
+
+inline CStorageVariant &
+CStorageVariant::operator =(ULARGE_INTEGER uh)
+{
+ CAllocStorageVariant::SetUI8(uh, CoTaskAllocator);
+ return(*this);
+}
+
+
+inline CStorageVariant &
+CStorageVariant::operator =(float flt)
+{
+ CAllocStorageVariant::SetR4(flt, CoTaskAllocator);
+ return(*this);
+}
+
+
+inline CStorageVariant &
+CStorageVariant::operator =(double dbl)
+{
+ CAllocStorageVariant::SetR8(dbl, CoTaskAllocator);
+ return(*this);
+}
+
+
+inline CStorageVariant &
+CStorageVariant::operator =(CY cy)
+{
+ CAllocStorageVariant::SetCY(cy, CoTaskAllocator);
+ return(*this);
+}
+
+
+inline CStorageVariant &
+CStorageVariant::operator =(FILETIME ft)
+{
+ CAllocStorageVariant::SetFILETIME(ft, CoTaskAllocator);
+ return(*this);
+}
+
+
+inline CStorageVariant &
+CStorageVariant::operator =(BLOB b)
+{
+ CAllocStorageVariant::SetBLOB(b, CoTaskAllocator);
+ return(*this);
+}
+
+
+inline CStorageVariant &
+CStorageVariant::operator =(char const *psz)
+{
+ CAllocStorageVariant::SetLPSTR(psz, CoTaskAllocator);
+ return(*this);
+}
+
+
+inline CStorageVariant &
+CStorageVariant::operator =(WCHAR const *pwsz)
+{
+ CAllocStorageVariant::SetLPWSTR(pwsz, CoTaskAllocator);
+ return(*this);
+}
+
+
+inline CStorageVariant &
+CStorageVariant::operator =(CLSID const *pcid)
+{
+ CAllocStorageVariant::SetCLSID(pcid, CoTaskAllocator);
+ return(*this);
+}
+
+
+inline void *
+CStorageVariant::operator new(size_t size)
+{
+ void *p = CoTaskMemAlloc(size);
+
+ return(p);
+}
+
+
+inline void *
+CStorageVariant::operator new(size_t size, void *p)
+{
+ return(p);
+}
+
+
+inline void
+CStorageVariant::operator delete(void *p)
+{
+ if (p != NULL)
+ {
+ CoTaskMemFree(p);
+ }
+}
+
+
+inline
+CStorageVariant::CStorageVariant(CStorageVariant const &var)
+{
+ new (this) CStorageVariant((PROPVARIANT &) var);
+}
+
+#endif // __STGVAR_HXX__