From c5d9a0b87150d4379e3737c80af7feb4371bb85e Mon Sep 17 00:00:00 2001 From: Leonetienne Date: Wed, 2 Jun 2021 14:50:29 +0200 Subject: [PATCH] Some cleanup --- Hazelnupp/FloatValue.cpp | 10 ++++++++++ Hazelnupp/FloatValue.h | 10 +++++----- Hazelnupp/Hazelnupp.cpp | 6 +++--- Hazelnupp/IntValue.cpp | 15 +++++++++++++++ Hazelnupp/IntValue.h | 6 ++++++ Hazelnupp/ListValue.cpp | 5 +++++ Hazelnupp/ListValue.h | 11 +++++------ Hazelnupp/StringValue.cpp | 5 +++++ Hazelnupp/StringValue.h | 9 ++++----- Hazelnupp/Value.h | 6 +++--- Hazelnupp/VoidValue.h | 7 ++----- Hazelnupp/main.cpp | 6 +++++- 12 files changed, 68 insertions(+), 28 deletions(-) diff --git a/Hazelnupp/FloatValue.cpp b/Hazelnupp/FloatValue.cpp index 67295c6..4201074 100644 --- a/Hazelnupp/FloatValue.cpp +++ b/Hazelnupp/FloatValue.cpp @@ -20,3 +20,13 @@ std::string FloatValue::GetAsOsString() const ss << "FloatValue: " << value; return ss.str(); } + +FloatValue::operator long double() const +{ + return value; +} + +FloatValue::operator double() const +{ + return (double)value; +} diff --git a/Hazelnupp/FloatValue.h b/Hazelnupp/FloatValue.h index 3af98b9..0d03d69 100644 --- a/Hazelnupp/FloatValue.h +++ b/Hazelnupp/FloatValue.h @@ -7,15 +7,15 @@ class FloatValue : public Value public: FloatValue(const long double& value); + //! Will return a deeopopy of this object Value* Deepcopy() const override; - friend std::ostream& operator<< (std::ostream& os, const FloatValue& v) - { - return os << v.GetAsOsString(); - } - + //! Will return a string suitable for an std::ostream; std::string GetAsOsString() const override; + operator long double () const; + operator double() const; + private: long double value; }; diff --git a/Hazelnupp/Hazelnupp.cpp b/Hazelnupp/Hazelnupp.cpp index 5fa9681..acfd3f8 100644 --- a/Hazelnupp/Hazelnupp.cpp +++ b/Hazelnupp/Hazelnupp.cpp @@ -61,7 +61,7 @@ std::size_t Hazelnupp::ParseNextParameter(const std::size_t parIndex, Parameter* break; } - Value* parsedVal = EvaluateValues(values); + Value* parsedVal = ParseValue(values); out_Par = new Parameter(key, parsedVal); delete parsedVal; @@ -84,7 +84,7 @@ bool Hazelnupp::HasParam(const std::string& key) const return parameters.find(key) != parameters.end(); } -Value* Hazelnupp::EvaluateValues(const std::vector& values) +Value* Hazelnupp::ParseValue(const std::vector& values) { // Void-type if (values.size() == 0) @@ -98,7 +98,7 @@ Value* Hazelnupp::EvaluateValues(const std::vector& values) ListValue* newList = new ListValue(); for (const std::string& val : values) { - Value* tmp = EvaluateValues(std::vector({ val })); + Value* tmp = ParseValue(std::vector({ val })); newList->AddValue(tmp); delete tmp; } diff --git a/Hazelnupp/IntValue.cpp b/Hazelnupp/IntValue.cpp index c536c8e..11f1d34 100644 --- a/Hazelnupp/IntValue.cpp +++ b/Hazelnupp/IntValue.cpp @@ -20,3 +20,18 @@ std::string IntValue::GetAsOsString() const ss << "IntValue: " << value; return ss.str(); } + +IntValue::operator long long int() const +{ + return value; +} + +IntValue::operator long int() const +{ + return (long int)value; +} + +IntValue::operator int() const +{ + return (int)value; +} diff --git a/Hazelnupp/IntValue.h b/Hazelnupp/IntValue.h index 3d5acc4..14f45ec 100644 --- a/Hazelnupp/IntValue.h +++ b/Hazelnupp/IntValue.h @@ -6,10 +6,16 @@ class IntValue : public Value public: IntValue(const long long int& value); + //! Will return a deeopopy of this object Value* Deepcopy() const override; + //! Will return a string suitable for an std::ostream; std::string GetAsOsString() const override; + operator long long int() const; + operator long int() const; + operator int() const; + private: long long int value; }; diff --git a/Hazelnupp/ListValue.cpp b/Hazelnupp/ListValue.cpp index 0e8d46b..5d5e23a 100644 --- a/Hazelnupp/ListValue.cpp +++ b/Hazelnupp/ListValue.cpp @@ -51,3 +51,8 @@ std::string ListValue::GetAsOsString() const return ss.str(); } + +ListValue::operator std::vector() const +{ + return value; +} diff --git a/Hazelnupp/ListValue.h b/Hazelnupp/ListValue.h index baca3f0..4215d0f 100644 --- a/Hazelnupp/ListValue.h +++ b/Hazelnupp/ListValue.h @@ -8,17 +8,16 @@ public: ListValue(); ~ListValue(); + //! Will return a deeopopy of this object Value* Deepcopy() const override; + //! Will return a string suitable for an std::ostream; + std::string GetAsOsString() const override; + //! Will add this value to the list void AddValue(const Value* value); - std::string GetAsOsString() const override; - - friend std::ostream& operator<< (std::ostream& os, const ListValue& v) - { - return os << v.GetAsOsString(); - } + operator std::vector() const; private: std::vector value; diff --git a/Hazelnupp/StringValue.cpp b/Hazelnupp/StringValue.cpp index db5c7f3..b2fa5e6 100644 --- a/Hazelnupp/StringValue.cpp +++ b/Hazelnupp/StringValue.cpp @@ -20,3 +20,8 @@ std::string StringValue::GetAsOsString() const ss << "StringValue: " << value; return ss.str(); } + +StringValue::operator std::string() const +{ + return value; +} diff --git a/Hazelnupp/StringValue.h b/Hazelnupp/StringValue.h index f1676d9..1d13a53 100644 --- a/Hazelnupp/StringValue.h +++ b/Hazelnupp/StringValue.h @@ -7,15 +7,14 @@ class StringValue : public Value public: StringValue(const std::string& value); + //! Will return a deeopopy of this object Value* Deepcopy() const override; - friend std::ostream& operator<< (std::ostream& os, const StringValue& v) - { - return os << v.GetAsOsString(); - } - + //! Will return a string suitable for an std::ostream; std::string GetAsOsString() const override; + operator std::string() const; + private: std::string value; }; diff --git a/Hazelnupp/Value.h b/Hazelnupp/Value.h index df7619a..c303644 100644 --- a/Hazelnupp/Value.h +++ b/Hazelnupp/Value.h @@ -8,14 +8,14 @@ public: //! Will return a deeopopy of this object virtual Value* Deepcopy() const = 0; + //! Will return a string suitable for an std::ostream; + virtual std::string GetAsOsString() const = 0; + friend std::ostream& operator<< (std::ostream& os, const Value& v) { return os << v.GetAsOsString(); } - //! Will return a string suitable for an std::ostream; - virtual std::string GetAsOsString() const = 0; - protected: Value(DATA_TYPE type); diff --git a/Hazelnupp/VoidValue.h b/Hazelnupp/VoidValue.h index 2b6db54..210e7f3 100644 --- a/Hazelnupp/VoidValue.h +++ b/Hazelnupp/VoidValue.h @@ -6,12 +6,9 @@ class VoidValue : public Value public: VoidValue(); + //! Will return a deeopopy of this object Value* Deepcopy() const override; - friend std::ostream& operator<< (std::ostream& os, const VoidValue& v) - { - return os << "VoidValue"; - } - + //! Will return a string suitable for an std::ostream; std::string GetAsOsString() const override; }; diff --git a/Hazelnupp/main.cpp b/Hazelnupp/main.cpp index d8f08e2..b72b656 100644 --- a/Hazelnupp/main.cpp +++ b/Hazelnupp/main.cpp @@ -1,12 +1,13 @@ #include #include #include "Hazelnupp.h" +#include "IntValue.h" int main(int argc, char** argv) { std::string arg0 = "meinpfad"; std::string arg1 = "--word"; - std::string arg2 = "1"; + std::string arg2 = "6669"; std::string arg3 = "--alfred"; std::string arg4 = "banane7"; @@ -21,6 +22,9 @@ int main(int argc, char** argv) Hazelnupp args(testArgv.size(), testArgv.data()); //Hazelnupp args(argc, argv); + int i = *(IntValue*)args["--word"]; + std::cout << i << std::endl; + //std::cout << args.GetExecutableName() << std::endl; return 0;