181ad6265SDimitry Andric //===-- DebuggerEvents.h ----------------------------------------*- C++ -*-===// 281ad6265SDimitry Andric // 381ad6265SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 481ad6265SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 581ad6265SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 681ad6265SDimitry Andric // 781ad6265SDimitry Andric //===----------------------------------------------------------------------===// 881ad6265SDimitry Andric 9bdd1243dSDimitry Andric #include "lldb/Core/ModuleSpec.h" 1081ad6265SDimitry Andric #include "lldb/Utility/Event.h" 1106c3fb27SDimitry Andric #include "lldb/Utility/StructuredData.h" 1281ad6265SDimitry Andric 1381ad6265SDimitry Andric #include <string> 1481ad6265SDimitry Andric 1581ad6265SDimitry Andric #ifndef LLDB_CORE_DEBUGGER_EVENTS_H 1681ad6265SDimitry Andric #define LLDB_CORE_DEBUGGER_EVENTS_H 1781ad6265SDimitry Andric 1881ad6265SDimitry Andric namespace lldb_private { 1981ad6265SDimitry Andric class Stream; 2081ad6265SDimitry Andric 2181ad6265SDimitry Andric class ProgressEventData : public EventData { 2281ad6265SDimitry Andric public: ProgressEventData(uint64_t progress_id,std::string title,std::string details,uint64_t completed,uint64_t total,bool debugger_specific)23*7a6dacacSDimitry Andric ProgressEventData(uint64_t progress_id, std::string title, 24*7a6dacacSDimitry Andric std::string details, uint64_t completed, uint64_t total, 25*7a6dacacSDimitry Andric bool debugger_specific) 26*7a6dacacSDimitry Andric : m_title(std::move(title)), m_details(std::move(details)), 2706c3fb27SDimitry Andric m_id(progress_id), m_completed(completed), m_total(total), 2806c3fb27SDimitry Andric m_debugger_specific(debugger_specific) {} 2981ad6265SDimitry Andric 3006c3fb27SDimitry Andric static llvm::StringRef GetFlavorString(); 3181ad6265SDimitry Andric 3206c3fb27SDimitry Andric llvm::StringRef GetFlavor() const override; 3381ad6265SDimitry Andric 3481ad6265SDimitry Andric void Dump(Stream *s) const override; 3581ad6265SDimitry Andric 3681ad6265SDimitry Andric static const ProgressEventData *GetEventDataFromEvent(const Event *event_ptr); 3706c3fb27SDimitry Andric 3806c3fb27SDimitry Andric static StructuredData::DictionarySP 3906c3fb27SDimitry Andric GetAsStructuredData(const Event *event_ptr); 4006c3fb27SDimitry Andric GetID()4181ad6265SDimitry Andric uint64_t GetID() const { return m_id; } IsFinite()4281ad6265SDimitry Andric bool IsFinite() const { return m_total != UINT64_MAX; } GetCompleted()4381ad6265SDimitry Andric uint64_t GetCompleted() const { return m_completed; } GetTotal()4481ad6265SDimitry Andric uint64_t GetTotal() const { return m_total; } GetMessage()4506c3fb27SDimitry Andric std::string GetMessage() const { 4606c3fb27SDimitry Andric std::string message = m_title; 4706c3fb27SDimitry Andric if (!m_details.empty()) { 4806c3fb27SDimitry Andric message.append(": "); 4906c3fb27SDimitry Andric message.append(m_details); 5006c3fb27SDimitry Andric } 5106c3fb27SDimitry Andric return message; 5206c3fb27SDimitry Andric } GetTitle()5306c3fb27SDimitry Andric const std::string &GetTitle() const { return m_title; } GetDetails()5406c3fb27SDimitry Andric const std::string &GetDetails() const { return m_details; } IsDebuggerSpecific()5581ad6265SDimitry Andric bool IsDebuggerSpecific() const { return m_debugger_specific; } 5681ad6265SDimitry Andric 5781ad6265SDimitry Andric private: 5806c3fb27SDimitry Andric /// The title of this progress event. The value is expected to remain stable 5906c3fb27SDimitry Andric /// for a given progress ID. 6006c3fb27SDimitry Andric std::string m_title; 6106c3fb27SDimitry Andric 6206c3fb27SDimitry Andric /// Details associated with this progress event update. The value is expected 6306c3fb27SDimitry Andric /// to change between progress events. 6406c3fb27SDimitry Andric std::string m_details; 6506c3fb27SDimitry Andric 6606c3fb27SDimitry Andric /// Unique ID used to associate progress events. 6781ad6265SDimitry Andric const uint64_t m_id; 6806c3fb27SDimitry Andric 6981ad6265SDimitry Andric uint64_t m_completed; 7081ad6265SDimitry Andric const uint64_t m_total; 7181ad6265SDimitry Andric const bool m_debugger_specific; 7281ad6265SDimitry Andric ProgressEventData(const ProgressEventData &) = delete; 7381ad6265SDimitry Andric const ProgressEventData &operator=(const ProgressEventData &) = delete; 7481ad6265SDimitry Andric }; 7581ad6265SDimitry Andric 7681ad6265SDimitry Andric class DiagnosticEventData : public EventData { 7781ad6265SDimitry Andric public: 7881ad6265SDimitry Andric enum class Type { 79bdd1243dSDimitry Andric Info, 8081ad6265SDimitry Andric Warning, 8181ad6265SDimitry Andric Error, 8281ad6265SDimitry Andric }; DiagnosticEventData(Type type,std::string message,bool debugger_specific)8381ad6265SDimitry Andric DiagnosticEventData(Type type, std::string message, bool debugger_specific) 8481ad6265SDimitry Andric : m_message(std::move(message)), m_type(type), 8581ad6265SDimitry Andric m_debugger_specific(debugger_specific) {} 8681ad6265SDimitry Andric ~DiagnosticEventData() override = default; 8781ad6265SDimitry Andric GetMessage()8881ad6265SDimitry Andric const std::string &GetMessage() const { return m_message; } IsDebuggerSpecific()8981ad6265SDimitry Andric bool IsDebuggerSpecific() const { return m_debugger_specific; } GetType()9081ad6265SDimitry Andric Type GetType() const { return m_type; } 9181ad6265SDimitry Andric 9281ad6265SDimitry Andric llvm::StringRef GetPrefix() const; 9381ad6265SDimitry Andric 9481ad6265SDimitry Andric void Dump(Stream *s) const override; 9581ad6265SDimitry Andric 9606c3fb27SDimitry Andric static llvm::StringRef GetFlavorString(); 9706c3fb27SDimitry Andric llvm::StringRef GetFlavor() const override; 9881ad6265SDimitry Andric 9981ad6265SDimitry Andric static const DiagnosticEventData * 10081ad6265SDimitry Andric GetEventDataFromEvent(const Event *event_ptr); 10181ad6265SDimitry Andric 10206c3fb27SDimitry Andric static StructuredData::DictionarySP 10306c3fb27SDimitry Andric GetAsStructuredData(const Event *event_ptr); 10406c3fb27SDimitry Andric 10581ad6265SDimitry Andric protected: 10681ad6265SDimitry Andric std::string m_message; 10781ad6265SDimitry Andric Type m_type; 10881ad6265SDimitry Andric const bool m_debugger_specific; 10981ad6265SDimitry Andric 11081ad6265SDimitry Andric DiagnosticEventData(const DiagnosticEventData &) = delete; 11181ad6265SDimitry Andric const DiagnosticEventData &operator=(const DiagnosticEventData &) = delete; 11281ad6265SDimitry Andric }; 11381ad6265SDimitry Andric 114bdd1243dSDimitry Andric class SymbolChangeEventData : public EventData { 115bdd1243dSDimitry Andric public: SymbolChangeEventData(lldb::DebuggerWP debugger_wp,ModuleSpec module_spec)116bdd1243dSDimitry Andric SymbolChangeEventData(lldb::DebuggerWP debugger_wp, ModuleSpec module_spec) 117bdd1243dSDimitry Andric : m_debugger_wp(debugger_wp), m_module_spec(std::move(module_spec)) {} 118bdd1243dSDimitry Andric 11906c3fb27SDimitry Andric static llvm::StringRef GetFlavorString(); 12006c3fb27SDimitry Andric llvm::StringRef GetFlavor() const override; 121bdd1243dSDimitry Andric 122bdd1243dSDimitry Andric static const SymbolChangeEventData * 123bdd1243dSDimitry Andric GetEventDataFromEvent(const Event *event_ptr); 124bdd1243dSDimitry Andric 125bdd1243dSDimitry Andric void DoOnRemoval(Event *event_ptr) override; 126bdd1243dSDimitry Andric 127bdd1243dSDimitry Andric private: 128bdd1243dSDimitry Andric lldb::DebuggerWP m_debugger_wp; 129bdd1243dSDimitry Andric ModuleSpec m_module_spec; 130bdd1243dSDimitry Andric 131bdd1243dSDimitry Andric SymbolChangeEventData(const SymbolChangeEventData &) = delete; 132bdd1243dSDimitry Andric const SymbolChangeEventData & 133bdd1243dSDimitry Andric operator=(const SymbolChangeEventData &) = delete; 134bdd1243dSDimitry Andric }; 135bdd1243dSDimitry Andric 13681ad6265SDimitry Andric } // namespace lldb_private 13781ad6265SDimitry Andric 13881ad6265SDimitry Andric #endif // LLDB_CORE_DEBUGGER_EVENTS_H 139