| /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying |
| file Copyright.txt or https://cmake.org/licensing for details. */ |
| |
| #include "cmDebuggerThreadManager.h" |
| |
| #include <algorithm> |
| |
| #include <cm3p/cppdap/protocol.h> |
| |
| #include "cmDebuggerThread.h" |
| |
| namespace cmDebugger { |
| |
| std::atomic<int64_t> cmDebuggerThreadManager::NextThreadId(1); |
| |
| std::shared_ptr<cmDebuggerThread> cmDebuggerThreadManager::StartThread( |
| std::string const& name) |
| { |
| std::shared_ptr<cmDebuggerThread> thread = |
| std::make_shared<cmDebuggerThread>( |
| cmDebuggerThreadManager::NextThreadId.fetch_add(1), name); |
| Threads.emplace_back(thread); |
| return thread; |
| } |
| |
| void cmDebuggerThreadManager::EndThread( |
| std::shared_ptr<cmDebuggerThread> const& thread) |
| { |
| Threads.remove(thread); |
| } |
| |
| cm::optional<dap::StackTraceResponse> |
| cmDebuggerThreadManager::GetThreadStackTraceResponse(int64_t id) |
| { |
| auto it = find_if(Threads.begin(), Threads.end(), |
| [&](const std::shared_ptr<cmDebuggerThread>& t) { |
| return t->GetId() == id; |
| }); |
| |
| if (it == Threads.end()) { |
| return {}; |
| } |
| |
| return GetStackTraceResponse(*it); |
| } |
| |
| } // namespace cmDebugger |