Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

115 lines
2.6 KiB

//+-------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1995.
//
// File: QueryUnk.hxx
//
// Contents: Controlling IUnknown for IQuery/IRowset
//
// History: 18 Jul 1995 AlanW Created
//
//--------------------------------------------------------------------------
#pragma once
class CRowset;
//+-------------------------------------------------------------------------
//
// Class: CQueryUnknown
//
// Purpose: Controlling IUnknown for IQuery to manage the simultaneous
// destruction of connected rowsets.
//
// History: 18 Jul 1995 AlanW Created
//
//--------------------------------------------------------------------------
class CQueryUnknown : public IUnknown
{
public:
//
// IUnknown methods.
//
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void ** ppvObj);
STDMETHOD_(ULONG,AddRef) (THIS);
STDMETHOD_(ULONG,Release) (THIS);
//
// Local methods
//
BOOL IsQueryActive( void ) const { return _cRowsets > 0; }
void ReInit( ULONG cRowsets = 0, CRowset ** apRowsets = 0 );
CQueryUnknown( IUnknown & rUnk ) :
_rUnk(rUnk),
_ref(0),
_cRowsets(0),
_apRowsets(0) {}
~CQueryUnknown();
private:
ULONG _ref;
ULONG _cRowsets;
CRowset ** _apRowsets;
IUnknown & _rUnk;
};
//+-------------------------------------------------------------------------
//
// Class: CRowsetArray
//
// Purpose: Smart container for an array of rowsets.
//
// History: 19 Jul 1995 AlanW Created
//
//--------------------------------------------------------------------------
class CRowsetArray
{
public:
CRowsetArray( ULONG cRowsets ) :
_apRowsets(cRowsets)
{
if (cRowsets > 0)
{
RtlZeroMemory(_apRowsets.GetPointer(), cRowsets * sizeof (CRowset *));
}
}
~CRowsetArray()
{
if (_apRowsets.GetPointer())
{
for (unsigned i = 0; i < _apRowsets.Count(); i++)
if (_apRowsets[i])
{
delete _apRowsets[i];
_apRowsets[i] = 0;
}
}
}
CRowset * * GetPointer() { return _apRowsets.GetPointer(); }
CRowset * * Acquire() { return _apRowsets.Acquire(); }
CRowset * & operator[](ULONG iElem)
{ return _apRowsets[iElem]; }
unsigned Count() const { return _apRowsets.Count(); }
private:
XArray<CRowset *> _apRowsets;
};