text: // -*- Mode: c++; c-basic-offset: 4; tab-width: 4; -*-
  
  /****************************************************************************** 
   * 
   *  file:  VersionVisitor.h
   * 
   *  Copyright (c) 2003, Michael E. Smoot .
   *  All rights reverved.
   * 
   *  See the file COPYING in the top directory of this distribution for
   *  more information.
   *  
   *  THE SOFTWARE IS PROVIDED _AS IS_, WITHOUT WARRANTY OF ANY KIND, EXPRESS 
   *  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
   *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 
   *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
   *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
   *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
   *  DEALINGS IN THE SOFTWARE.  
   *  
   *****************************************************************************/ 
  
  
  #ifndef TCLAP_VERSION_VISITOR_H
  #define TCLAP_VERSION_VISITOR_H
  
  #include "./CmdLineInterface.h"
  #include "./CmdLineOutput.h"
  #include "./Visitor.h"
  
  namespace TCLAP {
  
  /**
   * A Vistor that will call the version method of the given CmdLineOutput
   * for the specified CmdLine object and then exit.
   */
  class VersionVisitor: public Visitor
  {
  	private:
  		/**
  		 * Prevent accidental copying
  		 */
  		VersionVisitor(const VersionVisitor& rhs);
  		VersionVisitor& operator=(const VersionVisitor& rhs);
  
  	protected:
  
  		/**
  		 * The CmdLine of interest.
  		 */
  		CmdLineInterface* _cmd;
  
  		/**
  		 * The output object. 
  		 */
  		CmdLineOutput** _out;
  
  	public:
  
  		/**
  		 * Constructor.
  		 * \param cmd - The CmdLine the output is generated for. 
  		 * \param out - The type of output. 
  		 */
  		VersionVisitor( CmdLineInterface* cmd, CmdLineOutput** out ) 
  				: Visitor(), _cmd( cmd ), _out( out ) { }
  
  		/**
  		 * Calls the version method of the output object using the
  		 * specified CmdLine.
  		 */
  		void visit() { 
  		    (*_out)->version(*_cmd); 
  		    throw ExitException(0); 
  		}
  
  };
  
  }
  
  #endif
  