]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/tools/lldb-mi/MICmdMgrSetCmdDeleteCallback.h
Merge OpenSSL 1.0.2e.
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / tools / lldb-mi / MICmdMgrSetCmdDeleteCallback.h
1 //===-- MICmdMgrSetCmdDeleteCallback.h --------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //--
10
11 #pragma once
12
13 // Third party headers:
14 #include <set>
15
16 // In-house headers:
17 #include "MICmnBase.h"
18
19 // Declarations:
20 struct SMICmdData;
21
22 namespace CMICmdMgrSetCmdDeleteCallback
23 {
24
25 //++ ============================================================================
26 // Details: MI Command Manager interface for client call back.
27 //          Objects that want to be notified of a command being deleted
28 //          inherit this interface and register interest in command object
29 //          deletion. An object deleting a command must not do it itself but call
30 //          the Command Manager CmdDelete() function to delete a command object.
31 // Gotchas: None.
32 // Authors: Illya Rudkin 21/02/2014.
33 // Changes: None.
34 //--
35 class ICallback
36 {
37   public:
38     virtual void Delete(SMICmdData &vCmd) = 0;
39
40     /* dtor */ virtual ~ICallback(void){};
41 };
42
43 //++ ============================================================================
44 // Details: MI Command Manager container for clients registered interest in command
45 //          objects being deleted. Objects register an interest so when a command
46 //          is to be deleted that object wanting the delete calls the Command
47 //          Manager to delete the command object. In so do all other registered
48 //          objects get called to about the deletion including the object wanting
49 //          to do the delete in the first place.
50 // Gotchas: None.
51 // Authors: Illya Rudkin 21/02/2014.
52 // Changes: None.
53 //--
54 class CSetClients : public std::set<class ICallback *>, public CMICmnBase
55 {
56     // Methods:
57   public:
58     /* ctor */ CSetClients(void);
59
60     bool Register(class ICallback &vObject);
61     bool Unregister(class ICallback &vObject);
62     void Delete(SMICmdData &vCmdData);
63
64     // Overridden:
65   public:
66     // From CMICmnBase
67     /* dtor */ ~CSetClients(void) override;
68
69     // Attributes:
70   private:
71     bool m_bClientUnregistered; // True = yes while deleting a client unregistered, false = no client unregistered during deletion
72 };
73
74 } // namespace CMICmdMgrSetCmdDeleteCallback