00001 #include "ug_thread_safe_counter.h" 00002 #pragma once 00003 // obsolete once intrusive_ref_counter is available everywhere 00004 00005 namespace Moses { 00006 00007 class reference_counter 00008 { 00009 public: 00010 friend void intrusive_ptr_add_ref(reference_counter const* p) 00011 { 00012 if (p) ++p->m_refcount; 00013 } 00014 friend void intrusive_ptr_release(reference_counter const* p) 00015 { 00016 if (p && --p->m_refcount == 0) 00017 delete p; 00018 } 00019 protected: 00020 reference_counter() {} 00021 virtual ~reference_counter() {}; 00022 private: 00023 mutable ThreadSafeCounter m_refcount; 00024 }; 00025 }