/* * peripherals_utility.hpp * * Created on: Feb 24, 2021 * Author: erki */ #ifndef SKULLC_PERIPHERALS_UTILITY_HPP_ #define SKULLC_PERIPHERALS_UTILITY_HPP_ #include #include #include namespace Peripherals { #define SKULLC_CONCAT_IMPL(x, y) x##y #define SKULLC_CONCAT(x, y) SKULLC_CONCAT_IMPL(x, y) #define SKULLC_TAG struct SKULLC_CONCAT(SkullCTag_, __COUNTER__) template constexpr const T& clamp(const T& v, const T& lo, const T& hi) { if (v > hi) return hi; else if (v < lo) return lo; else return v; } template T byteToTypeBE(const std::uint8_t a[N]) { T t(0); for (std::size_t i = 0; i < N; i++) { t |= a[i] << (i * 8); } return t; } template T byteToTypeLE(const std::uint8_t a[N]) { T t(0); for (std::size_t i = N; i >= 0; i--) { t |= a[i] << ((i - 1) * 8); } return t; } template constexpr T zeroInitialized() { static_assert(std::is_trivially_default_constructible::value, "Struct is not trivially default constructible."); T t; std::memset(&t, 0, sizeof(T)); return t; } }// namespace Peripherals #endif /* SKULLC_PERIPHERALS_UTILITY_HPP_ */