[tarantool-patches] [PATCH v5 05/12] lib: implement JSON tree class for json library

Konstantin Osipov kostja at tarantool.org
Thu Nov 1 18:08:54 MSK 2018


* Kirill Shcherbatov <kshcherbatov at tarantool.org> [18/10/29 20:25]:
> +	mh_int_t id = mh_json_tree_node_find(tree->hash, &info, NULL);
> +	if (unlikely(id == mh_end(tree->hash)))
> +		return NULL;
> +	struct mh_json_tree_node *ht_node =
> +		mh_json_tree_node_node(tree->hash, id);

This is hard to read. It's hard to see whether it's a hash lookup
or a tree lookup. Let's perhaps rename mh_node_t to mh_entry_t.

Even more confusing is json_path_node and json_tree_node. 
Let's take time to come up with better names.


> +json_tree_lookup_by_path(struct json_tree *tree, struct json_tree_node *parent,
> +			 const char *path, uint32_t path_len)

This function could be called simply json_tree_lookup().

> +	struct json_tree_node **arr = parent->children;
> +	uint32_t arr_size = parent->children_count;

child_count.

> +struct json_tree_node *
> +json_tree_next_pre(struct json_tree_node *parent, struct json_tree_node *pos)

I would call it preorder/postorder to avoid confusion between pre
and prev.

> +struct json_tree_node *
> +json_tree_next_post(struct json_tree_node *parent, struct json_tree_node *pos)

json_tree_postorder_next

> +/** Compute the hash value of a JSON path component. */
> +uint32_t
> +json_path_node_hash(struct json_path_node *key, uint32_t seed);

This is json_path_fragment or json_path_segment.

> +#define json_tree_entry(item, type, member) ({				     \
> +	const typeof( ((type *)0)->member ) *__mptr = (item);		     \
> +	(type *)( (char *)__mptr - ((size_t) &((type *)0)->member) ); })

> +
> +/** Return entry by json_tree_node item or NULL if item is NULL.*/
> +#define json_tree_entry_safe(item, type, member) ({			     \
> +	(item) != NULL ? json_tree_entry((item), type, member) : NULL; })

What is a node item? I'm in hell.

-- 
Konstantin Osipov, Moscow, Russia, +7 903 626 22 32
http://tarantool.io - www.twitter.com/kostja_osipov



More information about the Tarantool-patches mailing list