gs_float_t extr_avg_fcn(vstring *v);
// first aggregate
+// hfta only
+void FIRST_HFTA_AGGR_INIT_(gs_uint32_t* scratch);
+void FIRST_HFTA_AGGR_REINIT_(gs_uint32_t* scratch);
+void FIRST_HFTA_AGGR_UPDATE_(gs_uint32_t* scratch, gs_uint32_t val);
+void FIRST_HFTA_AGGR_OUTPUT_(gs_uint32_t* res, gs_uint32_t* scratch);
+void FIRST_HFTA_AGGR_DESTROY_(gs_uint32_t* scratch);
+
+void FIRST_HFTA_AGGR_INIT_(gs_uint64_t* scratch);
+void FIRST_HFTA_AGGR_REINIT_(gs_uint64_t* scratch);
+void FIRST_HFTA_AGGR_UPDATE_(gs_uint64_t* scratch, gs_uint64_t val);
+void FIRST_HFTA_AGGR_OUTPUT_(gs_uint64_t* res, gs_uint64_t* scratch);
+void FIRST_HFTA_AGGR_DESTROY_(gs_uint64_t* scratch);
+
+
+void FIRST_ULL_HFTA_AGGR_INIT_(gs_uint64_t* scratch);
+void FIRST_ULL_HFTA_AGGR_REINIT_(gs_uint64_t* scratch);
+void FIRST_ULL_HFTA_AGGR_UPDATE_(gs_uint64_t* scratch, gs_uint64_t val);
+void FIRST_ULL_HFTA_AGGR_OUTPUT_(gs_uint64_t* res, gs_uint64_t* scratch);
+void FIRST_ULL_HFTA_AGGR_DESTROY_(gs_uint64_t* scratch);
+
+void FIRST_STR_HFTA_AGGR_INIT_(vstring* scratch);
+void FIRST_STR_HFTA_AGGR_REINIT_(vstring* scratch);
+void FIRST_STR_HFTA_AGGR_UPDATE_(vstring* scratch, vstring* val);
+void FIRST_STR_HFTA_AGGR_OUTPUT_(vstring* res, vstring* scratch);
+void FIRST_STR_HFTA_AGGR_DESTROY_(vstring* scratch);
+// hfts-lfta split
void FIRST_hfta_HFTA_AGGR_INIT_(gs_uint32_t* scratch);
void FIRST_hfta_HFTA_AGGR_REINIT_(gs_uint32_t* scratch);
void FIRST_hfta_HFTA_AGGR_UPDATE_(gs_uint32_t* scratch, gs_uint32_t val);
void FIRST_STR_hfta_HFTA_AGGR_DESTROY_(vstring* scratch);
// last aggregate
+// hfta only
+void LAST_HFTA_AGGR_INIT_(gs_uint32_t* scratch);
+void LAST_HFTA_AGGR_REINIT_(gs_uint32_t* scratch);
+void LAST_HFTA_AGGR_UPDATE_(gs_uint32_t* scratch, gs_uint32_t val);
+void LAST_HFTA_AGGR_OUTPUT_(gs_uint32_t* res, gs_uint32_t* scratch);
+void LAST_HFTA_AGGR_DESTROY_(gs_uint32_t* scratch);
+
+void LAST_HFTA_AGGR_INIT_(gs_uint64_t* scratch);
+void LAST_HFTA_AGGR_REINIT_(gs_uint64_t* scratch);
+void LAST_HFTA_AGGR_UPDATE_(gs_uint64_t* scratch, gs_uint64_t val);
+void LAST_HFTA_AGGR_OUTPUT_(gs_uint64_t* res, gs_uint64_t* scratch);
+void LAST_HFTA_AGGR_DESTROY_(gs_uint64_t* scratch);
+
+void LAST_ULL_HFTA_AGGR_INIT_(gs_uint64_t* scratch);
+void LAST_ULL_HFTA_AGGR_REINIT_(gs_uint64_t* scratch);
+void LAST_ULL_HFTA_AGGR_UPDATE_(gs_uint64_t* scratch, gs_uint64_t val);
+void LAST_ULL_HFTA_AGGR_OUTPUT_(gs_uint64_t* res, gs_uint64_t* scratch);
+void LAST_ULL_HFTA_AGGR_DESTROY_(gs_uint64_t* scratch);
+
+void LAST_STR_HFTA_AGGR_INIT_(vstring* scratch);
+void LAST_STR_HFTA_AGGR_REINIT_(vstring* scratch);
+void LAST_STR_HFTA_AGGR_UPDATE_(vstring* scratch, vstring* val);
+void LAST_STR_HFTA_AGGR_OUTPUT_(vstring* res, vstring* scratch);
+void LAST_STR_HFTA_AGGR_DESTROY_(vstring* scratch);
+
+// hfta/lfta split
void LAST_hfta_HFTA_AGGR_INIT_(gs_uint32_t* scratch);
void LAST_hfta_HFTA_AGGR_REINIT_(gs_uint32_t* scratch);
void LAST_hfta_HFTA_AGGR_UPDATE_(gs_uint32_t* scratch, gs_uint32_t val);
void running_array_aggr_hfta_HFTA_AGGR_OUTPUT_(vstring* res, vstring* scratch);
void running_array_aggr_hfta_HFTA_AGGR_DESTROY_(vstring* scratch);
+////////////////////////////////////////////////////////////////
+/// Flip's sample-based quantiles
+
+/****************************************************************/
+/* HFTA functions */
+/****************************************************************/
+
+void quant_udaf_hfta3_HFTA_AGGR_INIT_(gs_sp_t);
+void quant_udaf_hfta3_HFTA_AGGR_UPDATE_(gs_sp_t, vstring *);
+void quant_udaf_hfta3_HFTA_AGGR_OUTPUT_(vstring *, gs_sp_t);
+void quant_udaf_hfta3_HFTA_AGGR_DESTROY_(gs_sp_t);
+gs_uint32_t extr_quant_hfta3_fcn(vstring *, gs_float_t);
+gs_uint32_t extr_med_hfta3_fcn(vstring *);
+gs_uint32_t extr_quant_hfta3_space(vstring *);
+
+/****************************************************************/
+/* HFTA-only functions */
+/****************************************************************/
+void quant_udaf_hfta0_HFTA_AGGR_INIT_(gs_sp_t);
+void quant_udaf_hfta0_HFTA_AGGR_UPDATE_(gs_sp_t, gs_uint32_t);
+void quant_udaf_hfta0_HFTA_AGGR_OUTPUT_(vstring *, gs_sp_t);
+void quant_udaf_hfta0_HFTA_AGGR_DESTROY_(gs_sp_t);
+gs_uint32_t extr_quant_hfta0_fcn(vstring *, gs_float_t);
+gs_uint32_t extr_med_hfta0_fcn(vstring *);
+gs_uint32_t extr_quant_hfta0_space(vstring *);
#endif