You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
spdlog/include/spdlog/details/null_mutex.h

50 lines
997 B
C++

// Copyright(c) 2015-present, Gabi Melman & spdlog contributors.
// Distributed under the MIT License (http://opensource.org/licenses/MIT)
#pragma once
#include <atomic>
#include <utility>
// null, no cost dummy "mutex" and dummy "atomic" log level
namespace spdlog {
namespace details {
struct null_mutex
{
void lock() const {}
void unlock() const {}
};
template<typename T>
struct null_atomic
{
T value;
null_atomic() = default;
explicit constexpr null_atomic(T new_value)
: value(new_value)
{}
[[nodiscard]] T load(std::memory_order = std::memory_order_seq_cst) const
{
return value;
}
void store(T new_value, std::memory_order = std::memory_order_seq_cst)
{
value = new_value;
}
T exchange(T new_value, std::memory_order = std::memory_order_seq_cst)
{
std::swap(new_value, value);
return new_value; // return value before the call
}
};
} // namespace details
} // namespace spdlog