mirror of https://github.com/tongzx/nt5src
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.
65 lines
1.7 KiB
65 lines
1.7 KiB
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
//
|
|
// Copyright (C) Microsoft Corporation, 1996 - 1999
|
|
//
|
|
// File: Stack.hxx
|
|
//
|
|
// History: 25-Mar-1997 pberkman created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
#ifndef STACK_HXX
|
|
#define STACK_HXX
|
|
|
|
typedef struct StackStruct_
|
|
{
|
|
DWORD cbData;
|
|
void *pvData;
|
|
StackStruct_ *psNext;
|
|
} StackStruct_;
|
|
|
|
#define STACK_SORTTYPE_BINARY 0x01
|
|
#define STACK_SORTTYPE_PWSZ 0x02
|
|
#define STACK_SORTTYPE_PSZ 0x03
|
|
#define STACK_SORTTYPE_PWSZ_I 0x04
|
|
#define STACK_SORTTYPE_PSZ_I 0x05
|
|
|
|
class Stack_
|
|
{
|
|
public:
|
|
Stack_(CRITICAL_SECTION *pCriticalSection);
|
|
virtual ~Stack_(void);
|
|
|
|
BOOL Add(DWORD cbData, void *pvData);
|
|
void *Add(DWORD cbData);
|
|
|
|
// position starts @ zero!
|
|
void *Get(DWORD dwPosition, DWORD *cbData = NULL);
|
|
// this one assumes this->Sort() has been called!
|
|
void *Get(DWORD cbStartIn_pvData, DWORD cbLengthIn_pvData, BYTE fbType, void *pvMemberOf_pvData);
|
|
|
|
DWORD Count(void) { return(dwStackCount); }
|
|
|
|
void Sort(DWORD cbStartIn_pvData, DWORD cbLengthIn_pvData, BYTE fbTypeIn);
|
|
|
|
|
|
protected:
|
|
StackStruct_ *psBottom; // this will point to ppsSorted[0] if sorted.
|
|
StackStruct_ **ppsSorted; // this will be null if no sort
|
|
StackStruct_ **ppsGet;
|
|
|
|
private:
|
|
DWORD dwStackCount;
|
|
|
|
CRITICAL_SECTION *pSortCriticalSection;
|
|
|
|
BOOL InitGetStackIfNecessary ();
|
|
|
|
VOID FlushGetStack ();
|
|
|
|
};
|
|
|
|
#endif // STACK_HXX
|
|
|