aboutsummaryrefslogtreecommitdiff
path: root/tools/lldb-mi/MICmdArgValBase.h
blob: 3aaae499e5fc561f483a0377411d0d0b5da25c9e (plain) (blame)
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
//===-- CMICmdArgValBase.h --------------------------------------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#pragma once

// In-house headers:
#include "MIUtilString.h"
#include "MICmdArgSet.h"

//++ ============================================================================
// Details: MI common code class. Command argument base class. Arguments objects
//          needing specialization derived from *this class. An argument knows
//          what type of argument it is and how it is to interpret the options
//          (context) string to find and validate a matching argument and so
//          extract a value from it.
//          Argument objects are added to the CMICmdArgSet container object.
//          Once added the container they belong to that contain and will be
//          deleted when the container goes out of scope. Allocate argument
//          objects on the heap and pass in to the Add().
//          Note the code is written such that a command will produce an error
//          should it be presented with arguments or options it does not understand.
//          A command can recognise an option or argument then ignore if it
//          wishes (a warning is sent to the MI's Log file). This is so it is
//          hardwired to fail and catch arguments or options that presented by
//          different driver clients.
//          Based on the Interpreter pattern.
// Gotchas: None.
// Authors: Illya Rudkin 14/04/2014.
// Changes: None.
//--
class CMICmdArgValBase : public CMICmdArgSet::IArg
{
    // Methods:
  public:
    /* ctor */ CMICmdArgValBase(void);
    /* ctor */ CMICmdArgValBase(const CMIUtilString &vrArgName, const bool vbMandatory, const bool vbHandleByCmd);

    // Overrideable:
  public:
    /* dtor */ ~CMICmdArgValBase(void) override;

    // Overridden:
  public:
    // From CMICmdArgSet::IArg
    bool GetFound(void) const override;
    bool GetIsHandledByCmd(void) const override;
    bool GetIsMandatory(void) const override;
    bool GetIsMissingOptions(void) const override;
    const CMIUtilString &GetName(void) const override;
    bool GetValid(void) const override;
    bool Validate(CMICmdArgContext &vwArgContext) override;

    // Attributes:
  protected:
    bool m_bFound;     // True = yes found in arguments options text, false = not found
    bool m_bValid;     // True = yes argument parsed and valid, false = not valid
    bool m_bMandatory; // True = yes arg must be present, false = optional argument
    CMIUtilString m_strArgName;
    bool m_bHandled;          // True = Command processes *this option, false = not handled
    bool m_bIsMissingOptions; // True = Command needs more information, false = ok
};

//++ ============================================================================
// Details: MI common code class. Templated command argument base class.
// Gotchas: None.
// Authors: Illya Rudkin 14/04/2014.
// Changes: None.
//--
template <class T> class CMICmdArgValBaseTemplate : public CMICmdArgValBase
{
    // Methods:
  public:
    /* ctor */ CMICmdArgValBaseTemplate(void);
    /* ctor */ CMICmdArgValBaseTemplate(const CMIUtilString &vrArgName, const bool vbMandatory, const bool vbHandleByCmd);
    //
    const T &GetValue(void) const;

    // Overrideable:
  public:
    /* dtor */ virtual ~CMICmdArgValBaseTemplate(void);

    // Attributes:
  protected:
    T m_argValue;
};

//++ ------------------------------------------------------------------------------------
// Details: CMICmdArgValBaseTemplate constructor.
// Type:    Method.
// Args:    None.
// Return:  None.
// Throws:  None.
//--
template <class T> CMICmdArgValBaseTemplate<T>::CMICmdArgValBaseTemplate(void)
{
}

//++ ------------------------------------------------------------------------------------
// Details: CMICmdArgValBaseTemplate constructor.
// Type:    Method.
// Args:    vrArgName       - (R) Argument's name to search by.
//          vbMandatory     - (R) True = Yes must be present, false = optional argument.
//          vbHandleByCmd   - (R) True = Command processes *this option, false = not handled.
// Return:  None.
// Throws:  None.
//--
template <class T>
CMICmdArgValBaseTemplate<T>::CMICmdArgValBaseTemplate(const CMIUtilString &vrArgName, const bool vbMandatory, const bool vbHandleByCmd)
    : CMICmdArgValBase(vrArgName, vbMandatory, vbHandleByCmd)
{
}

//++ ------------------------------------------------------------------------------------
// Details: CMICmdArgValBaseTemplate destructor.
// Type:    Overrideable.
// Args:    None.
// Return:  None.
// Throws:  None.
//--
template <class T> CMICmdArgValBaseTemplate<T>::~CMICmdArgValBaseTemplate(void)
{
}

//++ ------------------------------------------------------------------------------------
// Details: Retrieve the value the argument parsed from the command's argument / options
//          text string.
// Type:    Method.
// Args:    None.
// Return:  Template type & - The arg value of *this object.
// Throws:  None.
//--
template <class T>
const T &
CMICmdArgValBaseTemplate<T>::GetValue(void) const
{
    return m_argValue;
}