From 2ea4d93c103572068285d6ac635af463f29f4f16 Mon Sep 17 00:00:00 2001 From: EntireTwix Date: Wed, 23 Jun 2021 17:17:13 -0700 Subject: [PATCH] :sparkles: atomic flag --- include/bank.h | 5 ++++- src/bank.cpp | 14 ++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/include/bank.h b/include/bank.h index 1e6be1f..8d5f2d3 100644 --- a/include/bank.h +++ b/include/bank.h @@ -20,16 +20,19 @@ private: users; #if CONSERVATIVE_DISK_SAVE - std::atomic change_flag = false; //if true changes have been made + std::atomic_flag change_flag = ATOMIC_FLAG_INIT; //if true changes have been made void ChangesMade() noexcept; //called after making changes void ChangesSaved() noexcept; //called after saving + bool GetChangeState() noexcept; #define CHANGES_MADE ChangesMade(); #define CHANGES_SAVED ChangesSaved(); +#define GET_CHANGE_STATE GetChangeState(); #else #define CHANGES_MADE #define CHANGES_SAVED +#define GET_CHANGE_STATE #endif /** diff --git a/src/bank.cpp b/src/bank.cpp index 951fc2d..172a85f 100644 --- a/src/bank.cpp +++ b/src/bank.cpp @@ -3,21 +3,23 @@ #if CONSERVATIVE_DISK_SAVE void Bank::ChangesMade() noexcept { - while (change_flag.exchange(true, std::memory_order_relaxed)) - ; - std::atomic_thread_fence(std::memory_order_acquire); + return change_flag.test_and_set(); } void Bank::ChangesSaved() noexcept { - std::atomic_thread_fence(std::memory_order_release); - change_flag.store(false, std::memory_order_relaxed); + return change_flag.clear(); +} + +bool Bank::GetChangeState() noexcept +{ + return change_flag.test(); } #endif int_fast8_t Bank::AddUser(const std::string &name, const std::string &init_pass) noexcept { - if (name.size() > max_name_size) + if (name.size() > max_name _size) { return ErrorResponse::NameTooLong; }