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.
 
 
 
 
 
 

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