X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Flib%2Fgscphftaaux%2Fhfta_udaf.cc;h=a5ff5cba31602aa232c9bd45a66e2448ec398010;hb=2bc6bde491e4ae54fb54302c052f23a98482eb92;hp=60ae7501eae769e9e08fe9d28d94700262ea92db;hpb=87cd81502f23b63c980bbce93b6159379299c782;p=com%2Fgs-lite.git diff --git a/src/lib/gscphftaaux/hfta_udaf.cc b/src/lib/gscphftaaux/hfta_udaf.cc index 60ae750..a5ff5cb 100644 --- a/src/lib/gscphftaaux/hfta_udaf.cc +++ b/src/lib/gscphftaaux/hfta_udaf.cc @@ -667,7 +667,7 @@ void count_diff_hfta_HFTA_AGGR_DESTROY_(gs_sp_t scratch){ } // running_array_aggr aggregate void running_array_aggr_hfta_HFTA_AGGR_INIT_(vstring* scratch) { - scratch->offset = NULL; + scratch->offset = (gs_p_t)NULL; scratch->length = 0; } @@ -743,12 +743,12 @@ void CAT_aggr_HFTA_AGGR_REINIT_(gs_sp_t s){ v->val=""; } void CAT_aggr_HFTA_AGGR_UPDATE_(gs_sp_t s, vstring *sep, vstring *str){ -char buf1[MAXTUPLESZ-20], buf2[MAXTUPLESZ-20]; -int i; -for(i=0;ilength;++i) buf1[i] = *(((char *)sep->offset)+i); -buf1[i]='\0'; -for(i=0;ilength;++i) buf2[i] = *(((char *)str->offset)+i); -buf2[i]='\0'; +//char buf1[MAXTUPLESZ-20], buf2[MAXTUPLESZ-20]; +//int i; +//for(i=0;ilength;++i) buf1[i] = *(((char *)sep->offset)+i); +//buf1[i]='\0'; +//for(i=0;ilength;++i) buf2[i] = *(((char *)str->offset)+i); +//buf2[i]='\0'; CAT_aggr_scratch_ptr *p = (CAT_aggr_scratch_ptr *)s; CAT_aggr_scratch *v = p->ptr; if(v->val.size()>0) @@ -925,6 +925,77 @@ gs_int64_t extr_running_sum_max(vstring *v){ return vs->max; } + +// --------------------------------------------- +// aggr_diff : from a sequence of strings, collect +// the ones which are different than the previous. +// this includes the prior time period. +// the idea is to see the sequence of handovers + +struct CAT_aggr_diff_scratch{ + std::string val; + std::string prev_s; +// gs_int64_t prev_ts; // for now, just catenate strings +}; + +struct CAT_aggr_diff_scratch_ptr{ + CAT_aggr_diff_scratch *ptr; +}; + + + +void CAT_aggr_diff_HFTA_AGGR_INIT_(gs_sp_t s){ + CAT_aggr_diff_scratch_ptr *p = (CAT_aggr_diff_scratch_ptr *)s; + CAT_aggr_diff_scratch *v = new CAT_aggr_diff_scratch(); + v->prev_s = ""; + v->val = ""; + + p->ptr = v; +} +void CAT_aggr_diff_HFTA_AGGR_REINIT_(gs_sp_t s){ + CAT_aggr_diff_scratch_ptr *p = (CAT_aggr_diff_scratch_ptr *)s; + CAT_aggr_diff_scratch *v = p->ptr; + v->val=v->prev_s; +} +void CAT_aggr_diff_HFTA_AGGR_UPDATE_(gs_sp_t s, vstring *str){ + char str_buf[MAXTUPLESZ-20]; + int i; + for(i=0;ilength;++i) str_buf[i] = *(((char *)str->offset)+i); + str_buf[i]='\0'; + + CAT_aggr_diff_scratch_ptr *p = (CAT_aggr_diff_scratch_ptr *)s; + CAT_aggr_diff_scratch *v = p->ptr; + if(str_buf != v->prev_s){ + if(v->val.size()>0) + v->val += ':'; + v->val += str_buf; + v->prev_s = str_buf; + } +} + +void CAT_aggr_diff_HFTA_AGGR_OUTPUT_(vstring *res, gs_sp_t s){ + CAT_aggr_diff_scratch_ptr *p = (CAT_aggr_diff_scratch_ptr *)s; + CAT_aggr_diff_scratch *v = p->ptr; +//printf("output val=%s\n",v->val.c_str()); + res->offset = (gs_p_t)malloc(v->val.size()); + res->length = v->val.size(); + if(res->length>MAXTUPLESZ-20) + res->length=MAXTUPLESZ-20; +// v->val.copy((char *)(res->offset), 0, res->length); + const char *dat = v->val.c_str(); + memcpy((char *)(res->offset), dat, res->length); +// for(int i=0;ilength;++i) +// *(((char *)res->offset)+i) = dat[i]; + res->reserved = INTERNAL; +} +void CAT_aggr_diff_HFTA_AGGR_DESTROY_(gs_sp_t s){ + CAT_aggr_diff_scratch_ptr *p = (CAT_aggr_diff_scratch_ptr *)s; + CAT_aggr_diff_scratch *v = p->ptr; + delete v; +} + + + // --------------------------------------------- // Approximate count distinct. // Rely on the minhashing approach.