00001
00002
00003
00004 #ifndef UTILMM_SINGLETON_DUMMY_HEADER
00005 # define UTILMM_SINGLETON_DUMMY_HEADER
00006
00007 # include <string>
00008 #include <boost/utility.hpp>
00009
00010 #include "utilmm/singleton/bits/server_fwd.hh"
00011
00012 namespace utilmm {
00013 namespace singleton {
00014 class dummy;
00015
00016 namespace details {
00017 struct dummy_factory {
00018 virtual ~dummy_factory() {};
00019 virtual dummy* create() const = 0;
00020 };
00021 }
00022
00032 class dummy :public ::boost::noncopyable {
00033 protected:
00035 dummy();
00037 virtual ~dummy() =0;
00038
00048 static void attach(std::string const &name, details::dummy_factory const& factory);
00057 static void detach(std::string const &name);
00058
00066 static dummy *instance(std::string const &name);
00067
00068 private:
00069 void incr_ref() const;
00070 bool decr_ref() const;
00071
00072 mutable size_t ref_counter;
00073
00074 friend class utilmm::singleton::server;
00075 };
00076
00077 }
00078 }
00079
00080 #endif // UTILMM_SINGLETON_DUMMY_HEADER
00081