181 lines
4.4 KiB
C++
181 lines
4.4 KiB
C++
/**********************************************************************/
|
|
/** Microsoft Windows/NT **/
|
|
/** Copyright(c) Microsoft Corporation, 1997 - 1998 **/
|
|
/**********************************************************************/
|
|
|
|
/*
|
|
harray.h
|
|
Index mgr for TAPI devices db
|
|
|
|
FILE HISTORY:
|
|
Dec 16 1997 EricDav Created
|
|
|
|
*/
|
|
|
|
#ifndef _HARRAY_H__
|
|
#define _HARRAY_H__
|
|
|
|
#ifndef TAPI_H
|
|
#include "tapi.h"
|
|
#endif
|
|
|
|
#ifndef _TAPIMMC_H
|
|
#define _TAPIMMC_H
|
|
#include "tapimmc.h"
|
|
#endif
|
|
|
|
#include "afxmt.h"
|
|
|
|
typedef LPDEVICEINFO HDEVICE;
|
|
typedef HDEVICE FAR * LPHDEVICE;
|
|
|
|
typedef enum _INDEX_TYPE
|
|
{
|
|
INDEX_TYPE_NAME,
|
|
INDEX_TYPE_USERS,
|
|
INDEX_TYPE_STATUS
|
|
} INDEX_TYPE;
|
|
|
|
typedef enum _SORT_OPTIONS
|
|
{
|
|
SORT_DESCENDING = 0x00,
|
|
SORT_ASCENDING = 0x01
|
|
|
|
} SORT_OPTIONS;
|
|
|
|
|
|
class CHDeviceIndex;
|
|
|
|
typedef CArray<HDEVICE, HDEVICE> HDeviceArray;
|
|
typedef CList<CHDeviceIndex *, CHDeviceIndex *> HDeviceArrayList;
|
|
|
|
class CProviderIndexInfo
|
|
{
|
|
public:
|
|
DWORD m_dwProviderID;
|
|
HDeviceArrayList m_listIndicies;
|
|
POSITION m_posCurrentIndex;
|
|
};
|
|
|
|
typedef CList<CProviderIndexInfo *, CProviderIndexInfo *> ProviderIndexList;
|
|
|
|
// base class for a sorted index
|
|
class CHDeviceIndex
|
|
{
|
|
public:
|
|
CHDeviceIndex(INDEX_TYPE IndexType);
|
|
virtual ~CHDeviceIndex();
|
|
|
|
public:
|
|
// used for insertion into the list
|
|
virtual int BCompare(const void *, const void *) = 0;
|
|
virtual HRESULT Sort(LPBYTE pStart) = 0;
|
|
|
|
virtual HRESULT Add(HDEVICE hDevice, BOOL bEnd);
|
|
virtual HRESULT Remove(HDEVICE hDevice);
|
|
virtual HRESULT GetType(INDEX_TYPE * pIndexType);
|
|
virtual HDEVICE GetHDevice(int nIndex);
|
|
virtual int GetIndex(HDEVICE hDevice);
|
|
|
|
BOOL IsAscending() { return m_bAscending; }
|
|
void SetAscending(BOOL bAscending) { m_bAscending = bAscending; }
|
|
|
|
HRESULT SetArray(HDeviceArray & hdeviceArray);
|
|
HDeviceArray & GetArray() { return m_hdeviceArray; }
|
|
|
|
void SetType(INDEX_TYPE indexType)
|
|
{
|
|
m_dbType = indexType;
|
|
}
|
|
|
|
void * BSearch(const void * key, const void * base, size_t num, size_t width);
|
|
|
|
protected:
|
|
INDEX_TYPE m_dbType;
|
|
HDeviceArray m_hdeviceArray;
|
|
BOOL m_bAscending;
|
|
};
|
|
|
|
|
|
// the Index manager
|
|
class CIndexMgr : public HDeviceArrayList
|
|
{
|
|
public:
|
|
CIndexMgr();
|
|
virtual ~CIndexMgr();
|
|
|
|
public:
|
|
HRESULT Initialize();
|
|
HRESULT Reset();
|
|
|
|
UINT GetTotalCount();
|
|
UINT GetCurrentCount();
|
|
|
|
HRESULT AddHDevice(DWORD dwProviderID, HDEVICE hDevice, BOOL bLoading = FALSE);
|
|
HRESULT RemoveHDevice(DWORD dwProviderID, HDEVICE hDevice);
|
|
HRESULT Sort(DWORD dwProviderID, INDEX_TYPE SortType, DWORD dwSortOptions, LPBYTE pStart);
|
|
|
|
HRESULT GetHDevice(DWORD dwProviderID, int nIndex, LPHDEVICE phdevice);
|
|
HRESULT GetIndex(DWORD dwProviderID, HDEVICE hrow, int * pIndex);
|
|
|
|
void CleanupIndicies();
|
|
|
|
HRESULT SetCurrentProvider(DWORD dwProviderID);
|
|
|
|
protected:
|
|
ProviderIndexList m_listProviderIndex;
|
|
POSITION m_posCurrentProvider;
|
|
CCriticalSection m_cs;
|
|
};
|
|
|
|
// Index for name sorted
|
|
class CIndexName : public CHDeviceIndex
|
|
{
|
|
public:
|
|
CIndexName() : CHDeviceIndex(INDEX_TYPE_NAME) { };
|
|
|
|
public:
|
|
// used for insertion into the list
|
|
int BCompare(const void *, const void *);
|
|
|
|
// used for sorting the list
|
|
virtual HRESULT Sort(LPBYTE pStart);
|
|
static int __cdecl QCompareA(const void *, const void *);
|
|
static int __cdecl QCompareD(const void *, const void *);
|
|
};
|
|
|
|
// Index for Users sorted
|
|
class CIndexUsers : public CHDeviceIndex
|
|
{
|
|
public:
|
|
CIndexUsers() : CHDeviceIndex(INDEX_TYPE_USERS) { };
|
|
|
|
public:
|
|
// used for insertion into the list
|
|
int BCompare(const void *, const void *);
|
|
|
|
// used for sorting the list
|
|
virtual HRESULT Sort(LPBYTE pStart);
|
|
static int __cdecl QCompareA(const void *, const void *);
|
|
static int __cdecl QCompareD(const void *, const void *);
|
|
};
|
|
|
|
// Index for status sorted
|
|
class CIndexStatus : public CHDeviceIndex
|
|
{
|
|
public:
|
|
CIndexStatus() : CHDeviceIndex(INDEX_TYPE_STATUS) { };
|
|
|
|
public:
|
|
// used for insertion into the list
|
|
int BCompare(const void *, const void *);
|
|
|
|
// used for sorting the list
|
|
virtual HRESULT Sort(LPBYTE pStart);
|
|
static int __cdecl QCompareA(const void *, const void *);
|
|
static int __cdecl QCompareD(const void *, const void *);
|
|
};
|
|
|
|
|
|
#endif //_HARRAY_H__
|