From 287f9f4751cbc1ded9e15f0644845016ed8597bf Mon Sep 17 00:00:00 2001 From: Quentin Snow Date: Tue, 17 Jan 2023 11:58:31 -0600 Subject: [PATCH] Operations and AccountOperations boilerplate --- CMakeLists.txt | 2 +- src/optHandlers/accountOperation.cpp | 15 ++++++++++++++ src/optHandlers/accountOperation.h | 31 ++++++++++++++++++++++++++++ src/optHandlers/mainOptHandler.cpp | 10 +++++++++ src/optHandlers/mainOptHandler.h | 5 +++++ src/optHandlers/operation.cpp | 5 +++++ src/optHandlers/operation.h | 18 ++++++++++++++++ 7 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 src/optHandlers/accountOperation.cpp create mode 100644 src/optHandlers/accountOperation.h create mode 100644 src/optHandlers/operation.cpp create mode 100644 src/optHandlers/operation.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 8184b8b..03db1c5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,4 +4,4 @@ project(budget) set(CMAKE_CXX_STANDARD 20) add_executable(${PROJECT_NAME} src/main.cpp - src/optHandlers/mainOptHandler.h src/optHandlers/mainOptHandler.cpp) + src/optHandlers/mainOptHandler.h src/optHandlers/mainOptHandler.cpp src/optHandlers/operation.cpp src/optHandlers/operation.h src/optHandlers/accountOperation.cpp src/optHandlers/accountOperation.h) diff --git a/src/optHandlers/accountOperation.cpp b/src/optHandlers/accountOperation.cpp new file mode 100644 index 0000000..f50bcfa --- /dev/null +++ b/src/optHandlers/accountOperation.cpp @@ -0,0 +1,15 @@ +// +// Created by quentin on 1/17/23. +// + +#include "accountOperation.h" + +#include + +using namespace Budget::OptHandlers; + +void AccountOperation::commit() { + //TODO This function will be called when the action needs to be done +} + +AccountOperation::AccountOperation() = default; diff --git a/src/optHandlers/accountOperation.h b/src/optHandlers/accountOperation.h new file mode 100644 index 0000000..8508022 --- /dev/null +++ b/src/optHandlers/accountOperation.h @@ -0,0 +1,31 @@ +// +// Created by quentin on 1/17/23. +// + +#ifndef BUDGET_ACCOUNTOPERATION_H +#define BUDGET_ACCOUNTOPERATION_H + +#include +#include +#include "operation.h" + +namespace Budget::OptHandlers { + class AccountOperation : public Operation { + public: + void commit() override; + + explicit AccountOperation(); + + struct Flags : public Operation::Flags { + bool del = false; + bool forceDel = false; + bool value = false; + std::string description; + }; + + Flags flags; + private: + }; +} // OptHandlers + +#endif //BUDGET_ACCOUNTOPERATION_H diff --git a/src/optHandlers/mainOptHandler.cpp b/src/optHandlers/mainOptHandler.cpp index 8c4b827..078fb3f 100644 --- a/src/optHandlers/mainOptHandler.cpp +++ b/src/optHandlers/mainOptHandler.cpp @@ -2,6 +2,7 @@ // Created by quentin on 1/8/23. // #include "mainOptHandler.h" +#include "accountOperation.h" #include #include @@ -60,6 +61,8 @@ void MainOptHandler::accountOptHandler(std::string account) { {"description", no_argument, nullptr, 'D'}, }; + auto acctOperation = std::make_unique(); + while (true) { int opt = getopt_long(argv.size(), argv.data(), "ha:c:e:p:dFvD", accountLongOpts, nullptr); if (opt == -1) @@ -74,14 +77,20 @@ void MainOptHandler::accountOptHandler(std::string account) { case 'e': case 'p': optind--; + operations.push(std::move(acctOperation)); return; case 'd': + acctOperation->flags.del = true; break; case 'F': + acctOperation->flags.del = true; + acctOperation->flags.forceDel = true; break; case 'v': + acctOperation->flags.value = true; break; case 'D': + acctOperation->flags.description = optarg; break; case '?': help(); @@ -90,6 +99,7 @@ void MainOptHandler::accountOptHandler(std::string account) { break; } } + operations.push(std::move(acctOperation)); } void MainOptHandler::createOptHandler(std::string account) { diff --git a/src/optHandlers/mainOptHandler.h b/src/optHandlers/mainOptHandler.h index ad49859..936215a 100644 --- a/src/optHandlers/mainOptHandler.h +++ b/src/optHandlers/mainOptHandler.h @@ -7,6 +7,9 @@ #include #include +#include +#include +#include "operation.h" namespace Budget::OptHandlers{ class MainOptHandler { @@ -15,6 +18,8 @@ namespace Budget::OptHandlers{ void help(); + std::queue> operations; + private: void accountOptHandler(std::string account); diff --git a/src/optHandlers/operation.cpp b/src/optHandlers/operation.cpp new file mode 100644 index 0000000..8f080c6 --- /dev/null +++ b/src/optHandlers/operation.cpp @@ -0,0 +1,5 @@ +// +// Created by quentin on 1/17/23. +// + +#include "operation.h" diff --git a/src/optHandlers/operation.h b/src/optHandlers/operation.h new file mode 100644 index 0000000..807e7ef --- /dev/null +++ b/src/optHandlers/operation.h @@ -0,0 +1,18 @@ +// +// Created by quentin on 1/17/23. +// + +#ifndef BUDGET_OPERATION_H +#define BUDGET_OPERATION_H + +namespace Budget::OptHandlers { + class Operation { + public: + virtual void commit() = 0; + struct Flags { + }; + }; +} + + +#endif //BUDGET_OPERATION_H