| /* 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 |