| /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying | |
| file LICENSE.rst or https://cmake.org/licensing for details. */ | |
| #pragma once | |
| #include "cmConfigure.h" // IWYU pragma: keep | |
| #include <cstddef> | |
| #include <cstdint> | |
| #include <mutex> | |
| #include <string> | |
| #include <unordered_map> | |
| #include <unordered_set> | |
| #include <vector> | |
| #include <cm3p/cppdap/protocol.h> | |
| #include "cmDebuggerSourceBreakpoint.h" | |
| class cmListFileFunction; | |
| namespace dap { | |
| class Session; | |
| } | |
| namespace cmDebugger { | |
| struct cmDebuggerFunctionLocation | |
| { | |
| int64_t StartLine; | |
| int64_t EndLine; | |
| }; | |
| /** The breakpoint manager. */ | |
| class cmDebuggerBreakpointManager | |
| { | |
| dap::Session* DapSession; | |
| std::mutex Mutex; | |
| std::unordered_map<std::string, std::vector<cmDebuggerSourceBreakpoint>> | |
| Breakpoints; | |
| std::unordered_map<std::string, | |
| std::vector<struct cmDebuggerFunctionLocation>> | |
| ListFileFunctionLines; | |
| std::unordered_set<std::string> ListFilePendingValidations; | |
| int64_t NextBreakpointId = 0; | |
| dap::SetBreakpointsResponse HandleSetBreakpointsRequest( | |
| dap::SetBreakpointsRequest const& request); | |
| int64_t FindFunctionStartLine(std::string const& sourcePath, int64_t line); | |
| int64_t CalibrateBreakpointLine(std::string const& sourcePath, int64_t line); | |
| public: | |
| cmDebuggerBreakpointManager(dap::Session* dapSession); | |
| void SourceFileLoaded(std::string const& sourcePath, | |
| std::vector<cmListFileFunction> const& functions); | |
| std::vector<int64_t> GetBreakpoints(std::string const& sourcePath, | |
| int64_t line); | |
| size_t GetBreakpointCount() const; | |
| void ClearAll(); | |
| }; | |
| } // namespace cmDebugger |