diff options
Diffstat (limited to 'include/lldb/Core/Baton.h')
-rw-r--r-- | include/lldb/Core/Baton.h | 67 |
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_ |