| //===-- MICmdArgSet.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 |
| |
| // C Includes |
| // C++ Includes |
| #include <vector> |
| |
| // Other libraries and framework includes |
| // Project includes |
| #include "MICmdArgContext.h" |
| #include "MICmnBase.h" |
| |
| // Declarations: |
| class CMICmdArgValBase; |
| |
| //++ |
| //============================================================================ |
| // Details: MI common code class. Command arguments container class. |
| // A command may have one or more arguments of which some may be |
| // optional. |
| // *this class contains a list of the command's arguments which are |
| // validates against the commands argument options string (context |
| // string). |
| // Each argument tries to extract the value it is looking for. |
| // Argument objects added to *this container are owned by this |
| // container |
| // and are deleted when this container goes out of scope. Allocate |
| // argument |
| // objects on the heap. |
| // It is assumed the arguments to be parsed are read from left to right |
| // in |
| // order. The order added to *this container is the order they will |
| // parsed. |
| //-- |
| class CMICmdArgSet : public CMICmnBase { |
| // Classes: |
| public: |
| //++ |
| // Description: ArgSet's interface for command arguments to implement. |
| //-- |
| class IArg { |
| public: |
| virtual bool GetFound() const = 0; |
| virtual bool GetIsHandledByCmd() const = 0; |
| virtual bool GetIsMandatory() const = 0; |
| virtual bool GetIsMissingOptions() const = 0; |
| virtual const CMIUtilString &GetName() const = 0; |
| virtual bool GetValid() const = 0; |
| virtual bool Validate(CMICmdArgContext &vwArgContext) = 0; |
| |
| virtual ~IArg() = default; |
| }; |
| |
| // Typedefs: |
| typedef std::vector<CMICmdArgValBase *> SetCmdArgs_t; |
| |
| // Methods: |
| CMICmdArgSet(); |
| |
| void Add(CMICmdArgValBase *vArg); |
| bool GetArg(const CMIUtilString &vArgName, CMICmdArgValBase *&vpArg) const; |
| const SetCmdArgs_t &GetArgsThatAreMissing() const; |
| const SetCmdArgs_t &GetArgsThatInvalid() const; |
| size_t GetCount() const; |
| bool IsArgContextEmpty() const; |
| bool IsArgsPresentButNotHandledByCmd() const; |
| void WarningArgsNotHandledbyCmdLogFile(const CMIUtilString &vrCmdName); |
| bool Validate(const CMIUtilString &vStrMiCmd, |
| CMICmdArgContext &vwCmdArgsText); |
| |
| // Overrideable: |
| ~CMICmdArgSet() override; |
| |
| // Methods: |
| private: |
| const SetCmdArgs_t &GetArgsNotHandledByCmd() const; |
| void Destroy(); // Release resources used by *this object |
| bool ValidationFormErrorMessages(const CMICmdArgContext &vwCmdArgsText); |
| |
| // Attributes: |
| bool m_bIsArgsPresentButNotHandledByCmd; // True = The driver's client |
| // presented the command with options |
| // recognised but not handled by |
| // a command, false = all args handled |
| SetCmdArgs_t m_setCmdArgs; // The set of arguments that are that the command |
| // is expecting to find in the options string |
| SetCmdArgs_t m_setCmdArgsThatAreMissing; // The set of arguments that are |
| // required by the command but are |
| // missing |
| SetCmdArgs_t m_setCmdArgsThatNotValid; // The set of arguments found in the |
| // text but for some reason unable to |
| // extract a value |
| SetCmdArgs_t m_setCmdArgsNotHandledByCmd; // The set of arguments specified by |
| // the command which were present to |
| // the command but not handled |
| SetCmdArgs_t m_setCmdArgsMissingInfo; // The set of arguments that were |
| // present but were found to be missing |
| // additional information i.e. |
| // --thread 3 but 3 is missing |
| CMICmdArgContext m_cmdArgContext; // Copy of the command's argument options |
| // text before validate takes place (empties |
| // it of content) |
| const CMIUtilString m_constStrCommaSpc; |
| }; |