Add bool type to htsmsg + json parser

This commit is contained in:
Andreas Öman 2013-02-07 23:42:25 +01:00
parent 6f6f422bdf
commit 302319220a
3 changed files with 46 additions and 1 deletions

View file

@ -176,6 +176,16 @@ htsmsg_destroy(htsmsg_t *msg)
free(msg);
}
/*
*
*/
void
htsmsg_add_bool(htsmsg_t *msg, const char *name, int b)
{
htsmsg_field_t *f = htsmsg_field_add(msg, name, HMF_BOOL, HMF_NAME_ALLOCED);
f->hmf_bool = !!b;
}
/*
*
*/
@ -313,6 +323,9 @@ htsmsg_get_s64(htsmsg_t *msg, const char *name, int64_t *s64p)
case HMF_S64:
*s64p = f->hmf_s64;
break;
case HMF_BOOL:
*s64p = f->hmf_bool;
break;
case HMF_DBL:
*s64p = f->hmf_dbl;
break;
@ -321,6 +334,17 @@ htsmsg_get_s64(htsmsg_t *msg, const char *name, int64_t *s64p)
}
/**
*
*/
int
htsmsg_get_bool_or_default(htsmsg_t *msg, const char *name, int def)
{
int64_t s64;
return htsmsg_get_s64(msg, name, &s64) ? def : s64;
}
/**
*
*/
@ -598,6 +622,10 @@ htsmsg_print0(htsmsg_t *msg, int indent)
printf("S64) = %" PRId64 "\n", f->hmf_s64);
break;
case HMF_BOOL:
printf("BOOL) = %s\n", f->hmf_bool ? "true" : "false");
break;
case HMF_DBL:
printf("DBL) = %f\n", f->hmf_dbl);
break;
@ -644,6 +672,10 @@ htsmsg_copy_i(htsmsg_t *src, htsmsg_t *dst)
htsmsg_add_s64(dst, f->hmf_name, f->hmf_s64);
break;
case HMF_BOOL:
htsmsg_add_bool(dst, f->hmf_name, f->hmf_bool);
break;
case HMF_BIN:
htsmsg_add_bin(dst, f->hmf_name, f->hmf_bin, f->hmf_binsize);
break;

View file

@ -50,6 +50,7 @@ typedef struct htsmsg {
#define HMF_BIN 4
#define HMF_LIST 5
#define HMF_DBL 6
#define HMF_BOOL 7
typedef struct htsmsg_field {
TAILQ_ENTRY(htsmsg_field) hmf_link;
@ -69,6 +70,7 @@ typedef struct htsmsg_field {
} bin;
htsmsg_t msg;
double dbl;
int bool;
} u;
} htsmsg_field_t;
@ -78,6 +80,7 @@ typedef struct htsmsg_field {
#define hmf_bin u.bin.data
#define hmf_binsize u.bin.len
#define hmf_dbl u.dbl
#define hmf_bool u.bool
#define htsmsg_get_map_by_field(f) \
((f)->hmf_type == HMF_MAP ? &(f)->hmf_msg : NULL)
@ -106,6 +109,8 @@ void htsmsg_field_destroy(htsmsg_t *msg, htsmsg_field_t *f);
*/
void htsmsg_destroy(htsmsg_t *msg);
void htsmsg_add_bool(htsmsg_t *msg, const char *name, int b);
/**
* Add an integer field where source is unsigned 32 bit.
*/
@ -190,6 +195,8 @@ int htsmsg_get_s64(htsmsg_t *msg, const char *name, int64_t *s64p);
*/
int64_t htsmsg_get_s64_or_default(htsmsg_t *msg, const char *name, int64_t def);
int htsmsg_get_bool_or_default(htsmsg_t *msg, const char *name, int def);
/**
* Get pointer to a binary field. No copying of data is performed.

View file

@ -39,6 +39,7 @@ htsmsg_json_write(htsmsg_t *msg, htsbuf_queue_t *hq, int isarray,
htsmsg_field_t *f;
char buf[100];
static const char *indentor = "\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t";
const char *s;
htsbuf_append(hq, isarray ? "[" : "{", 1);
@ -69,6 +70,11 @@ htsmsg_json_write(htsmsg_t *msg, htsbuf_queue_t *hq, int isarray,
htsbuf_append_and_escape_jsonstr(hq, "binary");
break;
case HMF_BOOL:
s = f->hmf_bool ? "true" : "false";
htsbuf_append(hq, s, strlen(s));
break;
case HMF_S64:
snprintf(buf, sizeof(buf), "%" PRId64, f->hmf_s64);
htsbuf_append(hq, buf, strlen(buf));
@ -169,7 +175,7 @@ add_double(void *opaque, void *parent, const char *name, double v)
static void
add_bool(void *opaque, void *parent, const char *name, int v)
{
htsmsg_add_u32(parent, name, v);
htsmsg_add_bool(parent, name, v);
}
static void