cmDebuggerThreadManager.cxx 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. file Copyright.txt or https://cmake.org/licensing for details. */
  3. #include "cmDebuggerThreadManager.h"
  4. #include <algorithm>
  5. #include <cm3p/cppdap/protocol.h>
  6. #include "cmDebuggerThread.h"
  7. namespace cmDebugger {
  8. std::atomic<int64_t> cmDebuggerThreadManager::NextThreadId(1);
  9. std::shared_ptr<cmDebuggerThread> cmDebuggerThreadManager::StartThread(
  10. std::string const& name)
  11. {
  12. std::shared_ptr<cmDebuggerThread> thread =
  13. std::make_shared<cmDebuggerThread>(
  14. cmDebuggerThreadManager::NextThreadId.fetch_add(1), name);
  15. Threads.emplace_back(thread);
  16. return thread;
  17. }
  18. void cmDebuggerThreadManager::EndThread(
  19. std::shared_ptr<cmDebuggerThread> const& thread)
  20. {
  21. Threads.remove(thread);
  22. }
  23. cm::optional<dap::StackTraceResponse>
  24. cmDebuggerThreadManager::GetThreadStackTraceResponse(int64_t id)
  25. {
  26. auto it = find_if(Threads.begin(), Threads.end(),
  27. [&](const std::shared_ptr<cmDebuggerThread>& t) {
  28. return t->GetId() == id;
  29. });
  30. if (it == Threads.end()) {
  31. return {};
  32. }
  33. return GetStackTraceResponse(*it);
  34. }
  35. } // namespace cmDebugger