// Copyright (C) 2005  Davis E. King (davis@dlib.net)
// License: Boost Software License   See LICENSE.txt for the full license.
#undef DLIB_CMD_LINE_PARSER_PRINt_ABSTRACT_
#ifdef DLIB_CMD_LINE_PARSER_PRINt_ABSTRACT_


#include "cmd_line_parser_kernel_abstract.h"
#include <iosfwd>

namespace dlib
{

    template <
        typename clp_base
        >
    class cmd_line_parser_print : public clp_base
    {

        /*!
            REQUIREMENTS ON CLP_BASE
                clp_base is an implementation of cmd_line_parser/cmd_line_parser_kernel_abstract.h


            POINTERS AND REFERENCES TO INTERNAL DATA
                The print_options() function may invalidate pointers or references to 
                internal data.


            WHAT THIS EXTENSION DOES FOR CMD_LINE_PARSER
                This gives a cmd_line_parser object the ability to print its options
                in a nice format that fits into a console screen.
        !*/


        public:

            void print_options (
                std::basic_ostream<typename clp_base::char_type>& out
            ) const;
            /*!
                ensures
                    - prints all the command line options to out.
                    - #at_start() == true
                throws                
                    - any exception.
                        if an exception is thrown then #at_start() == true but otherwise  
                        it will have no effect on the state of #*this.
            !*/
    };

    template <
        typename clp_base
        >
    inline void swap (
        cmd_line_parser_print<clp_base>& a, 
        cmd_line_parser_print<clp_base>& b 
    ) { a.swap(b); }  
    /*!
        provides a global swap function
    !*/

}

#endif // DLIB_CMD_LINE_PARSER_PRINt_ABSTRACT_