00001
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00035
00036 #ifndef GROOVX_RUTZ_FACTORY_CC_UTC20050626084020_DEFINED
00037 #define GROOVX_RUTZ_FACTORY_CC_UTC20050626084020_DEFINED
00038
00039 #include "factory.h"
00040
00041 #include "rutz/trace.h"
00042
00043 namespace
00044 {
00045 class function_fallback : public rutz::factory_fallback
00046 {
00047 public:
00048 typedef rutz::factory_base::fallback_t fallback_t;
00049
00050 function_fallback(fallback_t* f) throw() : m_func(f) {}
00051
00052 virtual ~function_fallback() throw() {}
00053
00054 virtual void try_fallback(const rutz::fstring& key) const
00055 {
00056 if (m_func != 0)
00057 (*m_func)(key);
00058 }
00059
00060 private:
00061 fallback_t* m_func;
00062 };
00063 }
00064
00065 rutz::factory_fallback::factory_fallback() throw()
00066 {}
00067
00068 rutz::factory_fallback::~factory_fallback() throw()
00069 {}
00070
00071 rutz::factory_base::factory_base() throw()
00072 :
00073 m_fallback()
00074 {
00075 GVX_TRACE("rutz::factory_base::factory_base");
00076 }
00077
00078 rutz::factory_base::~factory_base() throw()
00079 {
00080 GVX_TRACE("rutz::factory_base::~factory_base");
00081 }
00082
00083 void rutz::factory_base::set_fallback(rutz::shared_ptr<factory_fallback> f)
00084 {
00085 GVX_TRACE("rutz::factory_base::set_fallback(object)");
00086
00087 m_fallback = f;
00088 }
00089
00090 void rutz::factory_base::set_fallback(fallback_t* fptr)
00091 {
00092 GVX_TRACE("rutz::factory_base::set_fallback");
00093 m_fallback = rutz::make_shared(new function_fallback(fptr));
00094 }
00095
00096 void rutz::factory_base::try_fallback(const rutz::fstring& key) const
00097 {
00098 GVX_TRACE("rutz::factory_base::try_fallback");
00099
00100 if (m_fallback.get() != 0)
00101 m_fallback->try_fallback(key);
00102 }
00103
00104 static const char __attribute__((used)) vcid_groovx_rutz_factory_cc_utc20050626084020[] = "$Id: factory.cc 10065 2007-04-12 05:54:56Z rjpeters $ $HeadURL: file:
00105 #endif // !GROOVX_RUTZ_FACTORY_CC_UTC20050626084020_DEFINED