mirror of
https://github.com/sendyne/cppreg.git
synced 2026-01-19 04:52:08 +00:00
REVISED SHADOW VALUE USING INTEGRAL CONSTANT
This provides a clearer interface compared to defining a constexpr bool member.
This commit is contained in:
@@ -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<type, type, mask, offset>
|
||||
::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<MMIO_t, type, type_mask<type>::value, 0u>(
|
||||
parent_register::rw_mem_pointer(),
|
||||
parent_register::shadow::value
|
||||
parent_register::shadow::shadow_value
|
||||
);
|
||||
|
||||
};
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -24,10 +24,7 @@ namespace cppreg {
|
||||
*
|
||||
* This implementation is for register which do not require shadow value.
|
||||
*/
|
||||
template <typename Register, bool UseShadow>
|
||||
struct Shadow {
|
||||
constexpr static const bool use_shadow = false;
|
||||
};
|
||||
template <typename Register, bool UseShadow> struct Shadow : std::false_type {};
|
||||
|
||||
|
||||
//! Shadow value implementation.
|
||||
@@ -39,15 +36,12 @@ namespace cppreg {
|
||||
* See
|
||||
*/
|
||||
template <typename Register>
|
||||
struct Shadow<Register, true> {
|
||||
static typename Register::type value;
|
||||
constexpr static const bool use_shadow = true;
|
||||
struct Shadow<Register, true> : std::true_type {
|
||||
static typename Register::type shadow_value;
|
||||
};
|
||||
template <typename Register>
|
||||
typename Register::type Shadow<Register, true>::value =
|
||||
typename Register::type Shadow<Register, true>::shadow_value =
|
||||
Register::reset;
|
||||
template <typename Register>
|
||||
constexpr const bool Shadow<Register, true>::use_shadow;
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user