pthread_counter.hpp

00001 #line 882 "./lpsrc/flx_pthread.pak"
00002 #ifndef __PTHREAD_COUNTER__
00003 #define __PTHREAD_COUNTER__
00004 #include <flx_pthread_config.hpp>
00005 #include "pthread_mutex.hpp"
00006 #include "pthread_condv.hpp"
00007 
00008 namespace flx { namespace pthread {
00009 
00010 // ********************************************************
00011 /// Counter with zero signal
00012 // ********************************************************
00013 class PTHREAD_EXTERN flx_ts_counter_t {
00014   flx_mutex_t m;
00015   flx_condv_t c;
00016   long x;
00017   void operator=(flx_ts_counter_t const &);
00018   flx_ts_counter_t(flx_ts_counter_t const &);
00019 public:
00020   flx_ts_counter_t();
00021   ~flx_ts_counter_t();
00022   long pre_incr(); // value AFTER increment
00023   long pre_decr(); // value AFTER decrement
00024   long post_incr(); // value BEFORE increment
00025   long post_decr(); // value BEFORE decrement
00026 
00027   long get();
00028   long set(long);   // returns argument
00029   long swap(long);  // returns old value
00030   long decr_pos(); // decrement if >0
00031   void wait_zero(); // wait for zero
00032   long operator++() { return pre_incr(); }
00033   long operator--() { return pre_decr(); }
00034   long operator++(int) { return post_incr(); }
00035   long operator--(int) { return post_decr(); }
00036   long operator*() { return get(); }
00037   long operator=(long a) { return set(a); }
00038 };
00039 }}
00040 
00041 #endif
00042 

Generated on Mon Dec 11 17:13:32 2006 for Felix by  doxygen 1.5.1