|
|
@ -39,13 +39,13 @@ struct endian_wrapper { |
|
|
|
: value{0} {} |
|
|
|
|
|
|
|
endian_wrapper(T v) noexcept |
|
|
|
: value{mode == endian::native ? v : swap_endian(v)} {} |
|
|
|
: value{adjust(v)} {} |
|
|
|
|
|
|
|
endian_wrapper(const endian_wrapper& v) noexcept |
|
|
|
: value{v.value} {} |
|
|
|
|
|
|
|
endian_wrapper& operator=(T p) noexcept { |
|
|
|
value = mode == endian::native ? p : swap_endian(p); |
|
|
|
endian_wrapper& operator=(T v) noexcept { |
|
|
|
value = adjust(v); |
|
|
|
return *this; |
|
|
|
} |
|
|
|
|
|
|
@ -55,7 +55,35 @@ struct endian_wrapper { |
|
|
|
} |
|
|
|
|
|
|
|
operator T() const noexcept { |
|
|
|
return mode == endian::native ? value : swap_endian(value); |
|
|
|
return adjust(value); |
|
|
|
} |
|
|
|
|
|
|
|
// arithmetic assignment operators
|
|
|
|
|
|
|
|
endian_wrapper& operator+=(T rhs) noexcept { |
|
|
|
value = adjust(adjust(value) + rhs); |
|
|
|
return *this; |
|
|
|
} |
|
|
|
|
|
|
|
endian_wrapper& operator+=(endian_wrapper rhs) noexcept { |
|
|
|
value = adjust(adjust(value) + adjust(rhs.value)); |
|
|
|
return *this; |
|
|
|
} |
|
|
|
|
|
|
|
endian_wrapper& operator-=(T rhs) noexcept { |
|
|
|
value = adjust(adjust(value) - rhs); |
|
|
|
return *this; |
|
|
|
} |
|
|
|
|
|
|
|
endian_wrapper& operator-=(endian_wrapper rhs) noexcept { |
|
|
|
value = adjust(adjust(value) - adjust(rhs.value)); |
|
|
|
return *this; |
|
|
|
} |
|
|
|
|
|
|
|
private: |
|
|
|
|
|
|
|
T adjust(T x) const noexcept { |
|
|
|
return (mode == endian::native ? x : swap_endian(x)); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|