88 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C++
		
	
	
	
//===-- MICmdCmdGdbInfo.h ---------------------------------------*- C++ -*-===//
 | 
						|
//
 | 
						|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 | 
						|
// See https://llvm.org/LICENSE.txt for license information.
 | 
						|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
 | 
						|
// Overview:    CMICmdCmdGdbInfo    interface.
 | 
						|
//
 | 
						|
//              To implement new MI commands derive a new command class from the
 | 
						|
//              command base
 | 
						|
//              class. To enable the new command for interpretation add the new
 | 
						|
//              command class
 | 
						|
//              to the command factory. The files of relevance are:
 | 
						|
//                  MICmdCommands.cpp
 | 
						|
//                  MICmdBase.h / .cpp
 | 
						|
//                  MICmdCmd.h / .cpp
 | 
						|
//              For an introduction to adding a new command see
 | 
						|
//              CMICmdCmdSupportInfoMiCmdQuery
 | 
						|
//              command class as an example.
 | 
						|
 | 
						|
#pragma once
 | 
						|
 | 
						|
// Third party headers:
 | 
						|
#include <map>
 | 
						|
 | 
						|
// In-house headers:
 | 
						|
#include "MICmdBase.h"
 | 
						|
 | 
						|
//++
 | 
						|
//============================================================================
 | 
						|
// Details: MI command class. MI commands derived from the command base class.
 | 
						|
//          *this class implements GDB command "info".
 | 
						|
//          The design of matching the info request to a request action (or
 | 
						|
//          command) is very simple. The request function which carries out
 | 
						|
//          the task of information gathering and printing to stdout is part of
 | 
						|
//          *this class. Should the request function become more complicated
 | 
						|
//          then
 | 
						|
//          that request should really reside in a command type class. Then this
 | 
						|
//          class instantiates a request info command for a matching request.
 | 
						|
//          The
 | 
						|
//          design/code of *this class then does not then become bloated. Use a
 | 
						|
//          lightweight version of the current MI command system.
 | 
						|
//--
 | 
						|
class CMICmdCmdGdbInfo : public CMICmdBase {
 | 
						|
  // Statics:
 | 
						|
public:
 | 
						|
  // Required by the CMICmdFactory when registering *this command
 | 
						|
  static CMICmdBase *CreateSelf();
 | 
						|
 | 
						|
  // Methods:
 | 
						|
public:
 | 
						|
  /* ctor */ CMICmdCmdGdbInfo();
 | 
						|
 | 
						|
  // Overridden:
 | 
						|
public:
 | 
						|
  // From CMICmdInvoker::ICmd
 | 
						|
  bool Execute() override;
 | 
						|
  bool Acknowledge() override;
 | 
						|
  bool ParseArgs() override;
 | 
						|
  // From CMICmnBase
 | 
						|
  /* dtor */ ~CMICmdCmdGdbInfo() override;
 | 
						|
 | 
						|
  // Typedefs:
 | 
						|
private:
 | 
						|
  typedef bool (CMICmdCmdGdbInfo::*FnPrintPtr)();
 | 
						|
  typedef std::map<CMIUtilString, FnPrintPtr> MapPrintFnNameToPrintFn_t;
 | 
						|
 | 
						|
  // Methods:
 | 
						|
private:
 | 
						|
  bool GetPrintFn(const CMIUtilString &vrPrintFnName, FnPrintPtr &vrwpFn) const;
 | 
						|
  bool PrintFnSharedLibrary();
 | 
						|
 | 
						|
  // Attributes:
 | 
						|
private:
 | 
						|
  const static MapPrintFnNameToPrintFn_t ms_mapPrintFnNameToPrintFn;
 | 
						|
  //
 | 
						|
  const CMIUtilString m_constStrArgNamedPrint;
 | 
						|
  bool m_bPrintFnRecognised; // True = This command has a function with a name
 | 
						|
                             // that matches the Print argument, false = not
 | 
						|
                             // found
 | 
						|
  bool m_bPrintFnSuccessful; // True = The print function completed its task ok,
 | 
						|
                             // false = function failed for some reason
 | 
						|
  CMIUtilString m_strPrintFnName;
 | 
						|
  CMIUtilString m_strPrintFnError;
 | 
						|
};
 |