6 #include <AH/STL/type_traits> // enable_if
12 template <
size_t Bits_out,
size_t Bits_in,
class T_out,
class T_in>
13 std::enable_if_t<(Bits_out <= 2 * Bits_in), T_out>
16 template <
size_t Bits_out,
size_t Bits_in,
class T_out,
class T_in>
17 std::enable_if_t<(Bits_out > 2 * Bits_in), T_out>
19 constexpr
size_t leftShift = Bits_out - Bits_in;
20 return (T_out(in) << leftShift) |
21 increaseBitDepthImpl<leftShift, Bits_in, T_out>(in);
24 template <
size_t Bits_out,
size_t Bits_in,
class T_out,
class T_in>
25 std::enable_if_t<(Bits_out <= 2 * Bits_in), T_out>
27 constexpr
size_t leftShift = Bits_out - Bits_in;
28 constexpr
size_t rightShift = Bits_in - leftShift;
29 return (T_out(in) << leftShift) | (in >> rightShift);
67 template <
size_t Bits_out,
size_t Bits_in,
class T_out,
class T_in>
69 static_assert(Bits_in <=
sizeof(T_in) * CHAR_BIT,
70 "Error: Bits_in > bits(T_in)");
71 static_assert(Bits_out <=
sizeof(T_out) * CHAR_BIT,
72 "Error: Bits_out > bits(T_out)");
73 return increaseBitDepthImpl<Bits_out, Bits_in, T_out>(in);