mirror of https://github.com/mpv-player/mpv
misc/node: add bstr-based variants for map_get() and map_add()
This commit is contained in:
parent
fa7202d9f2
commit
3b2b47e32a
15
misc/node.c
15
misc/node.c
|
@ -45,12 +45,18 @@ struct mpv_node *node_array_add(struct mpv_node *dst, int format)
|
||||||
struct mpv_node *node_map_add(struct mpv_node *dst, const char *key, int format)
|
struct mpv_node *node_map_add(struct mpv_node *dst, const char *key, int format)
|
||||||
{
|
{
|
||||||
assert(key);
|
assert(key);
|
||||||
|
return node_map_badd(dst, bstr0(key), format);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct mpv_node *node_map_badd(struct mpv_node *dst, struct bstr key, int format)
|
||||||
|
{
|
||||||
|
assert(key.start);
|
||||||
|
|
||||||
struct mpv_node_list *list = dst->u.list;
|
struct mpv_node_list *list = dst->u.list;
|
||||||
assert(dst->format == MPV_FORMAT_NODE_MAP && dst->u.list);
|
assert(dst->format == MPV_FORMAT_NODE_MAP && dst->u.list);
|
||||||
MP_TARRAY_GROW(list, list->values, list->num);
|
MP_TARRAY_GROW(list, list->values, list->num);
|
||||||
MP_TARRAY_GROW(list, list->keys, list->num);
|
MP_TARRAY_GROW(list, list->keys, list->num);
|
||||||
list->keys[list->num] = talloc_strdup(list, key);
|
list->keys[list->num] = bstrdup0(list, key);
|
||||||
node_init(&list->values[list->num], format, dst);
|
node_init(&list->values[list->num], format, dst);
|
||||||
return &list->values[list->num++];
|
return &list->values[list->num++];
|
||||||
}
|
}
|
||||||
|
@ -83,12 +89,17 @@ void node_map_add_flag(struct mpv_node *dst, const char *key, bool v)
|
||||||
}
|
}
|
||||||
|
|
||||||
mpv_node *node_map_get(mpv_node *src, const char *key)
|
mpv_node *node_map_get(mpv_node *src, const char *key)
|
||||||
|
{
|
||||||
|
return node_map_bget(src, bstr0(key));
|
||||||
|
}
|
||||||
|
|
||||||
|
mpv_node *node_map_bget(mpv_node *src, struct bstr key)
|
||||||
{
|
{
|
||||||
if (src->format != MPV_FORMAT_NODE_MAP)
|
if (src->format != MPV_FORMAT_NODE_MAP)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
for (int i = 0; i < src->u.list->num; i++) {
|
for (int i = 0; i < src->u.list->num; i++) {
|
||||||
if (strcmp(key, src->u.list->keys[i]) == 0)
|
if (bstr_equals0(key, src->u.list->keys[i]))
|
||||||
return &src->u.list->values[i];
|
return &src->u.list->values[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,15 +2,18 @@
|
||||||
#define MP_MISC_NODE_H_
|
#define MP_MISC_NODE_H_
|
||||||
|
|
||||||
#include "libmpv/client.h"
|
#include "libmpv/client.h"
|
||||||
|
#include "misc/bstr.h"
|
||||||
|
|
||||||
void node_init(struct mpv_node *dst, int format, struct mpv_node *parent);
|
void node_init(struct mpv_node *dst, int format, struct mpv_node *parent);
|
||||||
struct mpv_node *node_array_add(struct mpv_node *dst, int format);
|
struct mpv_node *node_array_add(struct mpv_node *dst, int format);
|
||||||
struct mpv_node *node_map_add(struct mpv_node *dst, const char *key, int format);
|
struct mpv_node *node_map_add(struct mpv_node *dst, const char *key, int format);
|
||||||
|
struct mpv_node *node_map_badd(struct mpv_node *dst, struct bstr key, int format);
|
||||||
void node_map_add_string(struct mpv_node *dst, const char *key, const char *val);
|
void node_map_add_string(struct mpv_node *dst, const char *key, const char *val);
|
||||||
void node_map_add_int64(struct mpv_node *dst, const char *key, int64_t v);
|
void node_map_add_int64(struct mpv_node *dst, const char *key, int64_t v);
|
||||||
void node_map_add_double(struct mpv_node *dst, const char *key, double v);
|
void node_map_add_double(struct mpv_node *dst, const char *key, double v);
|
||||||
void node_map_add_flag(struct mpv_node *dst, const char *key, bool v);
|
void node_map_add_flag(struct mpv_node *dst, const char *key, bool v);
|
||||||
mpv_node *node_map_get(mpv_node *src, const char *key);
|
mpv_node *node_map_get(mpv_node *src, const char *key);
|
||||||
|
mpv_node *node_map_bget(mpv_node *src, struct bstr key);
|
||||||
bool equal_mpv_value(const void *a, const void *b, mpv_format format);
|
bool equal_mpv_value(const void *a, const void *b, mpv_format format);
|
||||||
bool equal_mpv_node(const struct mpv_node *a, const struct mpv_node *b);
|
bool equal_mpv_node(const struct mpv_node *a, const struct mpv_node *b);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue