diff --git a/CMakeLists.txt b/CMakeLists.txt index 15b9f89..84c04b6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,12 +16,13 @@ target_sources(${PROJECT_NAME} PRIVATE src/admin_filter.cpp src/bank_api.cpp src/bank.cpp + src/base64.c #temp + src/change_flag.cpp src/log.cpp src/transaction.cpp src/user_filter.cpp src/user.cpp src/xxhash.c - src/base64.c #temp ) target_include_directories(${PROJECT_NAME} PUBLIC include) diff --git a/include/bank.h b/include/bank.h index 85436b6..38dec49 100644 --- a/include/bank.h +++ b/include/bank.h @@ -2,12 +2,15 @@ #include //temporary #include #include -#include #include +#include #include "error_responses.hpp" //temporary -#include "parallel-hashmap/parallel_hashmap/phmap.h" #include "user.h" +#if CONSERVATIVE_DISK_SAVE +#include "change_flag.h" +#endif + using BankResponse = std::pair; class Bank @@ -22,9 +25,8 @@ private: std::mutex> users; - std::atomic change_flag = false; //if true changes have been made + ChangeFlag save_flag; -private: /** * @brief size_l should be grabbed if the operation MODIFIES the size (shared), this is so that when save claims unique * @@ -37,17 +39,10 @@ private: */ std::shared_mutex send_funds_l; -#if CONSERVATIVE_DISK_SAVE - void ChangesMade() noexcept; //called after making changes - void ChangesSaved() noexcept; //called after saving -#endif - public: std::string admin_pass; -#if CONSERVATIVE_DISK_SAVE - bool GetChangeState() noexcept; -#endif + bool GetChangeState() const noexcept; BankResponse GetBal(const std::string &name) const noexcept; BankResponse GetLogs(const std::string &name) noexcept; diff --git a/include/change_flag.h b/include/change_flag.h new file mode 100644 index 0000000..338ef29 --- /dev/null +++ b/include/change_flag.h @@ -0,0 +1,13 @@ +#pragma once +#include + +class ChangeFlag +{ +private: + std::atomic change_flag = false; //if true changes have been made + +public: + void SetChangesOn() noexcept; + void SetChangesOff() noexcept; + bool GetChangeState() const noexcept; +}; \ No newline at end of file diff --git a/src/bank.cpp b/src/bank.cpp index db7ce40..1b83090 100644 --- a/src/bank.cpp +++ b/src/bank.cpp @@ -2,20 +2,7 @@ using namespace drogon; -#if CONSERVATIVE_DISK_SAVE -void Bank::ChangesMade() noexcept -{ - return change_flag.store(1, std::memory_order_release); -} -void Bank::ChangesSaved() noexcept -{ - return change_flag.store(0, std::memory_order_release); -} -bool Bank::GetChangeState() noexcept -{ - return change_flag.load(std::memory_order_acquire); -} -#endif +bool Bank::GetChangeState() const noexcept { return save_flag.GetChangeState(); } BankResponse Bank::GetBal(const std::string &name) const noexcept { @@ -92,7 +79,7 @@ BankResponse Bank::SendFunds(const std::string &a_name, const std::string &b_nam b.log.AddTrans(std::move(temp)); }); #if CONSERVATIVE_DISK_SAVE - ChangesMade(); + save_flag.SetChangesOn(); #endif } return state; @@ -118,7 +105,7 @@ BankResponse Bank::SendFunds(const std::string &a_name, const std::string &b_nam b.balance += amount; }); #if CONSERVATIVE_DISK_SAVE - ChangesMade(); + save_flag.SetChangesOn(); #endif } return state; @@ -139,7 +126,7 @@ void Bank::ChangePassword(const std::string &name, std::string &&new_pass) noexc u.password = XXH3_64bits(new_pass.data(), new_pass.size()); }); #if CONSERVATIVE_DISK_SAVE - ChangesMade(); + save_flag.SetChangesOn(); #endif } BankResponse Bank::SetBal(const std::string &name, uint32_t amount) noexcept @@ -149,7 +136,7 @@ BankResponse Bank::SetBal(const std::string &name, uint32_t amount) noexcept })) { #if CONSERVATIVE_DISK_SAVE - ChangesMade(); + save_flag.SetChangesOn(); #endif return BankResponse(k200OK, "Balance set!"); } @@ -271,7 +258,7 @@ bool Bank::AdminVerifyPass(const std::string &attempt) noexcept void Bank::Save() { #if CONSERVATIVE_DISK_SAVE - if (GetChangeState()) + if (save_flag.GetChangeState()) { #endif Json::Value temp; @@ -300,7 +287,7 @@ void Bank::Save() user_save.close(); } #if CONSERVATIVE_DISK_SAVE - ChangesSaved(); + save_flag.SetChangesOff(); } #endif } diff --git a/src/change_flag.cpp b/src/change_flag.cpp new file mode 100644 index 0000000..f0ca41c --- /dev/null +++ b/src/change_flag.cpp @@ -0,0 +1,14 @@ +#include "change_flag.h" + +void ChangeFlag::SetChangesOn() noexcept +{ + return change_flag.store(1, std::memory_order_release); +} +void ChangeFlag::SetChangesOff() noexcept +{ + return change_flag.store(0, std::memory_order_release); +} +bool ChangeFlag::GetChangeState() const noexcept +{ + return change_flag.load(std::memory_order_acquire); +} \ No newline at end of file