ChannelVisitor.H

Go to the documentation of this file.
00001 /*!@file Channels/ChannelVisitor.H */
00002 
00003 // //////////////////////////////////////////////////////////////////// //
00004 // The iLab Neuromorphic Vision C++ Toolkit - Copyright (C) 2000-2005   //
00005 // by the University of Southern California (USC) and the iLab at USC.  //
00006 // See http://iLab.usc.edu for information about this project.          //
00007 // //////////////////////////////////////////////////////////////////// //
00008 // Major portions of the iLab Neuromorphic Vision Toolkit are protected //
00009 // under the U.S. patent ``Computation of Intrinsic Perceptual Saliency //
00010 // in Visual Environments, and Applications'' by Christof Koch and      //
00011 // Laurent Itti, California Institute of Technology, 2001 (patent       //
00012 // pending; application number 09/912,225 filed July 23, 2001; see      //
00013 // http://pair.uspto.gov/cgi-bin/final/home.pl for current status).     //
00014 // //////////////////////////////////////////////////////////////////// //
00015 // This file is part of the iLab Neuromorphic Vision C++ Toolkit.       //
00016 //                                                                      //
00017 // The iLab Neuromorphic Vision C++ Toolkit is free software; you can   //
00018 // redistribute it and/or modify it under the terms of the GNU General  //
00019 // Public License as published by the Free Software Foundation; either  //
00020 // version 2 of the License, or (at your option) any later version.     //
00021 //                                                                      //
00022 // The iLab Neuromorphic Vision C++ Toolkit is distributed in the hope  //
00023 // that it will be useful, but WITHOUT ANY WARRANTY; without even the   //
00024 // implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      //
00025 // PURPOSE.  See the GNU General Public License for more details.       //
00026 //                                                                      //
00027 // You should have received a copy of the GNU General Public License    //
00028 // along with the iLab Neuromorphic Vision C++ Toolkit; if not, write   //
00029 // to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,   //
00030 // Boston, MA 02111-1307 USA.                                           //
00031 // //////////////////////////////////////////////////////////////////// //
00032 //
00033 // Primary maintainer for this file: Rob Peters <rjpeters at usc dot edu>
00034 // $HeadURL: svn://isvn.usc.edu/software/invt/trunk/saliency/src/Channels/ChannelVisitor.H $
00035 // $Id: ChannelVisitor.H 6679 2006-06-02 18:45:56Z rjpeters $
00036 //
00037 
00038 #ifndef CHANNELS_CHANNELVISITOR_H_DEFINED
00039 #define CHANNELS_CHANNELVISITOR_H_DEFINED
00040 
00041 class ChannelBase;
00042 class SingleChannel;
00043 class ComplexChannel;
00044 
00045 /// Abstract base class for algorithms that traverse an entire tree of channel objects.
00046 /** This is a straightforward implementation of the "Visitor" design
00047     pattern; see http://en.wikipedia.org/wiki/Visitor_pattern for
00048     details */
00049 class ChannelVisitor
00050 {
00051 public:
00052   /// Virtual destructor for safe base class destruction
00053   virtual ~ChannelVisitor();
00054 
00055   /// Visit the given ChannelBase node.
00056   virtual void visitChannelBase(ChannelBase& chan) = 0;
00057 
00058   /// Visit the given SingleChannel node.
00059   virtual void visitSingleChannel(SingleChannel& chan) = 0;
00060 
00061   /// Visit the given ComplexChannel node.
00062   /** NOTE: ComplexChannel does NOT provide the iteration over its
00063       subchannels; instead, each ChannelVisitor subclass must iterate
00064       over ComplexChannel's subchannels, calling
00065       subChan(i)->accept(*this) for each one. Although this requires
00066       slightly more code for each ChannelVisitor subclass, it is also
00067       much more flexible since it lets the visitor be aware of the
00068       hierarchical structres of the various channels that it
00069       visits. */
00070   virtual void visitComplexChannel(ComplexChannel& chan) = 0;
00071 };
00072 
00073 // ######################################################################
00074 /* So things look consistent in everyone's emacs... */
00075 /* Local Variables: */
00076 /* mode: c++ */
00077 /* indent-tabs-mode: nil */
00078 /* End: */
00079 
00080 #endif // CHANNELS_CHANNELVISITOR_H_DEFINED
Generated on Sun May 8 08:40:21 2011 for iLab Neuromorphic Vision Toolkit by  doxygen 1.6.3