WindowsXP/Source/XPSP1/NT/inetsrv/query/cindex/pqueue.hxx
2024-08-03 16:30:48 +02:00

83 lines
1.9 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1995.
//
// File: PQueue.cxx
//
// Purpose: 'Pending' queue. Queue of pending notifications.
//
// Classes: CPendingQueue
//
// History: 30-Aug-95 KyleP Created
//
//----------------------------------------------------------------------------
#pragma once
//+---------------------------------------------------------------------------
//
// Class: CPendingQueue
//
// Purpose: Queue of pending notifications
//
// History: 30-Aug-95 KyleP Created.
//
//----------------------------------------------------------------------------
class CPendingQueue
{
public:
//
// Construction and destruction
//
CPendingQueue();
~CPendingQueue();
//
// Queue operations
//
unsigned LokPrepare( WORKID wid );
BOOL LokComplete( unsigned iHint, WORKID wid, USN usn, VOLUMEID volumeId, PARTITIONID partid, ULONG action );
BOOL LokRemove( WORKID & wid, USN & usn, VOLUMEID& volumeId, PARTITIONID & partid, ULONG & action );
unsigned LokCountCompleted();
void LokGetCompleted( WORKID * awid );
CMutexSem& GetMutex () { return _mutex; }
void LokFlushCompletedEntries();
void LokFlushAllEntries();
private:
class CDocItem
{
public:
USN usn;
VOLUMEID volumeId;
WORKID wid;
PARTITIONID partid;
ULONG action;
unsigned hint;
BOOL fComplete;
};
unsigned _cUnique; // Unique cookie
unsigned _iBottom; // Bottom of queue. Used to optimize ::Remove
unsigned _iTop; // First free element at top of queue.
unsigned _cDoc; // Size of queue
CDocItem * _aDoc; // Queue itself.
CMutexSem _mutex; // It gets it's own lock.
};