IBR-DTNSuite  0.8
ibrcommon/ibrcommon/thread/AtomicCounter.h
Go to the documentation of this file.
00001 /*
00002  * AtomicCounter.h
00003  *
00004  *  Created on: 12.02.2010
00005  *      Author: morgenro
00006  */
00007 
00008 #ifndef ATOMICCOUNTER_H_
00009 #define ATOMICCOUNTER_H_
00010 
00011 #include "ibrcommon/thread/Conditional.h"
00012 
00013 namespace ibrcommon
00014 {
00015         class AtomicCounter {
00016         public:
00017                 AtomicCounter(int init = 0);
00018                 virtual ~AtomicCounter();
00019 
00020                 int value();
00021                 void wait(int until = 0);
00022 
00023                 void unblockAll();
00024 
00025                 AtomicCounter& operator++();
00026                 AtomicCounter operator++(int);
00027 
00028                 AtomicCounter& operator--();
00029                 AtomicCounter operator--(int);
00030 
00031                 class Lock
00032                 {
00033                 public:
00034                         Lock(AtomicCounter &counter);
00035                         virtual ~Lock();
00036 
00037                 private:
00038                         AtomicCounter &_counter;
00039                 };
00040 
00041         private:
00042                 ibrcommon::Conditional _lock;
00043                 int _value;
00044                 bool _unblock;
00045 
00046         };
00047 }
00048 
00049 
00050 #endif /* ATOMICCOUNTER_H_ */