1 
2 /******************************************************************************
3  *
4  *  file:  HelpVisitor.h
5  *
6  *  Copyright (c) 2003, Michael E. Smoot .
7  *  All rights reverved.
8  *
9  *  See the file COPYING in the top directory of this distribution for
10  *  more information.
11  *
12  *  THE SOFTWARE IS PROVIDED _AS IS_, WITHOUT WARRANTY OF ANY KIND, EXPRESS
13  *  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14  *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
15  *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
16  *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
17  *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
18  *  DEALINGS IN THE SOFTWARE.
19  *
20  *****************************************************************************/
21 
22 #ifndef TCLAP_HELP_VISITOR_H
23 #define TCLAP_HELP_VISITOR_H
24 
25 #include <tclap/CmdLineInterface.h>
26 #include <tclap/CmdLineOutput.h>
27 #include <tclap/Visitor.h>
28 
29 namespace TCLAP {
30 
31 /**
32  * A Visitor object that calls the usage method of the given CmdLineOutput
33  * object for the specified CmdLine object.
34  */
35 class HelpVisitor: public Visitor
36 {
37 	private:
38 		/**
39 		 * Prevent accidental copying.
40 		 */
41 		HelpVisitor(const HelpVisitor& rhs);
42 		HelpVisitor& operator=(const HelpVisitor& rhs);
43 
44 	protected:
45 
46 		/**
47 		 * The CmdLine the output will be generated for.
48 		 */
49 		CmdLineInterface* _cmd;
50 
51 		/**
52 		 * The output object.
53 		 */
54 		CmdLineOutput** _out;
55 
56 	public:
57 
58 		/**
59 		 * Constructor.
60 		 * \param cmd - The CmdLine the output will be generated for.
61 		 * \param out - The type of output.
62 		 */
HelpVisitor(CmdLineInterface * cmd,CmdLineOutput ** out)63 		HelpVisitor(CmdLineInterface* cmd, CmdLineOutput** out)
64 				: Visitor(), _cmd( cmd ), _out( out ) { }
65 
66 		/**
67 		 * Calls the usage method of the CmdLineOutput for the
68 		 * specified CmdLine.
69 		 */
visit()70 		void visit() { (*_out)->usage(*_cmd); throw ExitException(0); }
71 
72 };
73 
74 }
75 
76 #endif
77