// Value
union {
+ // TD_METRIC_BOOL
+ int _bool;
+
// TD_METRIC_INT64
int64_t _int64;
case TD_METRIC_UNKNOWN:
return __td_string_set(value, length, "U");
+ case TD_METRIC_BOOL:
+ if (metric->value._bool)
+ return __td_string_set(value, length, "1");
+ else
+ return __td_string_set(value, length, "0");
+
case TD_METRIC_INT64:
return __td_string_format(value, length, "%ld", metric->value._int64);
case TD_METRIC_UNKNOWN:
break;
+ case TD_METRIC_BOOL:
+ metric->value._bool = *(int*)value;
+ break;
+
case TD_METRIC_INT64:
metric->value._int64 = *(int64_t*)value;
break;
return 0;
}
+int td_metrics_push_bool(td_metrics* self, const char* field, int value) {
+ return td_metrics_push_value(self, field, TD_METRIC_BOOL, &value);
+}
+
int td_metrics_push_int64(td_metrics* self, const char* field, int64_t value) {
return td_metrics_push_value(self, field, TD_METRIC_INT64, &value);
}
bytes_written = snprintf(p, bytes_left, ":U");
break;
+ case TD_METRIC_BOOL:
+ bytes_written = snprintf(p, bytes_left, ":%c", (metric->value._bool) ? '1' : '0');
+ break;
+
case TD_METRIC_INT64:
bytes_written = snprintf(p, bytes_left, ":%ld", metric->value._int64);
break;
typedef enum td_metric_type {
TD_METRIC_UNKNOWN = 0,
+ TD_METRIC_BOOL,
TD_METRIC_INT64,
TD_METRIC_UINT64,
TD_METRIC_FLOAT,
#define VALUES(...) ((const td_metric_value[]) { __VA_ARGS__, { NULL } })
#define VALUE(field, type, value) { field, type, value }
+#define VALUE_BOOL(field, value) VALUE(field, TD_METRIC_BOOL, value)
#define VALUE_INT64(field, value) VALUE(field, TD_METRIC_INT64, value)
#define VALUE_UINT64(field, value) VALUE(field, TD_METRIC_UINT64, value)
#define VALUE_FLOAT(field, value) VALUE(field, TD_METRIC_FLOAT, value)
int td_metrics_dump(td_metrics* self);
+int td_metrics_push_bool(td_metrics* self, const char* field, int value);
int td_metrics_push_int64(td_metrics* self, const char* field, int64_t value);
int td_metrics_push_uint64(td_metrics* self, const char* field, uint64_t value);
int td_metrics_push_float(td_metrics* self, const char* field, double value);