From 989d19428b3d21982b048cf256f625a8ca664c2e Mon Sep 17 00:00:00 2001 From: vlad shkapenyuk Date: Tue, 13 Oct 2020 22:13:22 -0400 Subject: [PATCH] Add to_hex_string UDAF Signed-off-by: vlad shkapenyuk Change-Id: I8aa9f3165fba8efee9c46daa6039f7cd6002cd55 --- cfg/external_fcns.def | 4 ++++ include/hfta/hfta_runtime_library.h | 3 +++ src/lib/gscphftaaux/hfta_runtime_library.cc | 24 ++++++++++++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/cfg/external_fcns.def b/cfg/external_fcns.def index 999211a..951ce35 100644 --- a/cfg/external_fcns.def +++ b/cfg/external_fcns.def @@ -749,3 +749,7 @@ uint FUN [LFTA_LEGAL, COST EXPENSIVE] string UDAF [HFTA_ONLY, RUNNING] run_sum_max fstring16 (ullong); string UDAF [HFTA_ONLY, RUNNING] run_sum_max fstring16 (llong); +// ------------------------------------------------------------ +// to_hex_string : allow printing of binary strings + + string FUN [HFTA_ONLY, COST EXPENSIVE] to_hex_string(string); diff --git a/include/hfta/hfta_runtime_library.h b/include/hfta/hfta_runtime_library.h index 6d15a41..69cfe03 100644 --- a/include/hfta/hfta_runtime_library.h +++ b/include/hfta/hfta_runtime_library.h @@ -137,5 +137,8 @@ gs_param_handle_t register_handle_for_int_to_string_map_slot_1(vstring *filename gs_retval_t int_to_string_map(vstring *result, gs_int64_t val, gs_param_handle_t handle); gs_param_handle_t deregister_handle_for_int_to_string_map_slot_1(gs_param_handle_t handle); +// -------------------------------------------------- +// to_hex_string, for printing a binary string +gs_retval_t to_hex_string(vstring *result, vstring *val); #endif diff --git a/src/lib/gscphftaaux/hfta_runtime_library.cc b/src/lib/gscphftaaux/hfta_runtime_library.cc index c4bcc64..9d9f0b0 100644 --- a/src/lib/gscphftaaux/hfta_runtime_library.cc +++ b/src/lib/gscphftaaux/hfta_runtime_library.cc @@ -661,3 +661,27 @@ gs_param_handle_t deregister_handle_for_int_to_string_map_slot_1(gs_param_handle delete map_struct; } +// --------------------------------------------------- +// Return a (binary, non-ascii) string in its hex representation + +static char hexmap[16] = { + '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' +}; + +gs_retval_t to_hex_string(vstring *result, vstring *val){ + result->length = 2*(val->length); + result->offset = (gs_p_t)malloc(result->length); + result->reserved = INTERNAL; + unsigned char *rs = (unsigned char *)(result->offset); + unsigned char *vs = (unsigned char *)(val->offset); + + for(int c=0;clength; ++c){ + rs[2*c] = hexmap[vs[c] >> 4]; + rs[2*c+1] = hexmap[vs[c] & 0x0f]; + } + + return 0; +} + + + -- 2.16.6