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-06-19 12:50:25 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      120894 : std::atomic_bool &task_abort_requested() {
      13             :     static std::atomic_bool value{false};
      14      120894 :     return value;
      15             : }
      16             : 
      17      120897 : std::mutex &task_info_mutex() {
      18             :     static std::mutex value;
      19      120897 :     return value;
      20             : }
      21             : 
      22      120897 : std::string &task_info() {
      23      120897 :     static std::string value;
      24      120897 :     return value;
      25             : }
      26             : 
      27         634 : std::atomic<std::size_t> &progress_count() {
      28             :     static std::atomic<std::size_t> value{0};
      29         634 :     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          29 : void reset_task_status() noexcept {
      39          29 :     task_abort_requested().store(false);
      40          29 :     progress_count().store(0);
      41          29 :     std::scoped_lock lock(task_info_mutex());
      42          29 :     task_info().clear();
      43          29 : }
      44             : 
      45           3 : std::string get_task_info() {
      46           3 :     std::scoped_lock lock(task_info_mutex());
      47           6 :     return task_info();
      48           3 : }
      49             : 
      50      120865 : void set_task_status(std::string_view status_message, bool increase_progress_count) {
      51      120865 :     if (!status_message.empty()) {
      52      120865 :         std::scoped_lock lock(task_info_mutex());
      53      120865 :         task_info().assign(status_message);
      54      120865 :     }
      55      120865 :     if (increase_progress_count) {
      56         602 :         progress_count().fetch_add(1);
      57             :     }
      58      120865 :     if (task_abort_requested().load()) {
      59           0 :         throw TaskAbortedError();
      60             :     }
      61      120865 : }
      62             : 
      63           6 : std::size_t get_progress_count() noexcept { return progress_count().load(); }
      64             : 
      65             : } // namespace pairinteraction

Generated by: LCOV version 1.16