From 07e72caa600bcfbeab3772d80b527e1762e540dc Mon Sep 17 00:00:00 2001 From: gruszczrob <=> Date: Thu, 6 Jun 2024 15:53:16 +0200 Subject: [PATCH 1/3] Implementation of Class Factory --- ClassFactory/CMakeLists.txt | 15 ++++++++ ClassFactory/ClassFactory.cpp | 18 ++++++++++ ClassFactory/ClassFactory.h | 56 +++++++++++++++++++++++++++++ ClassFactory/ClassFactory.tpp | 67 +++++++++++++++++++++++++++++++++++ README.md | 2 +- 5 files changed, 157 insertions(+), 1 deletion(-) create mode 100644 ClassFactory/CMakeLists.txt create mode 100644 ClassFactory/ClassFactory.cpp create mode 100644 ClassFactory/ClassFactory.h create mode 100644 ClassFactory/ClassFactory.tpp diff --git a/ClassFactory/CMakeLists.txt b/ClassFactory/CMakeLists.txt new file mode 100644 index 0000000..adfa336 --- /dev/null +++ b/ClassFactory/CMakeLists.txt @@ -0,0 +1,15 @@ +cmake_minimum_required(VERSION 3.10) + +# Set the project name +project(ClassFactory) + +# Create a library target for ClassFactory module +add_library(ClassFactory STATIC + ClassFactory.cpp + ClassFactory.h + ClassFactory.tpp +) + +# Set the include directory +target_include_directories(ClassFactory PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) + diff --git a/ClassFactory/ClassFactory.cpp b/ClassFactory/ClassFactory.cpp new file mode 100644 index 0000000..3360e60 --- /dev/null +++ b/ClassFactory/ClassFactory.cpp @@ -0,0 +1,18 @@ +#include "ClassFactory.h" + +bool UnorderPointersMap::isExisting(const string& key) const { + return myList.find(key) != myList.end(); +} + +ClassFactory::ClassFactory() { + writeToLogs("Drawable Engine Factory created"); +} + +void ClassFactory::setNotCorrected() { + setVar(isCorrect, false); +} + +bool ClassFactory::checkIfCorrect() { + return *(isCorrect.get()); +} + diff --git a/ClassFactory/ClassFactory.h b/ClassFactory/ClassFactory.h new file mode 100644 index 0000000..8a7f95a --- /dev/null +++ b/ClassFactory/ClassFactory.h @@ -0,0 +1,56 @@ +#ifndef CLASSFACTORY_H +#define CLASSFACTORY_H + +#include +#include +#include +#include +#include +#include +#include "../Logs/Logs.h" + +using namespace std; + +class UnorderPointersMap { +private: + using VarType = variant, shared_ptr, shared_ptr, shared_ptr, shared_ptr>; + unordered_map myList; + +public: + template + void addItem(const string& key, shared_ptr item); + + template + T& getItem(const string& key) const; + + bool isExisting(const string& key) const; +}; + +class ClassFactory { +private: + shared_ptr isCorrect = make_shared(true); + UnorderPointersMap unorderedPointersMap; + +protected: + void setNotCorrected(); + + template + bool setVar(shared_ptr& VarPtr, any input, const string name = ""); + +public: + ClassFactory(); + + template + bool setVar(const string& varName, T input); + + template + T getVar(const string& varName); + + bool checkIfCorrect(); +}; + +// Template function implementations +#include "ClassFactory.tpp" + +#endif /* CLASSFACTORY_H */ + diff --git a/ClassFactory/ClassFactory.tpp b/ClassFactory/ClassFactory.tpp new file mode 100644 index 0000000..44019c3 --- /dev/null +++ b/ClassFactory/ClassFactory.tpp @@ -0,0 +1,67 @@ +// Template function implementations for UnorderPointersMap + +template +void UnorderPointersMap::addItem(const string& key, shared_ptr item) { + myList[key] = item; +} + +template +T& UnorderPointersMap::getItem(const string& key) const { + auto it = myList.find(key); + if (it != myList.end()) { + if (auto ptr = get_if>(&(it->second))) { + return **ptr; + } + } + throw invalid_argument("Key not found or type mismatch"); +} + +// Template function implementations for ClassFactory + +template +bool ClassFactory::setVar(shared_ptr& VarPtr, any input, const string name) { + try { + *VarPtr = any_cast(input); + if (name != "") { + unorderedPointersMap.addItem(name, VarPtr); + } + return true; + } catch (const exception& e) { + cout << "Invalid input" << endl; + writeToLogs(string("Error in private setVar: ") + string(e.what())); + return false; + } +} + +template +bool ClassFactory::setVar(const string& varName, T input) { + try { + if (unorderedPointersMap.isExisting(varName)) { + unorderedPointersMap.getItem(varName) = input; + } else { + cout << "Variable not found" << endl; + writeToLogs("Error in public setVar: variable not found"); + return false; + } + return true; + } catch (const exception& e) { + writeToLogs(string("Error in public setVar: ") + string(e.what())); + return false; + } +} + +template +T ClassFactory::getVar(const string& varName) { + if (!checkIfCorrect()) { + cout << "This class contains error, one of arguments in constructor was in incorrect type" << endl; + return T(); + } else { + if (unorderedPointersMap.isExisting(varName)) { + return unorderedPointersMap.getItem(varName); + } else { + writeToLogs("Error in public getVar: variable not found"); + cout << "Variable not found" << endl; + return T(); + } + } +} diff --git a/README.md b/README.md index 8d9d7a0..cb66dc4 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -# LabiryntGenerator \ No newline at end of file +#LabiryntGenerator From bc7760422c0ed1a38dd4f1402e86892a666c119e Mon Sep 17 00:00:00 2001 From: gruszczrob <=> Date: Thu, 6 Jun 2024 16:11:30 +0200 Subject: [PATCH 2/3] improwing visual of code --- ClassFactory/ClassFactory.cpp | 8 +++--- ClassFactory/ClassFactory.h | 37 ++++++++++++++-------------- ClassFactory/ClassFactory.tpp | 46 +++++++++++++++++------------------ 3 files changed, 45 insertions(+), 46 deletions(-) diff --git a/ClassFactory/ClassFactory.cpp b/ClassFactory/ClassFactory.cpp index 3360e60..dea8de4 100644 --- a/ClassFactory/ClassFactory.cpp +++ b/ClassFactory/ClassFactory.cpp @@ -1,18 +1,18 @@ #include "ClassFactory.h" bool UnorderPointersMap::isExisting(const string& key) const { - return myList.find(key) != myList.end(); + return myList.find(key) != myList.end(); } ClassFactory::ClassFactory() { - writeToLogs("Drawable Engine Factory created"); + writeToLogs("Drawable Engine Factory created"); } void ClassFactory::setNotCorrected() { - setVar(isCorrect, false); + setVar(isCorrect, false); } bool ClassFactory::checkIfCorrect() { - return *(isCorrect.get()); + return *(isCorrect.get()); } diff --git a/ClassFactory/ClassFactory.h b/ClassFactory/ClassFactory.h index 8a7f95a..0d83bbc 100644 --- a/ClassFactory/ClassFactory.h +++ b/ClassFactory/ClassFactory.h @@ -13,44 +13,43 @@ using namespace std; class UnorderPointersMap { private: - using VarType = variant, shared_ptr, shared_ptr, shared_ptr, shared_ptr>; - unordered_map myList; + using VarType = variant, shared_ptr, shared_ptr, shared_ptr, shared_ptr>; + unordered_map myList; public: - template - void addItem(const string& key, shared_ptr item); + template + void addItem(const string& key, shared_ptr item); - template - T& getItem(const string& key) const; + template + T& getItem(const string& key) const; - bool isExisting(const string& key) const; + bool isExisting(const string& key) const; }; class ClassFactory { private: - shared_ptr isCorrect = make_shared(true); - UnorderPointersMap unorderedPointersMap; + shared_ptr isCorrect = make_shared(true); + UnorderPointersMap unorderedPointersMap; protected: - void setNotCorrected(); + void setNotCorrected(); - template - bool setVar(shared_ptr& VarPtr, any input, const string name = ""); + template + bool setVar(shared_ptr& VarPtr, any input, const string name = ""); public: - ClassFactory(); + ClassFactory(); - template - bool setVar(const string& varName, T input); + template + bool setVar(const string& varName, T input); - template - T getVar(const string& varName); + template + T getVar(const string& varName); - bool checkIfCorrect(); + bool checkIfCorrect(); }; // Template function implementations #include "ClassFactory.tpp" #endif /* CLASSFACTORY_H */ - diff --git a/ClassFactory/ClassFactory.tpp b/ClassFactory/ClassFactory.tpp index 44019c3..137ad50 100644 --- a/ClassFactory/ClassFactory.tpp +++ b/ClassFactory/ClassFactory.tpp @@ -36,32 +36,32 @@ bool ClassFactory::setVar(shared_ptr& VarPtr, any input, const string name) { template bool ClassFactory::setVar(const string& varName, T input) { try { - if (unorderedPointersMap.isExisting(varName)) { - unorderedPointersMap.getItem(varName) = input; - } else { - cout << "Variable not found" << endl; - writeToLogs("Error in public setVar: variable not found"); - return false; + if (unorderedPointersMap.isExisting(varName)) { + unorderedPointersMap.getItem(varName) = input; + } else { + cout << "Variable not found" << endl; + writeToLogs("Error in public setVar: variable not found"); + return false; } - return true; - } catch (const exception& e) { - writeToLogs(string("Error in public setVar: ") + string(e.what())); - return false; - } + return true; + } catch (const exception& e) { + writeToLogs(string("Error in public setVar: ") + string(e.what())); + return false; + } } template T ClassFactory::getVar(const string& varName) { - if (!checkIfCorrect()) { - cout << "This class contains error, one of arguments in constructor was in incorrect type" << endl; - return T(); - } else { - if (unorderedPointersMap.isExisting(varName)) { - return unorderedPointersMap.getItem(varName); - } else { - writeToLogs("Error in public getVar: variable not found"); - cout << "Variable not found" << endl; - return T(); - } - } + if (!checkIfCorrect()) { + cout << "This class contains error, one of arguments in constructor was in incorrect type" << endl; + return T(); + } else { + if (unorderedPointersMap.isExisting(varName)) { + return unorderedPointersMap.getItem(varName); + } else { + writeToLogs("Error in public getVar: variable not found"); + cout << "Variable not found" << endl; + return T(); + } + } } From 12eed02fac432ec4077a90b74aaf8d9bb228b70d Mon Sep 17 00:00:00 2001 From: gruszczrob <=> Date: Fri, 7 Jun 2024 15:14:20 +0200 Subject: [PATCH 3/3] Correction of mistakes --- ClassFactory/ClassFactory.cpp | 7 ++--- ClassFactory/ClassFactory.h | 56 ++++++++++++++++------------------- ClassFactory/ClassFactory.tpp | 38 ++++++++++++------------ 3 files changed, 48 insertions(+), 53 deletions(-) diff --git a/ClassFactory/ClassFactory.cpp b/ClassFactory/ClassFactory.cpp index dea8de4..29642f6 100644 --- a/ClassFactory/ClassFactory.cpp +++ b/ClassFactory/ClassFactory.cpp @@ -1,18 +1,17 @@ #include "ClassFactory.h" +using namespace std; + bool UnorderPointersMap::isExisting(const string& key) const { return myList.find(key) != myList.end(); } -ClassFactory::ClassFactory() { - writeToLogs("Drawable Engine Factory created"); -} void ClassFactory::setNotCorrected() { setVar(isCorrect, false); } bool ClassFactory::checkIfCorrect() { - return *(isCorrect.get()); + return isCorrect; } diff --git a/ClassFactory/ClassFactory.h b/ClassFactory/ClassFactory.h index 0d83bbc..e696b11 100644 --- a/ClassFactory/ClassFactory.h +++ b/ClassFactory/ClassFactory.h @@ -1,5 +1,5 @@ -#ifndef CLASSFACTORY_H -#define CLASSFACTORY_H +#ifndef CLASS_FACTORY_H_ +#define CLASS_FACTORY_H_ #include #include @@ -7,49 +7,45 @@ #include #include #include -#include "../Logs/Logs.h" - -using namespace std; +#include "Logs.h" class UnorderPointersMap { -private: - using VarType = variant, shared_ptr, shared_ptr, shared_ptr, shared_ptr>; - unordered_map myList; + private: + using VarType = std::variant, std::shared_ptr, std::shared_ptr, std::shared_ptr, std::shared_ptr>; + std::unordered_map myList; -public: - template - void addItem(const string& key, shared_ptr item); + public: + template + void addItem(const std::string& key, T& item); - template - T& getItem(const string& key) const; + template + T& getItem(const std::string& key) const; - bool isExisting(const string& key) const; + bool isExisting(const std::string& key) const; }; class ClassFactory { -private: - shared_ptr isCorrect = make_shared(true); - UnorderPointersMap unorderedPointersMap; - -protected: - void setNotCorrected(); + private: + bool isCorrect = true; + UnorderPointersMap unorderedPointersMap; - template - bool setVar(shared_ptr& VarPtr, any input, const string name = ""); + protected: + void setNotCorrected(); -public: - ClassFactory(); + template + bool setVar(T& VarPtr, std::any input, const std::string& name = ""); - template - bool setVar(const string& varName, T input); + public: + template + bool setVar(const std::string& varName, T input); - template - T getVar(const string& varName); + template + T getVar(const std::string& varName); - bool checkIfCorrect(); + bool checkIfCorrect(); }; // Template function implementations #include "ClassFactory.tpp" -#endif /* CLASSFACTORY_H */ +#endif /* CLASS_FACTORY_H_ */ diff --git a/ClassFactory/ClassFactory.tpp b/ClassFactory/ClassFactory.tpp index 137ad50..0532df4 100644 --- a/ClassFactory/ClassFactory.tpp +++ b/ClassFactory/ClassFactory.tpp @@ -1,67 +1,67 @@ // Template function implementations for UnorderPointersMap template -void UnorderPointersMap::addItem(const string& key, shared_ptr item) { - myList[key] = item; +void UnorderPointersMap::addItem(const std::string& key, T& item) { + std::shared_ptr ptr = std::make_shared(item); + myList[key] = ptr; } template -T& UnorderPointersMap::getItem(const string& key) const { +T& UnorderPointersMap::getItem(const std::string& key) const { auto it = myList.find(key); if (it != myList.end()) { - if (auto ptr = get_if>(&(it->second))) { + if (auto ptr = std::get_if>(&(it->second))) { return **ptr; } } - throw invalid_argument("Key not found or type mismatch"); + throw std::invalid_argument("Key not found or type mismatch"); } // Template function implementations for ClassFactory template -bool ClassFactory::setVar(shared_ptr& VarPtr, any input, const string name) { +bool ClassFactory::setVar(T& Var, std::any input, const std::string& name) { try { - *VarPtr = any_cast(input); - if (name != "") { - unorderedPointersMap.addItem(name, VarPtr); + Var = std::any_cast(input); + if (!name.empty()) { + unorderedPointersMap.addItem(name, Var); } return true; - } catch (const exception& e) { - cout << "Invalid input" << endl; + } catch (const std::exception& e) { + std::cout << "Invalid input" << std::endl; writeToLogs(string("Error in private setVar: ") + string(e.what())); return false; } } template -bool ClassFactory::setVar(const string& varName, T input) { +bool ClassFactory::setVar(const std::string& varName, T input) { try { if (unorderedPointersMap.isExisting(varName)) { unorderedPointersMap.getItem(varName) = input; } else { - cout << "Variable not found" << endl; + std::cout << "Variable not found" << std::endl; writeToLogs("Error in public setVar: variable not found"); return false; } return true; - } catch (const exception& e) { + } catch (const std::exception& e) { writeToLogs(string("Error in public setVar: ") + string(e.what())); return false; } } template -T ClassFactory::getVar(const string& varName) { +T ClassFactory::getVar(const std::string& varName) { if (!checkIfCorrect()) { - cout << "This class contains error, one of arguments in constructor was in incorrect type" << endl; - return T(); + std::cout << "This class contains errors; one of the arguments in the constructor was of an incorrect type" << std::endl; + throw std::runtime_error("ClassFactory contains errors"); } else { if (unorderedPointersMap.isExisting(varName)) { return unorderedPointersMap.getItem(varName); } else { writeToLogs("Error in public getVar: variable not found"); - cout << "Variable not found" << endl; - return T(); + throw std::runtime_error("Variable not found: " + varName); } } }