@@ -20,57 +20,53 @@ namespace zserio
20
20
namespace detail
21
21
{
22
22
23
- template <typename T>
24
- T read_bits (BitStreamReader& in, uint8_t numBits);
25
-
26
- template <>
27
- inline int8_t read_bits<int8_t >(BitStreamReader& in, uint8_t numBits)
23
+ inline int8_t read_bits_impl (int8_t *, BitStreamReader& in, uint8_t numBits)
28
24
{
29
25
return static_cast <int8_t >(in.readSignedBits (numBits));
30
26
}
31
27
32
- template <>
33
- inline int16_t read_bits<int16_t >(BitStreamReader& in, uint8_t numBits)
28
+ inline int16_t read_bits_impl (int16_t *, BitStreamReader& in, uint8_t numBits)
34
29
{
35
30
return static_cast <int16_t >(in.readSignedBits (numBits));
36
31
}
37
32
38
- template <>
39
- inline int32_t read_bits<int32_t >(BitStreamReader& in, uint8_t numBits)
33
+ inline int32_t read_bits_impl (int32_t *, BitStreamReader& in, uint8_t numBits)
40
34
{
41
35
return in.readSignedBits (numBits);
42
36
}
43
37
44
- template <>
45
- inline int64_t read_bits<int64_t >(BitStreamReader& in, uint8_t numBits)
38
+ inline int64_t read_bits_impl (int64_t *, BitStreamReader& in, uint8_t numBits)
46
39
{
47
40
return in.readSignedBits64 (numBits);
48
41
}
49
42
50
- template <>
51
- inline uint8_t read_bits<uint8_t >(BitStreamReader& in, uint8_t numBits)
43
+ inline uint8_t read_bits_impl (uint8_t *, BitStreamReader& in, uint8_t numBits)
52
44
{
53
45
return static_cast <uint8_t >(in.readBits (numBits));
54
46
}
55
47
56
- template <>
57
- inline uint16_t read_bits<uint16_t >(BitStreamReader& in, uint8_t numBits)
48
+ inline uint16_t read_bits_impl (uint16_t *, BitStreamReader& in, uint8_t numBits)
58
49
{
59
50
return static_cast <uint16_t >(in.readBits (numBits));
60
51
}
61
52
62
- template <>
63
- inline uint32_t read_bits<uint32_t >(BitStreamReader& in, uint8_t numBits)
53
+ inline uint32_t read_bits_impl (uint32_t *, BitStreamReader& in, uint8_t numBits)
64
54
{
65
55
return in.readBits (numBits);
66
56
}
67
57
68
- template <>
69
- inline uint64_t read_bits<uint64_t >(BitStreamReader& in, uint8_t numBits)
58
+ inline uint64_t read_bits_impl (uint64_t *, BitStreamReader& in, uint8_t numBits)
70
59
{
71
60
return in.readBits64 (numBits);
72
61
}
73
62
63
+ template <typename T>
64
+ T read_bits (BitStreamReader& in, uint8_t numBits)
65
+ {
66
+ // function partial spec is not allowed so transform it to template parameter
67
+ return read_bits_impl ((T*)nullptr , in, numBits);
68
+ }
69
+
74
70
template <typename T>
75
71
void write_bits (BitStreamWriter& out, T value, uint8_t numBits);
76
72
0 commit comments