From 0ec9a1db4074a4d23010905045d68023cf5f57b2 Mon Sep 17 00:00:00 2001 From: humesikkins Date: Tue, 25 Mar 2003 23:52:04 +0000 Subject: [PATCH] added Loki-Namespace-Qualification to definition of ClassLevelLockable's static member. git-svn-id: svn://svn.code.sf.net/p/loki-lib/code/trunk@128 7ec92016-0320-0410-acc4-a06ded1c099a --- MSVC/1200/Threads.h | 64 +++++++++++++++++++++++---------------------- 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/MSVC/1200/Threads.h b/MSVC/1200/Threads.h index d26d04a..b0d63c6 100644 --- a/MSVC/1200/Threads.h +++ b/MSVC/1200/Threads.h @@ -8,11 +8,11 @@ // affects only default template arguments //////////////////////////////////////////////////////////////////////////////// -// Last update: Feb 20, 2003 +// Last update: Mar 26, 2003 // note: In this VC 6 port all template policies become non-templates with // either member-template functions or a nested template struct named In -// Changed wrong ctor/dtor names in ObjectLevelLockable. +// Changed wrong ctor/dtor names in ObjectLevelLockable. // Thanks to Adi Shavit for pointing that out #ifndef DEFAULT_THREADING @@ -37,26 +37,26 @@ namespace Loki Lock() {} explicit Lock(const SingleThreaded&) {} }; - + typedef Host VolatileType; - typedef int IntType; + typedef int IntType; static IntType AtomicAdd(volatile IntType& lval, IntType val) { return lval += val; } - + static IntType AtomicSubtract(volatile IntType& lval, IntType val) { return lval -= val; } static IntType AtomicMultiply(volatile IntType& lval, IntType val) { return lval *= val; } - + static IntType AtomicDivide(volatile IntType& lval, IntType val) { return lval /= val; } - + static IntType AtomicIncrement(volatile IntType& lval) { return ++lval; } - + static IntType AtomicDecrement(volatile IntType& lval) { return --lval; } @@ -69,12 +69,12 @@ namespace Loki */ static void AtomicAssign(volatile IntType & lval, IntType val) { lval = val; } - + static void AtomicAssign(IntType & lval, volatile IntType & val) { lval = val; } }; }; - + #ifdef _WINDOWS_ //////////////////////////////////////////////////////////////////////////////// @@ -83,7 +83,7 @@ namespace Loki // Implements a object-level locking scheme //////////////////////////////////////////////////////////////////////////////// - + struct ObjectLevelLockable { template @@ -105,11 +105,11 @@ namespace Loki class Lock; friend class Lock; - + class Lock { ObjectLevelLockable::In& host_; - + Lock(const Lock&); Lock& operator=(const Lock&); //Lock(); // buggy design @@ -127,22 +127,22 @@ namespace Loki typedef volatile Host VolatileType; - typedef LONG IntType; + typedef LONG IntType; static IntType AtomicIncrement(volatile IntType& lval) { return InterlockedIncrement(&const_cast(lval)); } - + static IntType AtomicDecrement(volatile IntType& lval) { return InterlockedDecrement(&const_cast(lval)); } - + static void AtomicAssign(volatile IntType& lval, IntType val) { InterlockedExchange(&const_cast(lval), val); } - + static void AtomicAssign(IntType& lval, volatile IntType& val) { InterlockedExchange(&lval, val); } }; }; - + struct ClassLevelLockable { template @@ -152,8 +152,8 @@ namespace Loki struct Initializer; friend struct Initializer; struct Initializer - { - + { + CRITICAL_SECTION mtx_; Initializer() @@ -165,13 +165,13 @@ namespace Loki ::DeleteCriticalSection(&mtx_); } }; - + static Initializer initializer_; public: class Lock; friend class Lock; - + class Lock { Lock(const Lock&); @@ -193,27 +193,27 @@ namespace Loki typedef volatile Host VolatileType; - typedef LONG IntType; + typedef LONG IntType; static IntType AtomicIncrement(volatile IntType& lval) { return InterlockedIncrement(&const_cast(lval)); } - + static IntType AtomicDecrement(volatile IntType& lval) { return InterlockedDecrement(&const_cast(lval)); } - + static void AtomicAssign(volatile IntType& lval, IntType val) { InterlockedExchange(&const_cast(lval), val); } - + static void AtomicAssign(IntType& lval, volatile IntType& val) { InterlockedExchange(&lval, val); } }; }; - + template - typename ClassLevelLockable::template In::Initializer - ClassLevelLockable::template In::initializer_; - -#endif + typename Loki::ClassLevelLockable::template In::Initializer + Loki::ClassLevelLockable::template In::initializer_; + +#endif } //////////////////////////////////////////////////////////////////////////////// @@ -221,6 +221,8 @@ namespace Loki // June 20, 2001: ported by Nick Thurn to gcc 2.95.3. Kudos, Nick!!! // Oct 06, 2002: ported by Benjamin Kaufmann to MSVC 6.0 // Feb 20, 2003: corrected constructor parameter in ObjectLevelLockable::Lock +// Mar 26, 2003: added Loki-Namespace-Qualification to definition of +// ClassLevelLockable's static member. //////////////////////////////////////////////////////////////////////////////// #endif