summaryrefslogtreecommitdiffstats
path: root/ml/dlib/dlib/cmd_line_parser.h
blob: fd1148038dd4276579ad50036acaea27fc73bde1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// Copyright (C) 2003  Davis E. King (davis@dlib.net)
// License: Boost Software License   See LICENSE.txt for the full license.
#ifndef DLIB_CMD_LINE_PARSEr_
#define DLIB_CMD_LINE_PARSEr_

#include "cmd_line_parser/cmd_line_parser_kernel_1.h"
#include "cmd_line_parser/cmd_line_parser_kernel_c.h"
#include "cmd_line_parser/cmd_line_parser_print_1.h"
#include "cmd_line_parser/cmd_line_parser_check_1.h"
#include "cmd_line_parser/cmd_line_parser_check_c.h"
#include <string>
#include "cmd_line_parser/get_option.h"

#include "map.h"
#include "sequence.h"



namespace dlib
{

// ----------------------------------------------------------------------------------------

    template <
        typename charT
        >
    class impl_cmd_line_parser
    {
        /*!
            This class is basically just a big templated typedef for building 
            a complete command line parser type out of all the parts it needs.
        !*/

        impl_cmd_line_parser() {}

        typedef typename sequence<std::basic_string<charT> >::kernel_2a sequence_2a;
        typedef typename sequence<std::basic_string<charT>*>::kernel_2a psequence_2a;
        typedef typename map<std::basic_string<charT>,void*>::kernel_1a map_1a_string;

    public:
        
        typedef cmd_line_parser_kernel_1<charT,map_1a_string,sequence_2a,psequence_2a> kernel_1a;
        typedef cmd_line_parser_kernel_c<kernel_1a> kernel_1a_c;
        typedef cmd_line_parser_print_1<kernel_1a_c> print_1a_c;
        typedef cmd_line_parser_check_c<cmd_line_parser_check_1<print_1a_c> > check_1a_c;
    };

// ----------------------------------------------------------------------------------------

    template <
        typename charT
        >
    class cmd_line_parser : public impl_cmd_line_parser<charT>::check_1a_c
    {
    public:

        // These typedefs are here for backwards compatibility with previous versions of dlib.
        typedef cmd_line_parser kernel_1a;
        typedef cmd_line_parser kernel_1a_c;
        typedef cmd_line_parser print_1a;
        typedef cmd_line_parser print_1a_c;
        typedef cmd_line_parser check_1a;
        typedef cmd_line_parser check_1a_c;
    };

    template <
        typename charT 
        >
    inline void swap (
        cmd_line_parser<charT>& a, 
        cmd_line_parser<charT>& b 
    ) { a.swap(b); } 

// ----------------------------------------------------------------------------------------

    typedef cmd_line_parser<char> command_line_parser;
    typedef cmd_line_parser<wchar_t> wcommand_line_parser;

// ----------------------------------------------------------------------------------------

}

#endif // DLIB_CMD_LINE_PARSEr_