//===-- 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_