Project
Loading...
Searching...
No Matches
typetraits.h
Go to the documentation of this file.
1// Copyright 2019-2023 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
15
16#ifndef RANS_INTERNAL_COMMON_TYPETRAITS_H_
17#define RANS_INTERNAL_COMMON_TYPETRAITS_H_
18
21
24
25#ifdef RANS_SIMD
27#endif
28
31
32namespace o2::rans
33{
34namespace internal
35{
36
37template <typename T>
39
40template <size_t lowerBound_V>
41struct getCoderTag<CompatEncoderImpl<lowerBound_V>> : public std::integral_constant<CoderTag, CoderTag::Compat> {
42};
43
44#ifdef RANS_SINGLE_STREAM
45template <size_t lowerBound_V>
46struct getCoderTag<SingleStreamEncoderImpl<lowerBound_V>> : public std::integral_constant<CoderTag, CoderTag::SingleStream> {
47};
48#endif /* RANS_SINGLE_STREAM */
49
50#ifdef RANS_SSE
51template <size_t lowerBound_V>
52struct getCoderTag<SSEEncoderImpl<lowerBound_V>> : public std::integral_constant<CoderTag, CoderTag::SSE> {
53};
54#endif /* RANS_SSE */
55
56#ifdef RANS_AVX2
57template <size_t lowerBound_V>
58struct getCoderTag<AVXEncoderImpl<lowerBound_V>> : public std::integral_constant<CoderTag, CoderTag::AVX2> {
59};
60#endif /* RANS_AVX2 */
61
62template <class encoderImpl_T, class symbolTable_T, size_t nStreams_V>
63struct getCoderTag<Encoder<encoderImpl_T, symbolTable_T, nStreams_V>> : public getCoderTag<encoderImpl_T> {
64};
65
66template <typename T>
68
69template <CoderTag tag_V>
71 using type = Symbol;
72};
73
74template <>
78
79template <typename T>
81
82template <size_t lowerBound_V>
83struct getStreamingLowerBound<CompatEncoderImpl<lowerBound_V>> : public std::integral_constant<size_t, lowerBound_V> {
84};
85
86#ifdef RANS_SINGLE_STREAM
87template <size_t lowerBound_V>
88struct getStreamingLowerBound<SingleStreamEncoderImpl<lowerBound_V>> : public std::integral_constant<size_t, lowerBound_V> {
89};
90#endif /* RANS_SINGLE_STREAM */
91
92#ifdef RANS_SSE
93template <size_t lowerBound_V>
94struct getStreamingLowerBound<SSEEncoderImpl<lowerBound_V>> : public std::integral_constant<size_t, lowerBound_V> {
95};
96#endif /* RANS_SSE */
97
98#ifdef RANS_AVX2
99template <size_t lowerBound_V>
100struct getStreamingLowerBound<AVXEncoderImpl<lowerBound_V>> : public std::integral_constant<size_t, lowerBound_V> {
101};
102#endif /* RANS_AVX2 */
103
104template <size_t lowerBound_V>
105struct getStreamingLowerBound<DecoderImpl<lowerBound_V>> : public std::integral_constant<size_t, lowerBound_V> {
106};
107
108template <typename T>
110
111} // namespace internal
112
113namespace utils
114{
117
118} // namespace utils
119} // namespace o2::rans
120
121#endif /* RANS_INTERNAL_COMMON_TYPETRAITS_H_ */
Operations to decode a rANS stream.
rANS encoding operations that encode multiple symbols simultaniously using SIMD. Unified implementati...
rANS encoding operations based on ryg's fast algorithm and a naive rANS implementation for all 64Bit ...
Contains statistical information for one source symbol, required for encoding/decoding.
Decoder - User facing class to decode a rANS encoded stream back into the source data based on the sa...
Encoder - User facing class to perform rANS entropy coding of source symbols onto a rANS state based ...
constexpr CoderTag getCoderTag_v
Definition typetraits.h:67
constexpr size_t getStreamingLowerBound_v
Definition typetraits.h:109
Common utility functions.