LCOV - code coverage report
Current view: top level - src/utils - TaskControl.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 29 32 90.6 %
Date: 2026-04-17 09:20:02 Functions: 8 10 80.0 %

          Line data    Source code
       1             : // SPDX-FileCopyrightText: 2024 PairInteraction Developers
       2             : // SPDX-License-Identifier: LGPL-3.0-or-later
       3             : 
       4             : #include "pairinteraction/utils/TaskControl.hpp"
       5             : 
       6             : #include <atomic>
       7             : #include <mutex>
       8             : 
       9             : namespace pairinteraction {
      10             : namespace {
      11             : 
      12      100078 : std::atomic_bool &task_abort_requested() {
      13             :     static std::atomic_bool value{false};
      14      100078 :     return value;
      15             : }
      16             : 
      17      100080 : std::mutex &task_info_mutex() {
      18             :     static std::mutex value;
      19      100080 :     return value;
      20             : }
      21             : 
      22      100080 : std::string &task_info() {
      23      100080 :     static std::string value;
      24      100080 :     return value;
      25             : }
      26             : 
      27         662 : std::atomic<std::size_t> &progress_count() {
      28             :     static std::atomic<std::size_t> value{0};
      29         662 :     return value;
      30             : }
      31             : 
      32             : } // namespace
      33             : 
      34           0 : TaskAbortedError::TaskAbortedError() : std::runtime_error("Task aborted.") {}
      35             : 
      36           0 : void request_task_abort() noexcept { task_abort_requested().store(true); }
      37             : 
      38          47 : void reset_task_status() noexcept {
      39          47 :     task_abort_requested().store(false);
      40          47 :     progress_count().store(0);
      41          47 :     std::scoped_lock lock(task_info_mutex());
      42          47 :     task_info().clear();
      43          47 : }
      44             : 
      45           2 : std::string get_task_info() {
      46           2 :     std::scoped_lock lock(task_info_mutex());
      47           4 :     return task_info();
      48           2 : }
      49             : 
      50      100031 : void set_task_status(std::string_view status_message, bool increase_progress_count) {
      51      100031 :     if (!status_message.empty()) {
      52      100031 :         std::scoped_lock lock(task_info_mutex());
      53      100031 :         task_info().assign(status_message);
      54      100031 :     }
      55      100031 :     if (increase_progress_count) {
      56         613 :         progress_count().fetch_add(1);
      57             :     }
      58      100031 :     if (task_abort_requested().load()) {
      59           0 :         throw TaskAbortedError();
      60             :     }
      61      100031 : }
      62             : 
      63           4 : std::size_t get_progress_count() noexcept { return progress_count().load(); }
      64             : 
      65             : } // namespace pairinteraction

Generated by: LCOV version 1.16