Skip to content

Commit c5d42f0

Browse files
committed
read_bits
1 parent 10c34d9 commit c5d42f0

File tree

2 files changed

+16
-20
lines changed

2 files changed

+16
-20
lines changed

compiler/extensions/cpp/runtime/src/zserio/ArrayTraits.h

+15-19
Original file line numberDiff line numberDiff line change
@@ -20,57 +20,53 @@ namespace zserio
2020
namespace detail
2121
{
2222

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)
2824
{
2925
return static_cast<int8_t>(in.readSignedBits(numBits));
3026
}
3127

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)
3429
{
3530
return static_cast<int16_t>(in.readSignedBits(numBits));
3631
}
3732

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)
4034
{
4135
return in.readSignedBits(numBits);
4236
}
4337

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)
4639
{
4740
return in.readSignedBits64(numBits);
4841
}
4942

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)
5244
{
5345
return static_cast<uint8_t>(in.readBits(numBits));
5446
}
5547

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)
5849
{
5950
return static_cast<uint16_t>(in.readBits(numBits));
6051
}
6152

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)
6454
{
6555
return in.readBits(numBits);
6656
}
6757

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)
7059
{
7160
return in.readBits64(numBits);
7261
}
7362

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+
7470
template <typename T>
7571
void write_bits(BitStreamWriter& out, T value, uint8_t numBits);
7672

compiler/extensions/cpp/runtime/src/zserio/TypeWrappers.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -540,7 +540,7 @@ inline void write_bits(BitStreamWriter& out, Integer<T, N> val, uint8_t numBits)
540540
}
541541

542542
template <class T, int N>
543-
inline Integer<T, N> read_bits<Integer<T, N>>(BitStreamReader& in, uint8_t numBits)
543+
inline Integer<T, N> read_bits_impl(Integer<T, N>*, BitStreamReader& in, uint8_t numBits)
544544
{
545545
return read_bits<T>(in, numBits);
546546
}

0 commit comments

Comments
 (0)