From b9a1710719ec5fccb18aba29eececee310a0379b Mon Sep 17 00:00:00 2001 From: TheRealPad Date: Wed, 28 Feb 2024 15:01:17 -0800 Subject: [PATCH] feat(proxy): add interface and proxy to handle input --- CMakeLists.txt | 5 ++++ main.cpp | 3 +- src/Calculator/Calculator.cpp | 28 ++++++++----------- src/Calculator/Calculator.h | 3 +- src/Interface/IOperations.hpp | 22 +++++++++++++++ .../OperationsPriorities.cpp | 13 +++++++++ .../OperationsPriorities.h | 23 +++++++++++++++ .../ProxyOperationsPriorities.cpp | 18 ++++++++++++ .../ProxyOperationsPriorities.h | 26 +++++++++++++++++ 9 files changed, 122 insertions(+), 19 deletions(-) create mode 100644 src/Interface/IOperations.hpp create mode 100644 src/OperationsPriorities/OperationsPriorities.cpp create mode 100644 src/OperationsPriorities/OperationsPriorities.h create mode 100644 src/OperationsPriorities/ProxyOperationsPriorities.cpp create mode 100644 src/OperationsPriorities/ProxyOperationsPriorities.h diff --git a/CMakeLists.txt b/CMakeLists.txt index fae6be0..2fcf921 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,6 +14,8 @@ set(CMAKE_CXX_STANDARD 17) set(SRC src/Calculator/Calculator.cpp src/Error/Error.cpp + src/OperationsPriorities/OperationsPriorities.cpp + src/OperationsPriorities/ProxyOperationsPriorities.cpp ) set(TEST_SRC @@ -28,6 +30,9 @@ set_target_properties(${NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOUR include_directories(src/Calculator) include_directories(src/Error) +include_directories(src/Interface) +include_directories(src/OperationsPriorities) +include_directories(src/InfiniteNumbers) add_compile_options(-fPIC) diff --git a/main.cpp b/main.cpp index e5f1106..fa10f01 100644 --- a/main.cpp +++ b/main.cpp @@ -4,5 +4,6 @@ int main(int ac, char **ag) { Calculator::Calculator calculator; - return calculator.run() ? 0 : 1; + calculator.run(); + return 0; } diff --git a/src/Calculator/Calculator.cpp b/src/Calculator/Calculator.cpp index 06a4d10..33f4983 100644 --- a/src/Calculator/Calculator.cpp +++ b/src/Calculator/Calculator.cpp @@ -4,11 +4,13 @@ #include #include "Calculator.h" +#include "IOperations.hpp" +#include "ProxyOperationsPriorities.h" #include "Error.h" namespace Calculator { Calculator::Calculator() { - Calculator::Calculator::description(); + description(); } Calculator::~Calculator() = default; @@ -17,31 +19,25 @@ namespace Calculator { std::cout << "This is the class Calculator" << std::endl; } - bool Calculator::run() { - try { - Calculator::Calculator::handleInput(); - } catch (ErrorCalculator::Error &e) { - std::cout << e.what() << std::endl; - return false; - } - return true; - } - - void Calculator::handleInput() { + void Calculator::run() { std::string input; + std::unique_ptr operations = std::make_unique(); - Calculator::prompt(); + prompt(); while (std::getline(std::cin, input)) { if (input.empty()) { std::cout << "Input terminated." << std::endl; break; } if (!this->_previousResults.count(input)) { - // call calcul here - this->_previousResults[input] = input; + try { + this->_previousResults[input] = operations->makeOperation(input); + } catch (ErrorCalculator::Error &e) { + std::cout << e.what() << std::endl; + } } std::cout << this->_previousResults[input] << std::endl << std::endl;; - Calculator::prompt(); + prompt(); } } diff --git a/src/Calculator/Calculator.h b/src/Calculator/Calculator.h index a433431..8d3baf0 100644 --- a/src/Calculator/Calculator.h +++ b/src/Calculator/Calculator.h @@ -15,11 +15,10 @@ namespace Calculator { public: Calculator(); ~Calculator(); - bool run(); + void run(); static void description(); private: - void handleInput(); static void prompt(); std::map _previousResults; diff --git a/src/Interface/IOperations.hpp b/src/Interface/IOperations.hpp new file mode 100644 index 0000000..16ee71e --- /dev/null +++ b/src/Interface/IOperations.hpp @@ -0,0 +1,22 @@ +// +// Created by Pierre-Alexandre Delgado on 28/02/2024. +// + +#ifndef IOPERATIONS_HPP +#define IOPERATIONS_HPP + +#include + +namespace Operations { + + class IOperations { + + public: + virtual ~IOperations() = default; + virtual std::string makeOperation(std::string &operation) = 0; + + }; + +} // Operations + +#endif //IOPERATIONS_HPP diff --git a/src/OperationsPriorities/OperationsPriorities.cpp b/src/OperationsPriorities/OperationsPriorities.cpp new file mode 100644 index 0000000..5ccaad5 --- /dev/null +++ b/src/OperationsPriorities/OperationsPriorities.cpp @@ -0,0 +1,13 @@ +// +// Created by Pierre-Alexandre Delgado on 28/02/2024. +// + +#include "OperationsPriorities.h" + +namespace Operations { + + std::string OperationsPriorities::makeOperation(std::string &operation) { + return {"1"}; + } + +} \ No newline at end of file diff --git a/src/OperationsPriorities/OperationsPriorities.h b/src/OperationsPriorities/OperationsPriorities.h new file mode 100644 index 0000000..232e8f4 --- /dev/null +++ b/src/OperationsPriorities/OperationsPriorities.h @@ -0,0 +1,23 @@ +// +// Created by Pierre-Alexandre Delgado on 28/02/2024. +// + +#ifndef OPERATIONSPRIORITIES_H +#define OPERATIONSPRIORITIES_H + +#include +#include "IOperations.hpp" + +namespace Operations { + + class OperationsPriorities : public IOperations { + + public: + OperationsPriorities() = default; + ~OperationsPriorities() override = default; + std::string makeOperation(std::string &operation) override; + }; + +} // Operations + +#endif //OPERATIONSPRIORITIES_H diff --git a/src/OperationsPriorities/ProxyOperationsPriorities.cpp b/src/OperationsPriorities/ProxyOperationsPriorities.cpp new file mode 100644 index 0000000..6246e48 --- /dev/null +++ b/src/OperationsPriorities/ProxyOperationsPriorities.cpp @@ -0,0 +1,18 @@ +// +// Created by Pierre-Alexandre Delgado on 28/02/2024. +// + +#include "ProxyOperationsPriorities.h" + +namespace Operations { + + ProxyOperationsPriorities::ProxyOperationsPriorities() { + this->_operationsPriorities = std::make_unique(); + } + + std::string ProxyOperationsPriorities::makeOperation(std::string &operation) { + return this->_operationsPriorities->makeOperation(operation); + } + + +} diff --git a/src/OperationsPriorities/ProxyOperationsPriorities.h b/src/OperationsPriorities/ProxyOperationsPriorities.h new file mode 100644 index 0000000..ac2e88d --- /dev/null +++ b/src/OperationsPriorities/ProxyOperationsPriorities.h @@ -0,0 +1,26 @@ +// +// Created by Pierre-Alexandre Delgado on 28/02/2024. +// + +#ifndef PROXYOPERATIONSPRIORITIES_H +#define PROXYOPERATIONSPRIORITIES_H + +#include "OperationsPriorities.h" + +namespace Operations { + + class ProxyOperationsPriorities : public IOperations { + + public: + ProxyOperationsPriorities(); + std::string makeOperation(std::string &operation) override; + + private: + std::unique_ptr _operationsPriorities; + }; + +} // Operations + + + +#endif //PROXYOPERATIONSPRIORITIES_H