Add to_hex_string UDAF 39/4839/1
authorvlad shkapenyuk <vshkap@research.att.com>
Wed, 14 Oct 2020 02:13:22 +0000 (22:13 -0400)
committervlad shkapenyuk <vshkap@research.att.com>
Wed, 14 Oct 2020 02:13:22 +0000 (22:13 -0400)
Signed-off-by: vlad shkapenyuk <vshkap@research.att.com>
Change-Id: I8aa9f3165fba8efee9c46daa6039f7cd6002cd55

cfg/external_fcns.def
include/hfta/hfta_runtime_library.h
src/lib/gscphftaaux/hfta_runtime_library.cc

index 999211a..951ce35 100644 (file)
@@ -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);
index 6d15a41..69cfe03 100644 (file)
@@ -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
index c4bcc64..9d9f0b0 100644 (file)
@@ -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;c<val->length; ++c){
+               rs[2*c] = hexmap[vs[c] >> 4];
+               rs[2*c+1] = hexmap[vs[c] & 0x0f];
+       }
+
+       return 0;
+}
+
+
+