2
* Copyright (C) 2016 Canonical, Ltd.
4
* This program is free software; you can redistribute it and/or modify
5
* it under the terms of the GNU Lesser General Public License as published by
6
* the Free Software Foundation; version 3.
8
* This program is distributed in the hope that it will be useful,
9
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
* GNU Lesser General Public License for more details.
13
* You should have received a copy of the GNU Lesser General Public License
14
* along with this program. If not, see <http://www.gnu.org/licenses/>.
16
* Authored by: Thomas Voß <thomas.voss@canonical.com>
20
#ifndef UTIL_ATOMIC_COUNTER_H_
21
#define UTIL_ATOMIC_COUNTER_H_
23
#include <biometry/visibility.h>
31
/// @brief AtomicCounter models an atomic counter.
32
class BIOMETRY_DLL_PUBLIC AtomicCounter
35
/// @brief AtomicCounter initializes a new instance to the given value.
36
explicit AtomicCounter(std::uint64_t value = 0);
38
/// @brief increment increments the value of the counter and returns the previously stored value.
39
std::uint64_t increment();
43
std::atomic<std::uint64_t> counter;
47
template<typename Tag>
48
inline AtomicCounter& counter()
50
static AtomicCounter instance;
55
#endif // UTIL_ATOMIC_COUNTER_H_