/* 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 class cmListFileFunction; namespace cmDebugger { class cmDebuggerSourceBreakpoint; } 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> Breakpoints; std::unordered_map> ListFileFunctionLines; std::unordered_set 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 const& functions); std::vector GetBreakpoints(std::string const& sourcePath, int64_t line); size_t GetBreakpointCount() const; void ClearAll(); }; } // namespace cmDebugger