taco-db  0.1.0
aggregation.h
Go to the documentation of this file.
1 #ifndef UTILS_TYPSUPP_AGGREGATION_H
2 #define UTILS_TYPSUPP_AGGREGATION_H
3 
4 #include "tdb.h"
5 
6 #include <type_traits>
7 
8 namespace taco {
9 
10 struct SumState {
11  bool m_empty;
12  union {
13  uint64_t m_unsigned;
14  int64_t m_signed;
15  double m_float;
16  } m_agg;
17 };
18 
19 template<typename T, typename = void>
21 
22 template<typename T>
23 struct SumStateAggType<T, typename std::enable_if<
24  std::is_integral<T>::value && std::is_signed<T>::value>::type> {
25  typedef int64_t A;
26 };
27 
28 template<typename T>
29 struct SumStateAggType<T, typename std::enable_if<
30  std::is_integral<T>::value && !std::is_signed<T>::value>::type> {
31  typedef uint64_t A;
32 };
33 
34 template<typename T>
35 struct SumStateAggType<T, typename std::enable_if<
36  std::is_floating_point<T>::value>::type> {
37  typedef double A;
38 };
39 
40 struct AvgState {
41  double m_sum;
42  uint64_t m_cnt;
43 };
44 
46  bool m_empty;
47  union {
48  uint64_t u64;
49  uint32_t u32;
50  uint16_t u16;
51  uint8_t u8;
52  int64_t i64;
53  int32_t i32;
54  int16_t i16;
55  int8_t i8;
56  float f;
57  double d;
59 };
60 
61 } // namespace taco
62 
63 #endif // UTILS_TYPSUPP_AGGREGATION_H
Definition: Record.h:148
Definition: datum.h:28
Definition: aggregation.h:40
double m_sum
Definition: aggregation.h:41
uint64_t m_cnt
Definition: aggregation.h:42
Definition: aggregation.h:45
uint64_t u64
Definition: aggregation.h:48
int16_t i16
Definition: aggregation.h:54
uint32_t u32
Definition: aggregation.h:49
int32_t i32
Definition: aggregation.h:53
int64_t i64
Definition: aggregation.h:52
float f
Definition: aggregation.h:56
bool m_empty
Definition: aggregation.h:46
int8_t i8
Definition: aggregation.h:55
uint16_t u16
Definition: aggregation.h:50
double d
Definition: aggregation.h:57
uint8_t u8
Definition: aggregation.h:51
union taco::PrimitiveMinMaxState::@1 m_value
Definition: aggregation.h:20
Definition: aggregation.h:10
bool m_empty
Definition: aggregation.h:11
uint64_t m_unsigned
Definition: aggregation.h:13
union taco::SumState::@0 m_agg
int64_t m_signed
Definition: aggregation.h:14
double m_float
Definition: aggregation.h:15