From c4039d355598c9fabbdcc7ef5a663571ef40211d Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Sat, 15 May 2021 19:55:22 +0100 Subject: Treebuilder: Allow element_type_from_name to be inlined. Now it is mostly a wrapper for the gperf-generated hubbub_element_type_lookup. This reduces total instruction fetch cost from 4,523,112,517 to 4,511,919,445. --- src/treebuilder/element-type.h | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'src/treebuilder/element-type.h') diff --git a/src/treebuilder/element-type.h b/src/treebuilder/element-type.h index 08f58de..a8e33d9 100644 --- a/src/treebuilder/element-type.h +++ b/src/treebuilder/element-type.h @@ -9,6 +9,7 @@ #define hubbub_treebuilder_element_type_h_ #include "treebuilder/treebuilder.h" +#include "utils/utils.h" typedef enum { @@ -41,9 +42,34 @@ struct element_type_map { element_type type; }; +/* Generated by gperf */ const struct element_type_map *hubbub_element_type_lookup( register const char *str, register size_t len); +/** + * Convert an element name into an element type + * + * \param treebuilder The treebuilder instance + * \param tag_name The tag name to consider + * \return The corresponding element type + */ +static inline element_type element_type_from_name( + hubbub_treebuilder *treebuilder, + const hubbub_string *tag_name) +{ + const struct element_type_map *value; + + UNUSED(treebuilder); + + value = hubbub_element_type_lookup((const char *)tag_name->ptr, + tag_name->len); + if (value == NULL) { + return UNKNOWN; + } + + return value->type; +} + #endif -- cgit v1.2.3