From: Marcin Siodelski Date: Thu, 16 Oct 2014 14:01:55 +0000 (+0200) Subject: [3587] Extended OptionalValue with equality and assignment operators. X-Git-Tag: trac3629a_base~1^2~7 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1da855a88785c87dba6a62a6962e44e874c39ea2;p=thirdparty%2Fkea.git [3587] Extended OptionalValue with equality and assignment operators. --- diff --git a/src/lib/util/optional_value.h b/src/lib/util/optional_value.h index 3b964f4b94..0e47f891bb 100644 --- a/src/lib/util/optional_value.h +++ b/src/lib/util/optional_value.h @@ -91,6 +91,28 @@ public: return (specified_); } + /// @brief Specifies a new value value and marks it "specified". + /// + /// @param value New actual value. + void operator=(const T& value) { + specify(value); + } + + /// @brief Equality operator. + /// + /// @param value Actual value to compare to. + bool operator==(const T& value) { + return (value_ == value); + } + + /// @brief Inequality operator. + /// + /// @param value Actual value to compare to. + bool operator!=(const T& value) { + return (value_ != value); + } + + private: T value_; ///< Encapsulated value. bool specified_; ///< Flag which indicates if the value is specified. diff --git a/src/lib/util/tests/optional_value_unittest.cc b/src/lib/util/tests/optional_value_unittest.cc index a5f7438085..82558eeb33 100644 --- a/src/lib/util/tests/optional_value_unittest.cc +++ b/src/lib/util/tests/optional_value_unittest.cc @@ -80,4 +80,39 @@ TEST(OptionalValueTest, specifyValue) { ASSERT_TRUE(value.isSpecified()); } +// This test checks if the assignment operator assignining an actual +// value to the optional value works as expected. +TEST(OptionalValueTest, assignValue) { + OptionalValue value(10); + ASSERT_EQ(10, value.get()); + ASSERT_FALSE(value.isSpecified()); + + // Set the new value and mark it "specified". + value = 111; + ASSERT_EQ(111, value.get()); + ASSERT_TRUE(value.isSpecified()); + + // Specify another value. The value should be still "specified". + value = 1000; + ASSERT_EQ(1000, value.get()); + ASSERT_TRUE(value.isSpecified()); +} + +// This test checks if the equality and inequality operators work +// correctly for the optional value. +TEST(OptionalValueTest, equalityOperators) { + OptionalValue value(10); + ASSERT_EQ(10, value.get()); + ASSERT_FALSE(value.isSpecified()); + + EXPECT_TRUE(value == 10); + EXPECT_FALSE(value != 10); + + value = 123; + EXPECT_TRUE(value == 123); + EXPECT_FALSE(value != 123); +} + + + } // end of anonymous namespace