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.
|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1990 - 2000
//
// File: CompFlag.hxx
//
//--------------------------------------------------------------------------
/* --------------------------------------------------------------------
File : CompFlag.hxx
Title : Implementation of a flag set.
History :
KamenM - 01/04/2000 - Created.
-------------------------------------------------------------------- */
#ifndef __COMPFLAG_HXX__
#define __COMPFLAG_HXX__
class CompositeFlags { public: inline CompositeFlags(void) { Flags = 0; }
inline void SetFlagUnsafe(unsigned int FlagConstant) { Flags |= FlagConstant; }
inline void SetFlagWithMutex(unsigned int FlagConstant, MUTEX *Mutex) { Mutex->Request(); SetFlagUnsafe(FlagConstant); Mutex->Clear(); }
inline void SetFlagInterlocked(unsigned int FlagConstant) { unsigned int NewFlags, OldFlags; do { OldFlags = Flags; NewFlags = Flags | FlagConstant; } while (InterlockedCompareExchange((long *)&Flags, NewFlags, OldFlags) != (long)OldFlags); }
inline void ClearFlagUnsafe(unsigned int FlagConstant) { Flags &= ~FlagConstant; }
inline void ClearFlagWithMutex(unsigned int FlagConstant, MUTEX *Mutex) { Mutex->Request(); ClearFlagUnsafe(FlagConstant); Mutex->Clear(); }
inline void ClearFlagInterlocked(unsigned int FlagConstant) { unsigned int NewFlags, OldFlags; do { OldFlags = Flags; NewFlags = Flags & (~FlagConstant); } while (InterlockedCompareExchange((long *)&Flags, NewFlags, OldFlags) != (long)OldFlags); }
inline BOOL GetFlag(unsigned int FlagConstant) { return (Flags & FlagConstant); }
private: unsigned int Flags; };
#endif // __COMPFLAG_HXX__
|