1 #ifndef DOZERG_LOCK_INT_H_20070916 2 #define DOZERG_LOCK_INT_H_20070916 16 #include "impl/lock_int_impl.hh" 20 template<
typename T,
class LockT = CSpinLock>
21 class CLockInt :
public NS_IMPL::CLockIntBase<T, LockT, NS_IMPL::__ExtraEmpty<T> >
23 typedef NS_IMPL::CLockIntBase<T, LockT, NS_IMPL::__ExtraEmpty<T> > __MyBase;
26 typedef typename __MyBase::value_type value_type;
27 explicit CLockInt(value_type c = value_type()):__MyBase(c){}
28 CLockInt(
const __Myt & c):__MyBase(c.load()){}
29 value_type operator =(value_type c)
volatile{
30 __MyBase::operator =(c);
35 template<
typename T,
class LockT = CSpinLock>
36 class CLockIntMax :
public NS_IMPL::CLockIntBase<T, LockT, NS_IMPL::__ExtraMax<T> >
38 typedef NS_IMPL::CLockIntBase<T, LockT, NS_IMPL::__ExtraMax<T> > __MyBase;
41 typedef typename __MyBase::value_type value_type;
42 explicit CLockIntMax(value_type c = value_type()):__MyBase(c){}
44 value_type operator =(value_type c)
volatile{
45 __MyBase::operator =(c);
48 value_type max()
const volatile{
49 typename __MyBase::guard_type g(__MyBase::lock_);
50 return __MyBase::e_.m_;
53 value_type resetMax()
volatile{
54 typename __MyBase::guard_type g(__MyBase::lock_);
55 value_type ret = __MyBase::e_.m_;
56 __MyBase::e_.m_ = __MyBase::v_;
61 template<
typename T,
class LockT = CSpinLock>
62 class CLockIntMinMax :
public NS_IMPL::CLockIntBase<T, LockT, NS_IMPL::__ExtraMinMax<T> >
64 typedef NS_IMPL::CLockIntBase<T, LockT, NS_IMPL::__ExtraMinMax<T> > __MyBase;
67 typedef typename __MyBase::value_type value_type;
70 value_type operator =(value_type c)
volatile{
71 __MyBase::operator =(c);
74 value_type min()
const volatile{
75 typename __MyBase::guard_type g(__MyBase::lock_);
76 return __MyBase::e_.mi_;
78 value_type max()
const volatile{
79 typename __MyBase::guard_type g(__MyBase::lock_);
80 return __MyBase::e_.ma_;
85 void resetMinMax(value_type * oldMin, value_type * oldMax)
volatile{
86 typename __MyBase::guard_type g(__MyBase::lock_);
88 *oldMin = __MyBase::e_.mi_;
90 *oldMax = __MyBase::e_.ma_;
91 __MyBase::e_.mi_ = __MyBase::e_.ma_ = __MyBase::v_;
Definition: lock_int.hh:36
Definition: lock_int.hh:62
Definition: lock_int.hh:21