Added quantiling UDAFs
[com/gs-lite.git] / include / hfta / hfta_udaf.h
1 /* ------------------------------------------------\r
2 Copyright 2014 AT&T Intellectual Property\r
3    Licensed under the Apache License, Version 2.0 (the "License");\r
4    you may not use this file except in compliance with the License.\r
5    You may obtain a copy of the License at\r
6 \r
7      http://www.apache.org/licenses/LICENSE-2.0\r
8 \r
9    Unless required by applicable law or agreed to in writing, software\r
10    distributed under the License is distributed on an "AS IS" BASIS,\r
11    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
12    See the License for the specific language governing permissions and\r
13    limitations under the License.\r
14  ------------------------------------------- */\r
15 \r
16 #ifndef _HFTA_UDAF_H_INCLUDED_\r
17 #define _HFTA_UDAF_H_INCLUDED_\r
18 \r
19 #include "vstring.h"\r
20 #include "host_tuple.h"\r
21 #include "gsconfig.h"\r
22 \r
23 // -------------------------------------------------------------------\r
24 //              sum over 3 intervals : test rUDAF\r
25 void sum3_HFTA_AGGR_INIT_(gs_sp_t buf) ;\r
26 void sum3_HFTA_AGGR_UPDATE_(gs_sp_t buf, gs_uint32_t s) ;\r
27 void sum3_HFTA_AGGR_OUTPUT_(gs_uint32_t *result, gs_sp_t buf) ;\r
28 void sum3_HFTA_AGGR_DESTROY_(gs_sp_t buf) ;\r
29 void sum3_HFTA_AGGR_REINIT_( gs_sp_t buf) ;\r
30 \r
31 \r
32 // -------------------------------------------------------------------\r
33 //              running sum over arbitrary intervals.\r
34 void moving_sum_udaf_HFTA_AGGR_INIT_(gs_sp_t buf) ;\r
35 void moving_sum_udaf_HFTA_AGGR_UPDATE_(gs_sp_t buf, gs_uint32_t s, gs_uint32_t N) ;\r
36 void moving_sum_udaf_HFTA_AGGR_OUTPUT_(gs_uint64_t *result, gs_sp_t buf) ;\r
37 void moving_sum_udaf_HFTA_AGGR_DESTROY_(gs_sp_t buf) ;\r
38 void moving_sum_udaf_HFTA_AGGR_REINIT_( gs_sp_t buf) ;\r
39 \r
40 #define super_moving_sum_udaf_HFTA_AGGR_INIT_ moving_sum_udaf_HFTA_AGGR_INIT_\r
41 void super_moving_sum_udaf_HFTA_AGGR_UPDATE_(gs_sp_t buf, gs_uint64_t s) ;\r
42 #define super_moving_sum_udaf_HFTA_AGGR_OUTPUT_ moving_sum_udaf_HFTA_AGGR_OUTPUT_\r
43 #define super_moving_sum_udaf_HFTA_AGGR_DESTROY_ moving_sum_udaf_HFTA_AGGR_DESTROY_\r
44 #define super_moving_sum_udaf_HFTA_AGGR_REINIT_ moving_sum_udaf_HFTA_AGGR_REINIT_\r
45 \r
46 gs_uint32_t moving_sum_extract(gs_uint64_t result);\r
47 gs_float_t moving_sum_extract_exp(gs_uint64_t result, gs_float_t alpha);\r
48 \r
49 \r
50 /////////////////////////////////////////////////////////////////////////\r
51 /////   Calculate the average of all positive float numbers\r
52 \r
53 void POSAVG_HFTA_AGGR_INIT_(gs_sp_t buf);\r
54 void POSAVG_HFTA_AGGR_UPDATE_(gs_sp_t buf, gs_float_t v);\r
55 void POSAVG_HFTA_AGGR_OUTPUT_(gs_float_t * v, gs_sp_t buf);\r
56 void POSAVG_HFTA_AGGR_DESTROY_(gs_sp_t buf);\r
57 \r
58 \r
59 ///////////////////////////////////////////////////////////////////\r
60 /////                   avg_udaf (simple example)\r
61 \r
62 //              hfta avg_udaf\r
63 void avg_udaf_HFTA_AGGR_INIT_(gs_sp_t b);\r
64 void avg_udaf_HFTA_AGGR_UPDATE_(gs_sp_t b, gs_uint32_t v);\r
65 void avg_udaf_HFTA_AGGR_OUTPUT_(vstring *r,gs_sp_t b);\r
66 void avg_udaf_HFTA_AGGR_DESTROY_(gs_sp_t b);\r
67 \r
68 //              avg_udaf superaggregate\r
69 void avg_udaf_hfta_HFTA_AGGR_INIT_(gs_sp_t b);\r
70 void avg_udaf_hfta_HFTA_AGGR_UPDATE_(gs_sp_t b, vstring *v);\r
71 void avg_udaf_hfta_HFTA_AGGR_OUTPUT_(vstring *r,gs_sp_t b);\r
72 void avg_udaf_hfta_HFTA_AGGR_DESTROY_(gs_sp_t b);\r
73 \r
74 //              Extraction function\r
75 gs_float_t extr_avg_fcn(vstring *v);\r
76 \r
77 //      first aggregate\r
78 // hfta only\r
79 void FIRST_HFTA_AGGR_INIT_(gs_uint32_t* scratch);\r
80 void FIRST_HFTA_AGGR_REINIT_(gs_uint32_t* scratch);\r
81 void FIRST_HFTA_AGGR_UPDATE_(gs_uint32_t* scratch, gs_uint32_t val);\r
82 void FIRST_HFTA_AGGR_OUTPUT_(gs_uint32_t* res, gs_uint32_t* scratch);\r
83 void FIRST_HFTA_AGGR_DESTROY_(gs_uint32_t* scratch);\r
84 \r
85 void FIRST_ULL_HFTA_AGGR_INIT_(gs_uint64_t* scratch);\r
86 void FIRST_ULL_HFTA_AGGR_REINIT_(gs_uint64_t* scratch);\r
87 void FIRST_ULL_HFTA_AGGR_UPDATE_(gs_uint64_t* scratch, gs_uint64_t val);\r
88 void FIRST_ULL_HFTA_AGGR_OUTPUT_(gs_uint64_t* res, gs_uint64_t* scratch);\r
89 void FIRST_ULL_HFTA_AGGR_DESTROY_(gs_uint64_t* scratch);\r
90 \r
91 void FIRST_STR_HFTA_AGGR_INIT_(vstring* scratch);\r
92 void FIRST_STR_HFTA_AGGR_REINIT_(vstring* scratch);\r
93 void FIRST_STR_HFTA_AGGR_UPDATE_(vstring* scratch, vstring* val);\r
94 void FIRST_STR_HFTA_AGGR_OUTPUT_(vstring* res, vstring* scratch);\r
95 void FIRST_STR_HFTA_AGGR_DESTROY_(vstring* scratch);\r
96 // hfts-lfta split\r
97 void FIRST_hfta_HFTA_AGGR_INIT_(gs_uint32_t* scratch);\r
98 void FIRST_hfta_HFTA_AGGR_REINIT_(gs_uint32_t* scratch);\r
99 void FIRST_hfta_HFTA_AGGR_UPDATE_(gs_uint32_t* scratch, gs_uint32_t val);\r
100 void FIRST_hfta_HFTA_AGGR_OUTPUT_(gs_uint32_t* res, gs_uint32_t* scratch);\r
101 void FIRST_hfta_HFTA_AGGR_DESTROY_(gs_uint32_t* scratch);\r
102 \r
103 void FIRST_ULL_hfta_HFTA_AGGR_INIT_(gs_uint64_t* scratch);\r
104 void FIRST_ULL_hfta_HFTA_AGGR_REINIT_(gs_uint64_t* scratch);\r
105 void FIRST_ULL_hfta_HFTA_AGGR_UPDATE_(gs_uint64_t* scratch, gs_uint64_t val);\r
106 void FIRST_ULL_hfta_HFTA_AGGR_OUTPUT_(gs_uint64_t* res, gs_uint64_t* scratch);\r
107 void FIRST_ULL_hfta_HFTA_AGGR_DESTROY_(gs_uint64_t* scratch);\r
108 \r
109 void FIRST_STR_hfta_HFTA_AGGR_INIT_(vstring* scratch);\r
110 void FIRST_STR_hfta_HFTA_AGGR_REINIT_(vstring* scratch);\r
111 void FIRST_STR_hfta_HFTA_AGGR_UPDATE_(vstring* scratch, vstring* val);\r
112 void FIRST_STR_hfta_HFTA_AGGR_OUTPUT_(vstring* res, vstring* scratch);\r
113 void FIRST_STR_hfta_HFTA_AGGR_DESTROY_(vstring* scratch);\r
114 \r
115 //      last aggregate\r
116 //  hfta only\r
117 void LAST_HFTA_AGGR_INIT_(gs_uint32_t* scratch);\r
118 void LAST_HFTA_AGGR_REINIT_(gs_uint32_t* scratch);\r
119 void LAST_HFTA_AGGR_UPDATE_(gs_uint32_t* scratch, gs_uint32_t val);\r
120 void LAST_HFTA_AGGR_OUTPUT_(gs_uint32_t* res, gs_uint32_t* scratch);\r
121 void LAST_HFTA_AGGR_DESTROY_(gs_uint32_t* scratch);\r
122 \r
123 void LAST_ULL_HFTA_AGGR_INIT_(gs_uint64_t* scratch);\r
124 void LAST_ULL_HFTA_AGGR_REINIT_(gs_uint64_t* scratch);\r
125 void LAST_ULL_HFTA_AGGR_UPDATE_(gs_uint64_t* scratch, gs_uint64_t val);\r
126 void LAST_ULL_HFTA_AGGR_OUTPUT_(gs_uint64_t* res, gs_uint64_t* scratch);\r
127 void LAST_ULL_HFTA_AGGR_DESTROY_(gs_uint64_t* scratch);\r
128 \r
129 void LAST_STR_HFTA_AGGR_INIT_(vstring* scratch);\r
130 void LAST_STR_HFTA_AGGR_REINIT_(vstring* scratch);\r
131 void LAST_STR_HFTA_AGGR_UPDATE_(vstring* scratch, vstring* val);\r
132 void LAST_STR_HFTA_AGGR_OUTPUT_(vstring* res, vstring* scratch);\r
133 void LAST_STR_HFTA_AGGR_DESTROY_(vstring* scratch);\r
134 \r
135 // hfta/lfta split\r
136 void LAST_hfta_HFTA_AGGR_INIT_(gs_uint32_t* scratch);\r
137 void LAST_hfta_HFTA_AGGR_REINIT_(gs_uint32_t* scratch);\r
138 void LAST_hfta_HFTA_AGGR_UPDATE_(gs_uint32_t* scratch, gs_uint32_t val);\r
139 void LAST_hfta_HFTA_AGGR_OUTPUT_(gs_uint32_t* res, gs_uint32_t* scratch);\r
140 void LAST_hfta_HFTA_AGGR_DESTROY_(gs_uint32_t* scratch);\r
141 \r
142 void LAST_ULL_hfta_HFTA_AGGR_INIT_(gs_uint64_t* scratch);\r
143 void LAST_ULL_hfta_HFTA_AGGR_REINIT_(gs_uint64_t* scratch);\r
144 void LAST_ULL_hfta_HFTA_AGGR_UPDATE_(gs_uint64_t* scratch, gs_uint64_t val);\r
145 void LAST_ULL_hfta_HFTA_AGGR_OUTPUT_(gs_uint64_t* res, gs_uint64_t* scratch);\r
146 void LAST_ULL_hfta_HFTA_AGGR_DESTROY_(gs_uint64_t* scratch);\r
147 \r
148 void LAST_STR_hfta_HFTA_AGGR_INIT_(vstring* scratch);\r
149 void LAST_STR_hfta_HFTA_AGGR_REINIT_(vstring* scratch);\r
150 void LAST_STR_hfta_HFTA_AGGR_UPDATE_(vstring* scratch, vstring* val);\r
151 void LAST_STR_hfta_HFTA_AGGR_OUTPUT_(vstring* res, vstring* scratch);\r
152 void LAST_STR_hfta_HFTA_AGGR_DESTROY_(vstring* scratch);\r
153 \r
154 //              running_array_aggr aggregate\r
155 void running_array_aggr_hfta_HFTA_AGGR_INIT_(vstring* scratch);\r
156 void running_array_aggr_hfta_HFTA_AGGR_REINIT_(vstring* scratch);\r
157 void running_array_aggr_hfta_HFTA_AGGR_UPDATE_(vstring* scratch, vstring* val);\r
158 void running_array_aggr_hfta_HFTA_AGGR_OUTPUT_(vstring* res, vstring* scratch);\r
159 void running_array_aggr_hfta_HFTA_AGGR_DESTROY_(vstring* scratch);\r
160 \r
161 ////////////////////////////////////////////////////////////////\r
162 ///             Flip's sample-based quantiles\r
163 \r
164 /****************************************************************/\r
165 /* HFTA functions                                               */\r
166 /****************************************************************/\r
167 \r
168 void quant_udaf_hfta3_HFTA_AGGR_INIT_(gs_sp_t);\r
169 void quant_udaf_hfta3_HFTA_AGGR_UPDATE_(gs_sp_t, vstring *);\r
170 void quant_udaf_hfta3_HFTA_AGGR_OUTPUT_(vstring *, gs_sp_t);\r
171 void quant_udaf_hfta3_HFTA_AGGR_DESTROY_(gs_sp_t);\r
172 gs_uint32_t extr_quant_hfta3_fcn(vstring *, gs_float_t);\r
173 gs_uint32_t extr_med_hfta3_fcn(vstring *);\r
174 gs_uint32_t extr_quant_hfta3_space(vstring *);\r
175 \r
176 /****************************************************************/\r
177 /* HFTA-only functions                                          */\r
178 /****************************************************************/\r
179 void quant_udaf_hfta0_HFTA_AGGR_INIT_(gs_sp_t);\r
180 void quant_udaf_hfta0_HFTA_AGGR_UPDATE_(gs_sp_t, gs_uint32_t);\r
181 void quant_udaf_hfta0_HFTA_AGGR_OUTPUT_(vstring *, gs_sp_t);\r
182 void quant_udaf_hfta0_HFTA_AGGR_DESTROY_(gs_sp_t);\r
183 gs_uint32_t extr_quant_hfta0_fcn(vstring *, gs_float_t);\r
184 gs_uint32_t extr_med_hfta0_fcn(vstring *);\r
185 gs_uint32_t extr_quant_hfta0_space(vstring *);\r
186 \r
187 #endif\r