/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file Copyright.txt or https://cmake.org/licensing for details. */ #pragma once #include "cmConfigure.h" // IWYU pragma: keep #include #include #include #include #include #include #include #include // IWYU pragma: keep namespace cmDebugger { class cmDebuggerVariablesManager; } namespace dap { struct Variable; } namespace cmDebugger { struct cmDebuggerVariableEntry { cmDebuggerVariableEntry() : cmDebuggerVariableEntry("", "", "") { } cmDebuggerVariableEntry(std::string name, std::string value, std::string type) : Name(std::move(name)) , Value(std::move(value)) , Type(std::move(type)) { } cmDebuggerVariableEntry(std::string name, std::string value) : Name(std::move(name)) , Value(std::move(value)) , Type("string") { } cmDebuggerVariableEntry(std::string name, const char* value) : Name(std::move(name)) , Value(value == nullptr ? "" : value) , Type("string") { } cmDebuggerVariableEntry(std::string name, bool value) : Name(std::move(name)) , Value(value ? "TRUE" : "FALSE") , Type("bool") { } cmDebuggerVariableEntry(std::string name, int64_t value) : Name(std::move(name)) , Value(std::to_string(value)) , Type("int") { } cmDebuggerVariableEntry(std::string name, int value) : Name(std::move(name)) , Value(std::to_string(value)) , Type("int") { } std::string const Name; std::string const Value; std::string const Type; }; class cmDebuggerVariables { static std::atomic NextId; int64_t Id; std::string Name; std::string Value; std::function()> GetKeyValuesFunction; std::vector> SubVariables; bool IgnoreEmptyStringEntries = false; bool EnableSorting = true; virtual dap::array HandleVariablesRequest(); friend class cmDebuggerVariablesManager; protected: const bool SupportsVariableType; std::shared_ptr VariablesManager; void EnumerateSubVariablesIfAny( dap::array& toBeReturned) const; void ClearSubVariables(); public: cmDebuggerVariables( std::shared_ptr variablesManager, std::string name, bool supportsVariableType); cmDebuggerVariables( std::shared_ptr variablesManager, std::string name, bool supportsVariableType, std::function()> getKeyValuesFunc); inline int64_t GetId() const noexcept { return this->Id; } inline std::string GetName() const noexcept { return this->Name; } inline std::string GetValue() const noexcept { return this->Value; } inline void SetValue(std::string const& value) noexcept { this->Value = value; } void AddSubVariables(std::shared_ptr const& variables); inline void SetIgnoreEmptyStringEntries(bool value) noexcept { this->IgnoreEmptyStringEntries = value; } inline void SetEnableSorting(bool value) noexcept { this->EnableSorting = value; } virtual ~cmDebuggerVariables(); }; } // namespace cmDebugger