From 6c14e7bead15448ade169480a9a2c7f95320e1f0 Mon Sep 17 00:00:00 2001
From: Alfred Burgess <aburgess@ucc.gu.uwa.edu.au>
Date: Thu, 7 Dec 2023 17:02:05 +0800
Subject: [PATCH] Made config parser follow a factory design pattern

---
 include/config-parser.h |  8 +++++++-
 src/chunk.cpp           |  2 +-
 src/config-parser.cpp   | 28 ++++++++++++++++------------
 src/main.cpp            |  4 ++--
 4 files changed, 26 insertions(+), 16 deletions(-)

diff --git a/include/config-parser.h b/include/config-parser.h
index 0868867..41bef02 100644
--- a/include/config-parser.h
+++ b/include/config-parser.h
@@ -14,17 +14,23 @@ typedef std::map<std::string,std::string> ConfigMap;
 class ConfigParser
 {
 	public:
-		ConfigParser();
+		static ConfigParser UserSettings();
+
 		~ConfigParser();
 	
 		ConfigMap userSettings(){ return this->readFile( "settings.cfg" ); }
 
+		std::string toString() const;
+
 	private:
+		ConfigParser( std::string path );
  		const std::string CONFIG_DIRECTORY = "config";
  		const char DELIMINATOR = ':';
  		const char COMMENT_CHAR = '#';
 		Logger& _logger;
 
+		ConfigMap _config;
+
 		ConfigMap readFile( std::string path );
 		// void writeConfigFile( std::map settings );
 		
diff --git a/src/chunk.cpp b/src/chunk.cpp
index b13330b..a3d355a 100644
--- a/src/chunk.cpp
+++ b/src/chunk.cpp
@@ -46,7 +46,7 @@ std::string Chunk::getRadiationString() const { return std::to_string(this->radi
 std::string Chunk::getAgeString() const { return std::to_string(this->age); }
 
 std::string Chunk::getString( ChunkQuery format ) const
-	{return "rest";}
+	{ return "rest"; }
 
 void Chunk::visualise() const { std::cout << this->getString() << std::endl; }
 std::string Chunk::getString() const
diff --git a/src/config-parser.cpp b/src/config-parser.cpp
index 81c39be..58df3c1 100644
--- a/src/config-parser.cpp
+++ b/src/config-parser.cpp
@@ -1,24 +1,27 @@
 #include "config-parser.h"
 
-std::ostream& operator<<( std::ostream& os, const ConfigMap& obj )
+ConfigParser ConfigParser::UserSettings()
 {
-	for( const auto& [ key, value ] : obj )
-	{
-		os << "[" << key.c_str() << "]" << value.c_str() << std::endl;
-	}
-	return os;
+	ConfigParser parser("settings.cfg");
+	return parser;
 }
 
-ConfigParser::ConfigParser()
-	: _logger( Logger::instance() )
+
+std::string ConfigParser::toString() const
 {
-	this->_logger.info( "Creating config parser" );
+	std::string str = "";
+	for( const auto [key, value]  : this->_config )
+		{ str += "["+key+"] "+value+"\n"; }
+	return str;
 }
+std::ostream& operator<<( std::ostream& os, const ConfigParser& obj ) { return os << obj.toString(); }
+
+ConfigParser::ConfigParser( std::string path )
+	: _logger( Logger::instance() )
+{ this->_logger.info( "Creating config parser" ); }
 
 ConfigParser::~ConfigParser()
-{
-	this->_logger.info( "Closing config parser" );
-}
+	{ this->_logger.info( "Closing config parser" ); }
 
 
 ConfigMap ConfigParser::readFile( std::string path )
@@ -49,6 +52,7 @@ ConfigMap ConfigParser::readFile( std::string path )
 	} else 
 		{ this->_logger.error( "Unable to load specified configuration file:\n"+path ); }
 
+	this->_config = confMap;
 	return confMap;
 }
 
diff --git a/src/main.cpp b/src/main.cpp
index 5e11d8e..36a585e 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -12,8 +12,8 @@ int main() {
 	SaveManager saveManager;
 	state = Initialise;
 
-	ConfigParser configParser;
-	ConfigMap userSettings = configParser.userSettings();
+	ConfigParser userSettings = ConfigParser::UserSettings();
+
 	EntityManager entityManager;
 
 	// Seed the random number generator
-- 
GitLab