LLDB  mainline
Baton.h
Go to the documentation of this file.
1 //===-- Baton.h -------------------------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef lldb_Baton_h_
10 #define lldb_Baton_h_
11 
12 #include "lldb/lldb-enumerations.h"
13 #include "lldb/lldb-public.h"
14 
15 #include <memory>
16 
17 namespace lldb_private {
18 class Stream;
19 }
20 
21 namespace lldb_private {
22 
23 /// \class Baton Baton.h "lldb/Core/Baton.h"
24 /// A class designed to wrap callback batons so they can cleanup
25 /// any acquired resources
26 ///
27 /// This class is designed to be used by any objects that have a callback
28 /// function that takes a baton where the baton might need to
29 /// free/delete/close itself.
30 ///
31 /// The default behavior is to not free anything. Subclasses can free any
32 /// needed resources in their destructors.
33 class Baton {
34 public:
35  Baton() {}
36  virtual ~Baton() {}
37 
38  virtual void *data() = 0;
39 
40  virtual void GetDescription(Stream *s,
41  lldb::DescriptionLevel level) const = 0;
42 };
43 
44 class UntypedBaton : public Baton {
45 public:
46  UntypedBaton(void *Data) : m_data(Data) {}
47  ~UntypedBaton() override {
48  // The default destructor for an untyped baton does NOT attempt to clean up
49  // anything in m_data.
50  }
51 
52  void *data() override { return m_data; }
53  void GetDescription(Stream *s, lldb::DescriptionLevel level) const override;
54 
55  void *m_data; // Leave baton public for easy access
56 };
57 
58 template <typename T> class TypedBaton : public Baton {
59 public:
60  explicit TypedBaton(std::unique_ptr<T> Item) : Item(std::move(Item)) {}
61 
62  T *getItem() { return Item.get(); }
63  const T *getItem() const { return Item.get(); }
64 
65  void *data() override { return Item.get(); }
66  void GetDescription(Stream *s, lldb::DescriptionLevel level) const override {}
67 
68 protected:
69  std::unique_ptr<T> Item;
70 };
71 
72 } // namespace lldb_private
73 
74 #endif // lldb_Baton_h_
Enumerations for broadcasting.
Definition: SBLaunchInfo.h:14
std::unique_ptr< T > Item
Definition: Baton.h:69
A stream class that can stream formatted output to a file.
Definition: Stream.h:28
const T * getItem() const
Definition: Baton.h:63
virtual void * data()=0
void GetDescription(Stream *s, lldb::DescriptionLevel level) const override
Definition: Baton.h:66
UntypedBaton(void *Data)
Definition: Baton.h:46
virtual void GetDescription(Stream *s, lldb::DescriptionLevel level) const =0
virtual ~Baton()
Definition: Baton.h:36
~UntypedBaton() override
Definition: Baton.h:47
void * data() override
Definition: Baton.h:65
void * data() override
Definition: Baton.h:52
A class designed to wrap callback batons so they can cleanup any acquired resources.
Definition: Baton.h:33
TypedBaton(std::unique_ptr< T > Item)
Definition: Baton.h:60