aboutsummaryrefslogtreecommitdiff
path: root/tools/lldb-mi/MICmdInvoker.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/lldb-mi/MICmdInvoker.h')
-rw-r--r--tools/lldb-mi/MICmdInvoker.h118
1 files changed, 118 insertions, 0 deletions
diff --git a/tools/lldb-mi/MICmdInvoker.h b/tools/lldb-mi/MICmdInvoker.h
new file mode 100644
index 000000000000..b89d506b1f58
--- /dev/null
+++ b/tools/lldb-mi/MICmdInvoker.h
@@ -0,0 +1,118 @@
+//===-- MICmdInvoker.h ------------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+//++
+// File: MICmdInvoker.h
+//
+// Overview: CMICmdInvoker interface.
+//
+// Environment: Compilers: Visual C++ 12.
+// gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1
+// Libraries: See MIReadmetxt.
+//
+// Copyright: None.
+//--
+
+#pragma once
+
+// Third party headers
+#include <map>
+
+// In-house headers:
+#include "MICmnBase.h"
+#include "MICmdData.h"
+#include "MICmdMgrSetCmdDeleteCallback.h"
+#include "MIUtilSingletonBase.h"
+
+// Declarations:
+class CMICmdBase;
+class CMICmnStreamStdout;
+
+//++ ============================================================================
+// Details: MI Command Invoker. The Invoker works on the command pattern design.
+// There two main jobs; action command Execute() function, followed by
+// the command's Acknowledge() function. When a command has finished its
+// execute function it returns to the invoker. The invoker then calls the
+// command's Acknowledge() function to do more work, form and give
+// back a MI result. In the meantime the Command Monitor is monitoring
+// the each command doing their Execute() function work so they do not
+// exceed a time limit which if it exceeds informs the command(s) to
+// stop work.
+// The work by the Invoker is carried out in the main thread.
+// The Invoker takes ownersip of any commands created which means it
+// is the only object to delete them when a command is finished working.
+// A singleton class.
+// Gotchas: None.
+// Authors: Illya Rudkin 19/02/2014.
+// Changes: None.
+//--
+class CMICmdInvoker
+: public CMICmnBase
+, public CMICmdMgrSetCmdDeleteCallback::ICallback
+, public MI::ISingleton< CMICmdInvoker >
+{
+ friend class MI::ISingleton< CMICmdInvoker >;
+
+// Class:
+public:
+ //++
+ // Description: Invoker's interface for commands to implement.
+ //--
+ class ICmd
+ {
+ public:
+ virtual bool Acknowledge( void ) = 0;
+ virtual bool Execute( void ) = 0;
+ virtual bool ParseArgs( void ) = 0;
+ virtual bool SetCmdData( const SMICmdData & vCmdData ) = 0;
+ virtual const SMICmdData & GetCmdData( void ) const = 0;
+ virtual const CMIUtilString & GetErrorDescription( void ) const = 0;
+ virtual void CmdFinishedTellInvoker( void ) const = 0;
+ virtual const CMIUtilString & GetMIResultRecord( void ) const = 0;
+ virtual const CMIUtilString & GetMIResultRecordExtra( void ) const = 0;
+ virtual bool HasMIResultRecordExtra( void ) const = 0;
+
+ /* dtor */ virtual ~ICmd( void ) {};
+ };
+
+// Methods:
+public:
+ bool Initialize( void );
+ bool Shutdown( void );
+ bool CmdExecute( CMICmdBase & vCmd );
+ bool CmdExecuteFinished( CMICmdBase & vCmd );
+
+// Typedefs:
+private:
+ typedef std::map< MIuint, CMICmdBase * > MapCmdIdToCmd_t;
+ typedef std::pair< MIuint, CMICmdBase * > MapPairCmdIdToCmd_t;
+
+// Methods:
+private:
+ /* ctor */ CMICmdInvoker( void );
+ /* ctor */ CMICmdInvoker( const CMICmdInvoker & );
+ void operator=( const CMICmdInvoker & );
+ void CmdDeleteAll( void );
+ bool CmdDelete( const MIuint vCmdId, const bool vbYesDeleteCmd = false );
+ bool CmdAdd( const CMICmdBase & vCmd );
+ bool CmdStdout( const SMICmdData & vCmdData ) const;
+ void CmdCauseAppExit( const CMICmdBase & vCmd ) const;
+
+// Overridden:
+private:
+ // From CMICmnBase
+ /* dtor */ virtual ~CMICmdInvoker( void );
+ // From CMICmdMgrSetCmdDeleteCallback::ICallback
+ virtual void Delete( SMICmdData & vCmd );
+
+// Attributes:
+private:
+ MapCmdIdToCmd_t m_mapCmdIdToCmd;
+ CMICmnStreamStdout & m_rStreamOut;
+};