Botan 2.19.3
Crypto and TLS for C&
atomic.h
Go to the documentation of this file.
1/*
2 * Atomic
3 * (C) 2016 Matthias Gierlings
4 *
5 * Botan is released under the Simplified BSD License (see license.txt)
6 **/
7
8#ifndef BOTAN_ATOMIC_H_
9#define BOTAN_ATOMIC_H_
10
11#include <botan/types.h>
12#include <atomic>
13#include <memory>
14
15//BOTAN_FUTURE_INTERNAL_HEADER(atomic.h)
16
17namespace Botan {
18
19template <typename T>
20/**
21 * Simple helper class to expand std::atomic with copy constructor and copy
22 * assignment operator, i.e. for use as element in a container like
23 * std::vector. The construction of instances of this wrapper is NOT atomic
24 * and needs to be properly guarded.
25 **/
27 {
28 public:
29 Atomic() = default;
30 Atomic(const Atomic& data) : m_data(data.m_data.load()) {}
31 Atomic(const std::atomic<T>& data) : m_data(data.load()) {}
32 ~Atomic() = default;
33
35 {
36 m_data.store(a.m_data.load());
37 return *this;
38 }
39
40 Atomic& operator=(const std::atomic<T>& a)
41 {
42 m_data.store(a.load());
43 return *this;
44 }
45
46 operator std::atomic<T>& () { return m_data; }
47 operator T() { return m_data.load(); }
48
49 private:
50 std::atomic<T> m_data;
51 };
52
53}
54
55#endif
Atomic()=default
~Atomic()=default
Atomic(const std::atomic< T > &data)
Definition atomic.h:31
Atomic & operator=(const Atomic &a)
Definition atomic.h:34
Atomic & operator=(const std::atomic< T > &a)
Definition atomic.h:40
Atomic(const Atomic &data)
Definition atomic.h:30
int(* final)(unsigned char *, CTX *)
fe T
Definition ge.cpp:37