1 //===-- RefCounter.h --------------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef liblldb_RefCounter_h_ 11 #define liblldb_RefCounter_h_ 12 13 #include "lldb/lldb-public.h" 14 15 namespace lldb_utility { 16 17 //---------------------------------------------------------------------- 18 // A simple reference counter object. You need an uint32_t* to use it 19 // Once that is in place, everyone who needs to ref-count, can say 20 // RefCounter ref(ptr); 21 // (of course, the pointer is a shared resource, and must be accessible to 22 // everyone who needs it). Synchronization is handled by RefCounter itself 23 // The counter is decreased each time a RefCounter to it goes out of scope 24 //---------------------------------------------------------------------- 25 class RefCounter 26 { 27 public: 28 typedef uint32_t value_type; 29 30 RefCounter(value_type* ctr); 31 32 ~RefCounter(); 33 34 private: 35 value_type* m_counter; 36 DISALLOW_COPY_AND_ASSIGN (RefCounter); 37 38 template <class T> 39 inline T 40 increment(T* t) 41 { 42 return __sync_fetch_and_add(t, 1); 43 } 44 45 template <class T> 46 inline T 47 decrement(T* t) 48 { 49 return __sync_fetch_and_add(t, -1); 50 } 51 52 }; 53 54 } // namespace lldb_utility 55 56 #endif // #ifndef liblldb_RefCounter_h_ 57