aboutsummaryrefslogtreecommitdiff
path: root/tools/lldb-mi/MICmdMgrSetCmdDeleteCallback.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/lldb-mi/MICmdMgrSetCmdDeleteCallback.cpp')
-rw-r--r--tools/lldb-mi/MICmdMgrSetCmdDeleteCallback.cpp110
1 files changed, 110 insertions, 0 deletions
diff --git a/tools/lldb-mi/MICmdMgrSetCmdDeleteCallback.cpp b/tools/lldb-mi/MICmdMgrSetCmdDeleteCallback.cpp
new file mode 100644
index 000000000000..1303a8832f66
--- /dev/null
+++ b/tools/lldb-mi/MICmdMgrSetCmdDeleteCallback.cpp
@@ -0,0 +1,110 @@
+//===-- MICmdMgrSetCmdDeleteCallback.cpp ------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+//++
+// File: MICmdMgrSetCmdDeleteCallback.cpp
+//
+// Overview: CSetClients implementation.
+//
+// Environment: Compilers: Visual C++ 12.
+// gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1
+// Libraries: See MIReadmetxt.
+//
+// Copyright: None.
+//--
+
+// In-house headers:
+#include "MICmdMgrSetCmdDeleteCallback.h"
+
+namespace CMICmdMgrSetCmdDeleteCallback
+{
+
+//++ ------------------------------------------------------------------------------------
+// Details: CSetClients constructor.
+// Type: Method.
+// Args: None.
+// Return: None.
+// Throws: None.
+//--
+CSetClients::CSetClients( void )
+: m_bClientUnregistered( false )
+{
+}
+
+//++ ------------------------------------------------------------------------------------
+// Details: CSetClients destructor.
+// Type: Method.
+// Args: None.
+// Return: None.
+// Throws: None.
+//--
+CSetClients::~CSetClients( void )
+{
+}
+
+//++ ------------------------------------------------------------------------------------
+// Details: Register an object to be called when a command object is deleted.
+// Type: Method.
+// Args: vObject - (R) A new interested client.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
+//--
+bool CSetClients::Register( ICallback & vObject )
+{
+ insert( &vObject );
+
+ return MIstatus::success;
+}
+
+//++ ------------------------------------------------------------------------------------
+// Details: Unregister an object from being called when a command object is deleted.
+// Type: Method.
+// Args: vObject - (R) The was interested client.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
+//--
+bool CSetClients::Unregister( ICallback & vObject )
+{
+ m_bClientUnregistered = true;
+ erase( &vObject );
+
+ return MIstatus::success;
+}
+
+//++ ------------------------------------------------------------------------------------
+// Details: Iterate all interested clients and tell them a command is being deleted.
+// Type: Method.
+// Args: vCmd - (RW) The command to be deleted.
+// Return: MIstatus::success - Functional succeeded.
+// MIstatus::failure - Functional failed.
+// Throws: None.
+//--
+void CSetClients::Delete( SMICmdData & vCmd )
+{
+ m_bClientUnregistered = false; // Reset
+ iterator it = begin();
+ while( it != end() )
+ {
+ ICallback * pObj = *it;
+ pObj->Delete( vCmd );
+
+ if( m_bClientUnregistered )
+ {
+ m_bClientUnregistered = false; // Reset
+ it = begin();
+ }
+ else
+ // Next
+ ++it;
+ }
+}
+
+} // namespace CMICmdMgrSetCmdDeleteCallback