factory.cc

Go to the documentation of this file.
00001 /** @file rutz/factory.cc template class for object factories, which
00002     create objects belonging to some inheritance hierarchy given just
00003     a type name as a string */
00004 
00005 ///////////////////////////////////////////////////////////////////////
00006 //
00007 // Copyright (c) 1999-2004 California Institute of Technology
00008 // Copyright (c) 2004-2007 University of Southern California
00009 // Rob Peters <rjpeters at usc dot edu>
00010 //
00011 // created: Sat Nov 20 22:37:31 1999
00012 // commit: $Id: factory.cc 8249 2007-04-12 06:03:40Z rjpeters $
00013 // $HeadURL: svn://isvn.usc.edu/software/invt/trunk/saliency/src/rutz/factory.cc $
00014 //
00015 // --------------------------------------------------------------------
00016 //
00017 // This file is part of GroovX.
00018 //   [http://ilab.usc.edu/rjpeters/groovx/]
00019 //
00020 // GroovX is free software; you can redistribute it and/or modify it
00021 // under the terms of the GNU General Public License as published by
00022 // the Free Software Foundation; either version 2 of the License, or
00023 // (at your option) any later version.
00024 //
00025 // GroovX is distributed in the hope that it will be useful, but
00026 // WITHOUT ANY WARRANTY; without even the implied warranty of
00027 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00028 // General Public License for more details.
00029 //
00030 // You should have received a copy of the GNU General Public License
00031 // along with GroovX; if not, write to the Free Software Foundation,
00032 // Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
00033 //
00034 ///////////////////////////////////////////////////////////////////////
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 8249 2007-04-12 06:03:40Z rjpeters $ $HeadURL: svn://isvn.usc.edu/software/invt/trunk/saliency/src/rutz/factory.cc $";
00105 #endif // !GROOVX_RUTZ_FACTORY_CC_UTC20050626084020_DEFINED
Generated on Sun May 8 08:42:09 2011 for iLab Neuromorphic Vision Toolkit by  doxygen 1.6.3