blob: 6daed5498eb824dc30eb1e04d4dd6ffde47e8ba4 [file] [log] [blame]
//===-- RefCounter.h --------------------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef liblldb_RefCounter_h_
#define liblldb_RefCounter_h_
#include "lldb/lldb-public.h"
namespace lldb_utility {
//----------------------------------------------------------------------
// A simple reference counter object. You need an uint32_t* to use it
// Once that is in place, everyone who needs to ref-count, can say
// RefCounter ref(ptr);
// (of course, the pointer is a shared resource, and must be accessible to
// everyone who needs it). Synchronization is handled by RefCounter itself
// The counter is decreased each time a RefCounter to it goes out of scope
//----------------------------------------------------------------------
class RefCounter
{
public:
typedef uint32_t value_type;
RefCounter(value_type* ctr);
~RefCounter();
private:
value_type* m_counter;
DISALLOW_COPY_AND_ASSIGN (RefCounter);
template <class T>
inline T
increment(T* t)
{
return __sync_fetch_and_add(t, 1);
}
template <class T>
inline T
decrement(T* t)
{
return __sync_fetch_and_add(t, -1);
}
};
} // namespace lldb_utility
#endif // #ifndef liblldb_RefCounter_h_