Tiny inline class representing a change counter.
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2692 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -0,0 +1,42 @@
|
|||||||
|
//----------------------------------------------------------------------
|
||||||
|
// This software is part of the OpenBeOS distribution and is covered
|
||||||
|
// by the OpenBeOS license.
|
||||||
|
//---------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef CHANGE_COUNTER_H
|
||||||
|
#define CHANGE_COUNTER_H
|
||||||
|
|
||||||
|
#include <ObjectLocker.h>
|
||||||
|
|
||||||
|
class RChangeCounter {
|
||||||
|
public:
|
||||||
|
RChangeCounter() : fCount(0), fLocked(0), fChanged(false) {}
|
||||||
|
~RChangeCounter() {}
|
||||||
|
|
||||||
|
int32 Count() const { return fCount; }
|
||||||
|
|
||||||
|
bool Lock() { fLocked++; return true; }
|
||||||
|
void Unlock() { if (fLocked > 0) fLocked--; }
|
||||||
|
|
||||||
|
bool Increment()
|
||||||
|
{
|
||||||
|
bool changed = false;
|
||||||
|
if (fLocked && !fChanged) {
|
||||||
|
fCount++;
|
||||||
|
changed = fChanged = true;
|
||||||
|
}
|
||||||
|
return changed;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Reset() { fCount = 0; fLocked = 0; fChanged = false; }
|
||||||
|
|
||||||
|
public:
|
||||||
|
typedef BPrivate::BObjectLocker<RChangeCounter> Locker;
|
||||||
|
|
||||||
|
private:
|
||||||
|
int32 fCount;
|
||||||
|
int32 fLocked;
|
||||||
|
bool fChanged;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CHANGE_COUNTER_H
|
||||||
Reference in New Issue
Block a user