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