/
githubmirror
/
cmssw
Обзор
Документация
Войти
/
githubmirror
/
cmssw
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
FWCore/Concurrency/interface/TaskBase.h
65 строк
1 KB
Chris Jones
Added noexcept to methods called by async functions
04 май 2024, 16:18
04 май 2024, 16:18
5b1d5a1
Код
Авторство
О чём код?
#ifndef FWCore_Concurrency_TaskBase_h #define FWCore_Concurrency_TaskBase_h // -*- C++ -*- // // Package: Concurrency // Class : TaskBase // /**\class TaskBase TaskBase.h FWCore/Concurrency/interface/TaskBase.h Description: Base class for tasks. Usage: Used as a callback to happen after a task has been completed. */ // // Original Author: Chris Jones // Created: Tue Jan 5 13:46:31 CST 2020 // $Id$ // // system include files #include <atomic> #include <exception> #include <memory> // user include files // forward declarations namespace edm { class TaskBase { public: friend class TaskSentry; ///Constructor TaskBase() noexcept : m_refCount{0} {} virtual ~TaskBase() noexcept = default; virtual void execute() = 0; void increment_ref_count() noexcept { ++m_refCount; } unsigned int decrement_ref_count() noexcept { return --m_refCount; } private: virtual void recycle() { delete this; } std::atomic<unsigned int> m_refCount{0}; }; class TaskSentry { public: TaskSentry(TaskBase* iTask) noexcept : m_task{iTask} {} ~TaskSentry() { m_task->recycle(); } TaskSentry() = delete; TaskSentry(TaskSentry const&) = delete; TaskSentry(TaskSentry&&) = delete; TaskSentry operator=(TaskSentry const&) = delete; TaskSentry operator=(TaskSentry&&) = delete; private: TaskBase* m_task; }; } // namespace edm #endif