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;
}
|