2025-04-27 07:49:33 -04:00

107 lines
2.9 KiB
C++

/*==========================================================================
*
* Copyright (C) 2000 Microsoft Corporation. All Rights Reserved.
*
* File: HandleTable.h
* Content: Handle Table Header File
*@@BEGIN_MSINTERNAL
* History:
* Date By Reason
* ==== == ======
* 04/08/00 mjn Created
* 04/16/00 mjn Added Update() and allow NULL data for Handles
*@@END_MSINTERNAL
*
***************************************************************************/
#ifndef __HANDLETABLE_H__
#define __HANDLETABLE_H__
//**********************************************************************
// Constant definitions
//**********************************************************************
#define HANDLETABLE_FLAG_INITIALIZED 0x0001
//**********************************************************************
// Macro definitions
//**********************************************************************
//**********************************************************************
// Structure definitions
//**********************************************************************
class CAsyncOp;
typedef struct _HANDLETABLE_ARRAY_ENTRY HANDLETABLE_ARRAY_ENTRY;
//**********************************************************************
// Variable definitions
//**********************************************************************
//**********************************************************************
// Function prototypes
//**********************************************************************
//**********************************************************************
// Class prototypes
//**********************************************************************
// class for Handle Table
class CHandleTable
{
public:
CHandleTable() // Constructor
{
m_dwFlags = 0;
};
~CHandleTable() { }; // Destructor
HRESULT CHandleTable::Initialize( void );
void CHandleTable::Deinitialize( void );
void Lock( void )
{
DNEnterCriticalSection(&m_cs);
};
void Unlock( void )
{
DNLeaveCriticalSection(&m_cs);
};
HRESULT CHandleTable::GrowTable( void );
HRESULT CHandleTable::Create( CAsyncOp *const pAsyncOp,
DPNHANDLE *const pHandle );
HRESULT CHandleTable::Destroy( const DPNHANDLE handle );
HRESULT CHandleTable::Update( const DPNHANDLE handle,
CAsyncOp *const pAsyncOp );
HRESULT CHandleTable::Find( const DPNHANDLE handle,
CAsyncOp **const ppAsyncOp );
HRESULT CHandleTable::Enum( DPNHANDLE *const rgHandles,
DWORD *const cHandle );
private:
DWORD volatile m_dwFlags;
DWORD volatile m_dwNumEntries;
DWORD volatile m_dwNumFreeEntries;
DWORD volatile m_dwFirstFreeEntry;
DWORD volatile m_dwLastFreeEntry;
DWORD volatile m_dwVersion;
HANDLETABLE_ARRAY_ENTRY *m_pTable;
DNCRITICAL_SECTION m_cs;
};
#endif // __HANDLETABLE_H__