diff --git a/cpp_utils/include/cpp_utils/ReturnCode.hpp b/cpp_utils/include/cpp_utils/ReturnCode.hpp index 6d82a4c..ea6a174 100644 --- a/cpp_utils/include/cpp_utils/ReturnCode.hpp +++ b/cpp_utils/include/cpp_utils/ReturnCode.hpp @@ -58,6 +58,10 @@ class ReturnCode ReturnCode( const fastdds::dds::ReturnCode_t& value); + CPP_UTILS_DllAPI + ReturnCode( + const ReturnCodeValue& value); + CPP_UTILS_DllAPI std::uint32_t operator ()() const noexcept; @@ -65,10 +69,18 @@ class ReturnCode bool operator ==( const ReturnCode& c) const noexcept; + CPP_UTILS_DllAPI + bool operator ==( + const ReturnCodeValue& c) const noexcept; + CPP_UTILS_DllAPI bool operator !=( const ReturnCode& c) const noexcept; + CPP_UTILS_DllAPI + bool operator !=( + const ReturnCodeValue& c) const noexcept; + CPP_UTILS_DllAPI bool operator <( const ReturnCode& other) const noexcept; @@ -84,9 +96,8 @@ class ReturnCode //! Link every ReturnCodeValue available with a string to deserialize static const std::map to_string_conversion_; - //! \c ReturnCode value - std::uint32_t value_; - + //! \c ReturnCodeValue + ReturnCodeValue value_; // operator << needs access to the object CPP_UTILS_DllAPI @@ -94,8 +105,28 @@ class ReturnCode std::ostream& os, const ReturnCode& code); + CPP_UTILS_DllAPI + friend bool operator ==( + const ReturnCodeValue& lhs, + const ReturnCode& rhs) noexcept; + + CPP_UTILS_DllAPI + friend bool operator !=( + const ReturnCodeValue& lhs, + const ReturnCode& rhs) noexcept; + }; +CPP_UTILS_DllAPI +bool operator ==( + const ReturnCode::ReturnCodeValue& lhs, + const ReturnCode& rhs) noexcept; + +CPP_UTILS_DllAPI +bool operator !=( + const ReturnCode::ReturnCodeValue& lhs, + const ReturnCode& rhs) noexcept; + //! \c ReturnCode to stream serializator CPP_UTILS_DllAPI std::ostream& operator <<( diff --git a/cpp_utils/src/cpp/ReturnCode.cpp b/cpp_utils/src/cpp/ReturnCode.cpp index 1a04b79..511322b 100644 --- a/cpp_utils/src/cpp/ReturnCode.cpp +++ b/cpp_utils/src/cpp/ReturnCode.cpp @@ -61,6 +61,12 @@ ReturnCode::ReturnCode( } } +ReturnCode::ReturnCode( + const ReturnCode::ReturnCodeValue& value) +{ + value_ = value; +} + std::uint32_t ReturnCode::operator ()() const noexcept { return value_; @@ -72,12 +78,24 @@ bool ReturnCode::operator ==( return value_ == c.value_; } +bool ReturnCode::operator ==( + const ReturnCode::ReturnCodeValue& c) const noexcept +{ + return value_ == c; +} + bool ReturnCode::operator !=( const ReturnCode& c) const noexcept { return value_ != c.value_; } +bool ReturnCode::operator !=( + const ReturnCode::ReturnCodeValue& c) const noexcept +{ + return value_ != c; +} + bool ReturnCode::operator <( const ReturnCode& other) const noexcept { @@ -89,6 +107,20 @@ bool ReturnCode::operator !() const noexcept return value_ != ReturnCode::RETCODE_OK; } +bool operator ==( + const ReturnCode::ReturnCodeValue& lhs, + const ReturnCode& rhs) noexcept +{ + return rhs == lhs; +} + +bool operator !=( + const ReturnCode::ReturnCodeValue& lhs, + const ReturnCode& rhs) noexcept +{ + return rhs != lhs; +} + const std::map ReturnCode::to_string_conversion_ = { {ReturnCode::RETCODE_OK, "Ok"}, diff --git a/cpp_utils/test/unittest/return_code/CMakeLists.txt b/cpp_utils/test/unittest/return_code/CMakeLists.txt index e106354..dfbc9a9 100644 --- a/cpp_utils/test/unittest/return_code/CMakeLists.txt +++ b/cpp_utils/test/unittest/return_code/CMakeLists.txt @@ -21,6 +21,8 @@ set(TEST_SOURCES set(TEST_LIST serializator + compare_against_return_code_value_rhs + compare_against_return_code_value_lhs ) set(TEST_EXTRA_LIBRARIES diff --git a/cpp_utils/test/unittest/return_code/ReturnCodeTest.cpp b/cpp_utils/test/unittest/return_code/ReturnCodeTest.cpp index 4e60a12..45dc1ad 100644 --- a/cpp_utils/test/unittest/return_code/ReturnCodeTest.cpp +++ b/cpp_utils/test/unittest/return_code/ReturnCodeTest.cpp @@ -43,6 +43,34 @@ TEST(ReturnCodeTest, serializator) } } +/** + * Test ReturnCode compares directly against ReturnCodeValue values. + */ +TEST(ReturnCodeTest, compare_against_return_code_value_rhs) +{ + // Right side of the comparation + + ReturnCode from_fastdds(eprosima::fastdds::dds::RETCODE_NO_DATA); + + ASSERT_TRUE(from_fastdds == ReturnCode::RETCODE_NO_DATA); + ASSERT_FALSE(from_fastdds == ReturnCode::RETCODE_ERROR); + ASSERT_TRUE(from_fastdds != ReturnCode::RETCODE_ERROR); +} + +/** + * Test ReturnCodeValue compares directly against ReturnCode from lhs. + */ +TEST(ReturnCodeTest, compare_against_return_code_value_lhs) +{ + // Left side of the comparation + + ReturnCode ret(ReturnCode::RETCODE_NOT_ENABLED); + + ASSERT_TRUE(ReturnCode::RETCODE_NOT_ENABLED == ret); + ASSERT_TRUE(ReturnCode::RETCODE_OK != ret); + ASSERT_FALSE(ReturnCode::RETCODE_OK == ret); +} + int main( int argc, char** argv)