Leaked source code of windows server 2003
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.
|
|
// --------------------------------------------------------------------------
// Module Name: DynamicArray.h
//
// Copyright (c) 1999-2000, Microsoft Corporation
//
// This file contains related classes to manage dynamic arrays. The array is
// grown as required but never shrunk. The base class handles struct arrays.
// Subclasses handle special cases of these arrays (such as pointer or
// CCountedObject arrays).
//
// History: 1999-11-16 vtan created
// 2000-02-01 vtan moved from Neptune to Whistler
// --------------------------------------------------------------------------
#ifndef _DynamicArray_
#define _DynamicArray_
#include "CountedObject.h"
// --------------------------------------------------------------------------
// CDynamicArrayCallback
//
// Purpose: Abstract class definition providing a callback mechanism for
// iterating the dynamic array.
//
// History: 1999-11-16 vtan created
// 2000-02-01 vtan moved from Neptune to Whistler
// --------------------------------------------------------------------------
class CDynamicArrayCallback { public: virtual NTSTATUS Callback (const void *pvData, int iElementIndex) = 0; };
// --------------------------------------------------------------------------
// CDynamicArray
//
// Purpose: Base class that handles dynamic struct arrays. Allocates
// memory for the array in 16 block chunks. The memory usage of
// the array is never reduced.
//
// History: 1999-11-16 vtan created
// 2000-02-01 vtan moved from Neptune to Whistler
// --------------------------------------------------------------------------
class CDynamicArray { private: CDynamicArray (void); public: CDynamicArray (int iElementSize); virtual ~CDynamicArray (void);
virtual NTSTATUS Add (const void *pvData); virtual NTSTATUS Remove (int iElementIndex);
int GetCount (void) const; NTSTATUS Get (void *pvData, int iElementIndex); NTSTATUS Set (const void* pvData, int iElementIndex);
NTSTATUS Iterate (CDynamicArrayCallback *pDynamicArrayCallback); protected: int _iElementSize, _iArraySize, _iArrayAllocatedSize; void* _pvArray; };
// --------------------------------------------------------------------------
// CDynamicPointerArray
//
// Purpose: Class that subclasses CDynamicArray to implement dynamic
// pointer arrays. Removing elements automatically frees the
// memory block used (assuming it was allocated with LocalAlloc).
//
// History: 1999-11-16 vtan created
// 2000-02-01 vtan moved from Neptune to Whistler
// --------------------------------------------------------------------------
class CDynamicPointerArray : public CDynamicArray { public: CDynamicPointerArray (void); virtual ~CDynamicPointerArray (void);
virtual NTSTATUS Add (const void *pvData); virtual NTSTATUS Remove (int iElementIndex);
void* Get (int iElementIndex); };
// --------------------------------------------------------------------------
// CDynamicCountedObjectArray
//
// Purpose: Class that subclasses CDynamicArray to implement dynamic
// CCountedObject arrays. Removing elements automatically
// releases the reference held on the dynamic object.
//
// History: 1999-11-16 vtan created
// 2000-02-01 vtan moved from Neptune to Whistler
// --------------------------------------------------------------------------
class CDynamicCountedObjectArray : public CDynamicArray { public: CDynamicCountedObjectArray (void); virtual ~CDynamicCountedObjectArray (void);
NTSTATUS Add (CCountedObject *pData); virtual NTSTATUS Remove (int iElementIndex);
CCountedObject* Get (int iElementIndex); };
#endif /* _DynamicArray_ */
|