ROOT logo
// @(#)root/thread:$Id: TAtomicCount.h 20882 2007-11-19 11:31:26Z rdm $
// Author: Fons Rademakers   14/11/06

/*************************************************************************
 * Copyright (C) 1995-2006, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#ifndef ROOT_TAtomicCount
#define ROOT_TAtomicCount


//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TAtomicCount                                                         //
//                                                                      //
// Class providing atomic operations on a long. Setting, getting,       //
// incrementing and decrementing are atomic, thread safe, operations.   //
//                                                                      //
//  TAtomicCount a(n);                                                  //
//                                                                      //
//    (n is convertible to long)                                        //
//                                                                      //
//    Effects: Constructs an TAtomicCount with an initial value of n.   //
//                                                                      //
//  long(a);                                                            //
//                                                                      //
//    Returns: (long) the current value of a.                           //
//                                                                      //
//  ++a;                                                                //
//                                                                      //
//    Effects: Atomically increments the value of a.                    //
//    Returns: nothing.                                                 //
//                                                                      //
//  --a;                                                                //
//                                                                      //
//    Effects: Atomically decrements the value of a.                    //
//    Returns: (long) zero if the new value of a is zero,               //
//             unspecified non-zero value otherwise                     //
//             (usually the new value).                                 //
//                                                                      //
//  a.Set(n);                                                           //
//                                                                      //
//    Effects: Set a to the value n.                                    //
//    Returns: nothing.                                                 //
//                                                                      //
//  a.Get();                                                            //
//                                                                      //
//    Returns: (long) the current value of a.                           //
//                                                                      //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#ifndef ROOT_Rtypes
#include "Rtypes.h"
#endif
#ifndef ROOT_RConfigure
#include "RConfigure.h"
#endif

#if (defined(__GLIBCPP__) || defined(__GLIBCXX__)) && !defined(__CINT__)
#include "TAtomicCountGcc.h"
#elif defined(_WIN32) && !defined(__CINT__)
#include "TAtomicCountWin32.h"
#elif defined(R__HAS_PTHREAD) && !defined(__CINT__)
#include "TAtomicCountPthread.h"
#else
class TAtomicCount {
private:
   Long_t  fCnt;   // counter

   TAtomicCount(const TAtomicCount &);             // not implemented
   TAtomicCount &operator=(const TAtomicCount &);  // not implemented

public:
   explicit TAtomicCount(Long_t v) : fCnt(v) { }
   void operator++() { ++fCnt; }
   Long_t operator--() { return --fCnt; }
   operator long() const { return fCnt; }
   void Set(Long_t v) { fCnt = v; }
   Long_t Get() const { return fCnt; }
};
#endif

#endif
 TAtomicCount.h:1
 TAtomicCount.h:2
 TAtomicCount.h:3
 TAtomicCount.h:4
 TAtomicCount.h:5
 TAtomicCount.h:6
 TAtomicCount.h:7
 TAtomicCount.h:8
 TAtomicCount.h:9
 TAtomicCount.h:10
 TAtomicCount.h:11
 TAtomicCount.h:12
 TAtomicCount.h:13
 TAtomicCount.h:14
 TAtomicCount.h:15
 TAtomicCount.h:16
 TAtomicCount.h:17
 TAtomicCount.h:18
 TAtomicCount.h:19
 TAtomicCount.h:20
 TAtomicCount.h:21
 TAtomicCount.h:22
 TAtomicCount.h:23
 TAtomicCount.h:24
 TAtomicCount.h:25
 TAtomicCount.h:26
 TAtomicCount.h:27
 TAtomicCount.h:28
 TAtomicCount.h:29
 TAtomicCount.h:30
 TAtomicCount.h:31
 TAtomicCount.h:32
 TAtomicCount.h:33
 TAtomicCount.h:34
 TAtomicCount.h:35
 TAtomicCount.h:36
 TAtomicCount.h:37
 TAtomicCount.h:38
 TAtomicCount.h:39
 TAtomicCount.h:40
 TAtomicCount.h:41
 TAtomicCount.h:42
 TAtomicCount.h:43
 TAtomicCount.h:44
 TAtomicCount.h:45
 TAtomicCount.h:46
 TAtomicCount.h:47
 TAtomicCount.h:48
 TAtomicCount.h:49
 TAtomicCount.h:50
 TAtomicCount.h:51
 TAtomicCount.h:52
 TAtomicCount.h:53
 TAtomicCount.h:54
 TAtomicCount.h:55
 TAtomicCount.h:56
 TAtomicCount.h:57
 TAtomicCount.h:58
 TAtomicCount.h:59
 TAtomicCount.h:60
 TAtomicCount.h:61
 TAtomicCount.h:62
 TAtomicCount.h:63
 TAtomicCount.h:64
 TAtomicCount.h:65
 TAtomicCount.h:66
 TAtomicCount.h:67
 TAtomicCount.h:68
 TAtomicCount.h:69
 TAtomicCount.h:70
 TAtomicCount.h:71
 TAtomicCount.h:72
 TAtomicCount.h:73
 TAtomicCount.h:74
 TAtomicCount.h:75
 TAtomicCount.h:76
 TAtomicCount.h:77
 TAtomicCount.h:78
 TAtomicCount.h:79
 TAtomicCount.h:80
 TAtomicCount.h:81
 TAtomicCount.h:82
 TAtomicCount.h:83
 TAtomicCount.h:84
 TAtomicCount.h:85
 TAtomicCount.h:86
 TAtomicCount.h:87
 TAtomicCount.h:88