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.
|
|
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 2000.
//
// File: wnotifmg.hxx
//
// Contents: BigTable to Client notifications manager.
//
// Classes:
//
// Functions:
//
// History: 11-30-94 srikants Created
//
//----------------------------------------------------------------------------
#pragma once
class CNotificationRegion; class CRowIndex;
class CNotificationMgr {
public:
CNotificationMgr( CRowIndex & rowIndexSnap ) : _rowIndexSnap(rowIndexSnap), _fSignalled(FALSE), _fFullRegion(FALSE) {}
// Check if any notification regions are currently active.
BOOL IsEmpty() const { return !_fFullRegion; }
// Check if any of the notification regions have already detected a
// change.
BOOL IsSignalled() const { return _fSignalled; }
void SetSignalled () { _fSignalled = TRUE; }
void ClearSignalled() { _fSignalled = FALSE; }
// Region manipulation routines.
void AddRegion( const CNotificationRegion & region );
void DeleteRegion( const CNotificationRegion & region );
void ExtendRegion( const CNotificationRegion & regionOld, const CNotificationRegion & regionNew );
void ShrinkRegion( const CNotificationRegion & regionOld, const CNotificationRegion & regionNew );
// To make the entire region a notification region.
void AddFullRegion() { _fFullRegion = TRUE; }
void DeleteAllRegions() { _fFullRegion = FALSE; }
//
// Check to see if the given row is being added in the notification
// region.
//
BOOL IsAddInNotifyRegion( ULONG oTableRow ) { return _fFullRegion; }
//
// Check to see if the given row is being deleted from a notification
// region.
//
BOOL IsDeleteInNotifyRegion( ULONG oTableRow ) { return _fFullRegion; }
void SplitRegion( CNotificationMgr & left, CNotificationMgr & right, ULONG oSplitRow ) { if ( !_fFullRegion ) { left.DeleteAllRegions(); right.DeleteAllRegions(); } else { left.AddFullRegion(); right.AddFullRegion(); } }
private:
// Snap shot of the row index on which notification regions are defined.
CRowIndex & _rowIndexSnap;
// Flag indicating if any of the notification regions have already seen
// a change.
BOOL _fSignalled;
// The entire region is of interest for notifications
BOOL _fFullRegion;
};
|