36 lines
		
	
	
		
			930 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			930 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" int
 | |
| 
 | |
| namespace spdlog {
 | |
| namespace details {
 | |
| struct null_mutex {
 | |
|     void lock() const {}
 | |
|     void unlock() const {}
 | |
| };
 | |
| 
 | |
| struct null_atomic_int {
 | |
|     int value;
 | |
|     null_atomic_int() = default;
 | |
| 
 | |
|     explicit null_atomic_int(int new_value)
 | |
|         : value(new_value) {}
 | |
| 
 | |
|     int load(std::memory_order = std::memory_order_relaxed) const { return value; }
 | |
| 
 | |
|     void store(int new_value, std::memory_order = std::memory_order_relaxed) { value = new_value; }
 | |
| 
 | |
|     int exchange(int new_value, std::memory_order = std::memory_order_relaxed) {
 | |
|         std::swap(new_value, value);
 | |
|         return new_value;  // return value before the call
 | |
|     }
 | |
| };
 | |
| 
 | |
| }  // namespace details
 | |
| }  // namespace spdlog
 |