From 682b499279dbba5469280010b6191b13e3370b70 Mon Sep 17 00:00:00 2001 From: "xiang.zhou" Date: Thu, 13 Jun 2024 13:59:47 +0800 Subject: [PATCH] display optimization for float and double types when setting bias --- include/neuron/json/json.h | 1 + include/neuron/json/neu_json_rw.h | 1 + include/neuron/msg.h | 3 +++ src/adapter/driver/driver.c | 13 ++++++++++--- src/parser/neu_json_rw.c | 3 +++ src/utils/json.c | 4 ++-- 6 files changed, 20 insertions(+), 5 deletions(-) diff --git a/include/neuron/json/json.h b/include/neuron/json/json.h index 9dcc62d6..d351df28 100644 --- a/include/neuron/json/json.h +++ b/include/neuron/json/json.h @@ -68,6 +68,7 @@ typedef struct neu_json_elem { enum neu_json_type t; union neu_json_value v; uint8_t precision; + double bias; } neu_json_elem_t; #define NEU_JSON_ELEM_SIZE(elems) sizeof(elems) / sizeof(neu_json_elem_t) diff --git a/include/neuron/json/neu_json_rw.h b/include/neuron/json/neu_json_rw.h index 0642fab3..0ecabf39 100644 --- a/include/neuron/json/neu_json_rw.h +++ b/include/neuron/json/neu_json_rw.h @@ -53,6 +53,7 @@ typedef struct { uint8_t precision; int n_meta; neu_json_tag_meta_t *metas; + neu_datatag_t datatag; } neu_json_read_resp_tag_t; typedef struct { diff --git a/include/neuron/msg.h b/include/neuron/msg.h index 41ba6937..a09b23e2 100644 --- a/include/neuron/msg.h +++ b/include/neuron/msg.h @@ -670,6 +670,7 @@ typedef struct neu_resp_tag_value_meta { char tag[NEU_TAG_NAME_LEN]; neu_dvalue_t value; neu_tag_meta_t metas[NEU_TAG_META_SIZE]; + neu_datatag_t datatag; } neu_resp_tag_value_meta_t; static inline UT_icd *neu_resp_tag_value_meta_icd() @@ -872,6 +873,8 @@ static inline void neu_tag_value_to_json(neu_resp_tag_value_meta_t *tag_value, } neu_json_metas_to_json(tag_value->metas, NEU_TAG_META_SIZE, tag_json); + tag_json->datatag.bias = tag_value->datatag.bias; + switch (tag_value->value.type) { case NEU_TYPE_ERROR: tag_json->t = NEU_JSON_INT; diff --git a/src/adapter/driver/driver.c b/src/adapter/driver/driver.c index b1aa2289..9211cc7e 100644 --- a/src/adapter/driver/driver.c +++ b/src/adapter/driver/driver.c @@ -2119,6 +2119,8 @@ static void read_report_group(int64_t timestamp, int64_t timeout, } strcpy(tag_value.tag, tag->name); + tag_value.datatag.bias = tag->bias; + if (value.value.type == NEU_TYPE_ERROR) { tag_value.value = value.value; @@ -2255,7 +2257,8 @@ static void read_report_group(int64_t timestamp, int64_t timeout, break; } } - if (tag->precision == 0 && tag->type == NEU_TYPE_DOUBLE) { + if (tag->precision == 0 && tag->bias == 0 && + tag->type == NEU_TYPE_DOUBLE) { format_tag_value(&tag_value.value); } } @@ -2276,6 +2279,8 @@ static void read_group(int64_t timestamp, int64_t timeout, strcpy(tag_value.tag, tag->name); + tag_value.datatag.bias = tag->bias; + if (neu_driver_cache_meta_get(cache, group, tag->name, &value, tag_value.metas, NEU_TAG_META_SIZE) != 0) { @@ -2416,7 +2421,8 @@ static void read_group(int64_t timestamp, int64_t timeout, } } - if (tag->precision == 0 && tag->type == NEU_TYPE_DOUBLE) { + if (tag->precision == 0 && tag->bias == 0 && + tag->type == NEU_TYPE_DOUBLE) { format_tag_value(&tag_value.value); } } @@ -2587,7 +2593,8 @@ static void read_group_paginate(int64_t timestamp, int64_t timeout, } } - if (tag->precision == 0 && tag->type == NEU_TYPE_DOUBLE) { + if (tag->precision == 0 && tag->bias == 0 && + tag->type == NEU_TYPE_DOUBLE) { format_tag_value(&tag_value.value); } } diff --git a/src/parser/neu_json_rw.c b/src/parser/neu_json_rw.c index fc1db7ec..d61e247d 100644 --- a/src/parser/neu_json_rw.c +++ b/src/parser/neu_json_rw.c @@ -59,6 +59,7 @@ int neu_json_encode_read_resp(void *json_object, void *param) tag_elems[1].t = p_tag->t; tag_elems[1].v = p_tag->value; tag_elems[1].precision = p_tag->precision; + tag_elems[1].bias = p_tag->datatag.bias; if (p_tag->t == NEU_JSON_FLOAT || p_tag->t == NEU_JSON_DOUBLE) { if_precision = 1; @@ -145,6 +146,7 @@ int neu_json_encode_read_paginate_resp(void *json_object, void *param) tag_elems[8].t = p_tag->t; tag_elems[8].v = p_tag->value; tag_elems[8].precision = p_tag->precision; + tag_elems[8].bias = p_tag->datatag.bias; if (p_tag->t == NEU_JSON_FLOAT || p_tag->t == NEU_JSON_DOUBLE) { if_precision = 1; @@ -235,6 +237,7 @@ int neu_json_encode_read_resp1(void *json_object, void *param) tag_elem.t = p_tag->t; tag_elem.v = p_tag->value; tag_elem.precision = p_tag->precision; + tag_elem.bias = p_tag->datatag.bias; neu_json_encode_field(values, &tag_elem, 1); } else { tag_elem.name = p_tag->name; diff --git a/src/utils/json.c b/src/utils/json.c index b92dc197..36fc6be2 100644 --- a/src/utils/json.c +++ b/src/utils/json.c @@ -83,7 +83,7 @@ static json_t *encode_object_value(neu_json_elem_t *ele) break; case NEU_JSON_FLOAT: { double t = ele->v.val_float; - if (ele->precision == 0) { + if (ele->precision == 0 && ele->bias == 0) { t = format_tag_value(ele->v.val_float); } ob = json_realp(t, ele->precision); @@ -115,7 +115,7 @@ static json_t *encode_object(json_t *object, neu_json_elem_t ele) break; case NEU_JSON_FLOAT: { double t = ele.v.val_float; - if (ele.precision == 0) { + if (ele.precision == 0 && ele.bias == 0) { t = format_tag_value(ele.v.val_float); } json_object_set_new(ob, ele.name, json_realp(t, ele.precision));