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.
|
|
/*++
Copyright (C) Microsoft Corporation, 2000
Module Name:
CtxColl.hxx
Abstract:
Class definitions for the context handle collection.
Author:
Kamen Moutafov [KamenM]
Revision History:
KamenM Sep 2000 Created
--*/
#if _MSC_VER >= 1200
#pragma once
#endif
#ifndef __CTXCOLL_HXX_
#define __CTXCOLL_HXX_
// the collection of context handles. For right now
// a simple double linked list. For the future, we
// have to find something more scalable for large
// number of elements
class ContextCollection { private: LIST_ENTRY ListHead; MUTEX CollectionMutex;
public: ContextCollection ( IN OUT RPC_STATUS *RpcStatus ) : CollectionMutex(RpcStatus, TRUE, // fPreallocateSemaphore
0 // dwSpinCount
) /*++
Routine Description:
C-tor
Arguments:
RpcStatus - Must be RPC_S_OK on input. Returns either RPC_S_OK or RPC_S_OUT_OF_MEMORY.
--*/ { RpcpInitializeListHead(&ListHead); }
inline void Lock ( void ) { CollectionMutex.Request(); }
inline void Unlock ( void ) { CollectionMutex.Clear(); }
inline void Add ( IN ServerContextHandle *NewHandle ) { CollectionMutex.VerifyOwned(); RpcpfInsertHeadList(&ListHead, &NewHandle->ContextChain); }
inline void Remove ( IN ServerContextHandle *Handle ) { CollectionMutex.VerifyOwned(); RpcpfRemoveEntryList(&Handle->ContextChain); }
inline ServerContextHandle * GetNext ( IN OUT LIST_ENTRY **CurrentListEntry ) { ServerContextHandle *ContextHandle;
CollectionMutex.VerifyOwned(); ASSERT (CurrentListEntry != NULL);
// if we have started with NULL, return the first element
if (*CurrentListEntry == NULL) { *CurrentListEntry = ListHead.Flink; }
// if we have reached the end (or were empty to start with) return NULL
if (*CurrentListEntry == &ListHead) { return NULL; }
ContextHandle = CONTAINING_RECORD(*CurrentListEntry, ServerContextHandle, ContextChain);
*CurrentListEntry = (*CurrentListEntry)->Flink;
return ContextHandle; }
ServerContextHandle * Find ( IN WIRE_CONTEXT *WireContext );
static RPC_STATUS AllocateContextCollection ( OUT ContextCollection **NewColl ); };
RPC_STATUS NDRSContextInitializeCollection ( IN ContextCollection **ContextCollectionPlaceholder );
#endif // __CTXCOLL_HXX
|