Uni20
Asynchronous tensor and runtime library.
Loading...
Searching...
No Matches
nifty_counter.hpp
Go to the documentation of this file.
1#pragma once
2
9#include <cstddef>
10
11namespace uni20
12{
13
21template <auto Init, auto Exit = []() noexcept {}>
22 requires requires {
23 { Init() } noexcept;
24 { Exit() } noexcept;
25 }
27 public:
28 nifty_counter() noexcept
29 {
30 if (count_++ == 0) Init();
31 }
32
33 nifty_counter(nifty_counter const&) = delete;
37
38 ~nifty_counter() noexcept
39 {
40 if (--count_ == 0) Exit();
41 }
42
43 private:
44 static constinit inline std::size_t count_{0};
45};
46
47} // namespace uni20
Runs shared initialization before namespace-scope users and shared cleanup after them.
Definition nifty_counter.hpp:26
nifty_counter & operator=(nifty_counter &&)=delete
nifty_counter(nifty_counter &&)=delete
~nifty_counter() noexcept
Definition nifty_counter.hpp:38
nifty_counter() noexcept
Definition nifty_counter.hpp:28
nifty_counter(nifty_counter const &)=delete
nifty_counter & operator=(nifty_counter const &)=delete
Definition async/async.hpp:26