aboutsummaryrefslogtreecommitdiff
path: root/include/lldb/Core/Baton.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/lldb/Core/Baton.h')
-rw-r--r--include/lldb/Core/Baton.h67
1 files changed, 40 insertions, 27 deletions
diff --git a/include/lldb/Core/Baton.h b/include/lldb/Core/Baton.h
index 627e7203a4ac..c2ab9f74907d 100644
--- a/include/lldb/Core/Baton.h
+++ b/include/lldb/Core/Baton.h
@@ -23,40 +23,53 @@ namespace lldb_private {
/// @brief A class designed to wrap callback batons so they can cleanup
/// any acquired resources
///
-/// This class is designed to be used by any objects that have a
+/// This class is designed to be used by any objects that have a
/// callback function that takes a baton where the baton might need to
/// free/delete/close itself.
///
-/// The default behavior is to not free anything. Subclasses can
+/// The default behavior is to not free anything. Subclasses can
/// free any needed resources in their destructors.
//----------------------------------------------------------------------
-class Baton
-{
+class Baton {
public:
- explicit Baton(void *p) :
- m_data (p)
- {
- }
-
- virtual
- ~Baton()
- {
- // The default destructor for a baton does NOT attempt to clean up
- // anything in m_baton
- }
-
- virtual void
- GetDescription (Stream *s, lldb::DescriptionLevel level) const;
-
- void *m_data; // Leave baton public for easy access
-
-private:
- //------------------------------------------------------------------
- // For Baton only
- //------------------------------------------------------------------
- DISALLOW_COPY_AND_ASSIGN (Baton);
+ Baton() {}
+ virtual ~Baton() {}
+
+ virtual void *data() = 0;
+
+ virtual void GetDescription(Stream *s,
+ lldb::DescriptionLevel level) const = 0;
+};
+
+class UntypedBaton : public Baton {
+public:
+ UntypedBaton(void *Data) : m_data(Data) {}
+ virtual ~UntypedBaton() {
+ // The default destructor for an untyped baton does NOT attempt to clean up
+ // anything in m_data.
+ }
+
+ void *data() override { return m_data; }
+ void GetDescription(Stream *s, lldb::DescriptionLevel level) const override;
+
+ void *m_data; // Leave baton public for easy access
+};
+
+template <typename T> class TypedBaton : public Baton {
+public:
+ explicit TypedBaton(std::unique_ptr<T> Item) : Item(std::move(Item)) {}
+
+ T *getItem() { return Item.get(); }
+ const T *getItem() const { return Item.get(); }
+
+ void *data() override { return Item.get(); }
+ virtual void GetDescription(Stream *s,
+ lldb::DescriptionLevel level) const override {}
+
+protected:
+ std::unique_ptr<T> Item;
};
} // namespace lldb_private
-#endif // lldb_Baton_h_
+#endif // lldb_Baton_h_