00001 00002 00003 template<typename T> 00004 class service_impl_t : public T 00005 { 00006 public: 00007 int FB2KAPI service_release() throw() { 00008 int ret = --m_counter; 00009 if (ret == 0) try { delete this; } catch(...) {PFC_ASSERT(0);} 00010 return ret;} 00011 int FB2KAPI service_add_ref() throw() {return ++m_counter;} 00012 00013 TEMPLATE_CONSTRUCTOR_FORWARD_FLOOD(service_impl_t,T) 00014 private: 00015 pfc::refcounter m_counter; 00016 }; 00017 00020 template<typename T> 00021 class service_impl_single_t : public T 00022 { 00023 public: 00024 int FB2KAPI service_release() throw() {return 1;} 00025 int FB2KAPI service_add_ref() throw() {return 1;} 00026 00027 TEMPLATE_CONSTRUCTOR_FORWARD_FLOOD(service_impl_single_t,T) 00028 };
1.5.5