From f1d98d6bd543b90d9b85fe2e4e40cae3e2e6b69a Mon Sep 17 00:00:00 2001 From: Nicolas Clauvelin Date: Sun, 11 Mar 2018 17:34:38 -0400 Subject: [PATCH] REVISED SHADOW VALUE USING INTEGRAL CONSTANT This provides a clearer interface compared to defining a constexpr bool member. --- register/Field.h | 6 +++--- register/MergeWrite.h | 4 ++-- register/ShadowValue.h | 14 ++++---------- 3 files changed, 9 insertions(+), 15 deletions(-) diff --git a/register/Field.h b/register/Field.h index 44082ce..06fd33f 100644 --- a/register/Field.h +++ b/register/Field.h @@ -69,7 +69,7 @@ namespace cppreg { //! Boolean flag indicating if a shadow value is used. constexpr static const bool has_shadow = - parent_register::shadow::use_shadow; + parent_register::shadow::value; //! Customized overflow check implementation for Field types. /** @@ -124,13 +124,13 @@ namespace cppreg { // Update shadow value. // This assumes that reading a write-only fields return some value. RegisterWrite - ::write(&parent_register::shadow::value, value); + ::write(&parent_register::shadow::shadow_value, value); // Write as a block to the register, that is, we do not use the // mask and offset. policy::template write::value, 0u>( parent_register::rw_mem_pointer(), - parent_register::shadow::value + parent_register::shadow::shadow_value ); }; diff --git a/register/MergeWrite.h b/register/MergeWrite.h index 64171ca..0e4ed35 100644 --- a/register/MergeWrite.h +++ b/register/MergeWrite.h @@ -60,7 +60,7 @@ namespace cppreg { private: // Disabled for shadow value register. - static_assert(!Register::shadow::use_shadow, + static_assert(!Register::shadow::value, "merge write is not available for shadow value register"); // Accumulated value. @@ -245,7 +245,7 @@ namespace cppreg { private: // Disabled for shadow value register. - static_assert(!Register::shadow::use_shadow, + static_assert(!Register::shadow::value, "merge write is not available for shadow value register"); // Private default constructor. diff --git a/register/ShadowValue.h b/register/ShadowValue.h index 1328671..e145787 100644 --- a/register/ShadowValue.h +++ b/register/ShadowValue.h @@ -24,10 +24,7 @@ namespace cppreg { * * This implementation is for register which do not require shadow value. */ - template - struct Shadow { - constexpr static const bool use_shadow = false; - }; + template struct Shadow : std::false_type {}; //! Shadow value implementation. @@ -39,15 +36,12 @@ namespace cppreg { * See */ template - struct Shadow { - static typename Register::type value; - constexpr static const bool use_shadow = true; + struct Shadow : std::true_type { + static typename Register::type shadow_value; }; template - typename Register::type Shadow::value = + typename Register::type Shadow::shadow_value = Register::reset; - template - constexpr const bool Shadow::use_shadow; }