diff options
author | Michael Drake <michael.drake@codethink.co.uk> | 2021-05-15 19:55:22 +0100 |
---|---|---|
committer | Michael Drake <michael.drake@codethink.co.uk> | 2021-05-15 19:59:24 +0100 |
commit | c4039d355598c9fabbdcc7ef5a663571ef40211d (patch) | |
tree | 00f830a13e08c56c1cbecddaf4e21918fa89b391 | |
parent | 4de031adb16019295d67fe02e515f9982b32a74b (diff) | |
download | libhubbub-c4039d355598c9fabbdcc7ef5a663571ef40211d.tar.gz libhubbub-c4039d355598c9fabbdcc7ef5a663571ef40211d.tar.bz2 |
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.
-rw-r--r-- | src/treebuilder/element-type.h | 26 | ||||
-rw-r--r-- | src/treebuilder/internal.h | 3 | ||||
-rw-r--r-- | src/treebuilder/treebuilder.c | 23 |
3 files changed, 26 insertions, 26 deletions
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 diff --git a/src/treebuilder/internal.h b/src/treebuilder/internal.h index d9e1a00..debc33e 100644 --- a/src/treebuilder/internal.h +++ b/src/treebuilder/internal.h @@ -128,9 +128,6 @@ hubbub_error append_text(hubbub_treebuilder *treebuilder, const hubbub_string *string); hubbub_error complete_script(hubbub_treebuilder *treebuilder); -element_type element_type_from_name(hubbub_treebuilder *treebuilder, - const hubbub_string *tag_name); - bool is_special_element(element_type type); bool is_scoping_element(element_type type); bool is_formatting_element(element_type type); diff --git a/src/treebuilder/treebuilder.c b/src/treebuilder/treebuilder.c index d2a186d..2d2d047 100644 --- a/src/treebuilder/treebuilder.c +++ b/src/treebuilder/treebuilder.c @@ -915,29 +915,6 @@ hubbub_error append_text(hubbub_treebuilder *treebuilder, } /** - * 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 - */ -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; -} - -/** * Determine if a node is a special element * * \param type Node type to consider |