From 1a820d249aba97dbc36cdd88cc114918db2eb987 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Mon, 2 Dec 2013 22:14:10 +0000 Subject: Since element/class/id names are known to have insensitive string set, just use that hash value for hash table, instead of calculating own hash. --- src/select/hash.c | 31 ++++++++----------------------- 1 file changed, 8 insertions(+), 23 deletions(-) diff --git a/src/select/hash.c b/src/select/hash.c index 32034e0..71b655b 100644 --- a/src/select/hash.c +++ b/src/select/hash.c @@ -44,7 +44,6 @@ struct css_selector_hash { static hash_entry empty_slot; -static inline uint32_t _hash_name(const lwc_string *name); static inline lwc_string *_class_name(const css_selector *selector); static inline lwc_string *_id_name(const css_selector *selector); static css_error _insert_into_chain(css_selector_hash *ctx, hash_entry *head, @@ -70,6 +69,14 @@ static css_error _iterate_universal( const css_selector ***next); + + +/* Get case insensitive hash value for a name. + * All element/class/id names are known to have their insensitive ptr set. */ +#define _hash_name(name) \ + lwc_string_hash_value(name->insensitive) + + /* No bytecode if rule body is empty or wholly invalid -- * Only interested in rules with bytecode */ #define RULE_HAS_BYTECODE(r) \ @@ -633,28 +640,6 @@ css_error css__selector_hash_size(css_selector_hash *hash, size_t *size) * Private functions * ******************************************************************************/ -/** - * Name hash function -- case-insensitive FNV. - * - * \param name Name to hash - * \return hash value - */ -uint32_t _hash_name(const lwc_string *name) -{ - uint32_t z = 0x811c9dc5; - const char *data = lwc_string_data(name); - const char *end = data + lwc_string_length(name); - - while (data != end) { - const char c = *data++; - - z *= 0x01000193; - z ^= c & ~0x20; - } - - return z; -} - /** * Retrieve the first class name in a selector, or NULL if none * -- cgit v1.2.3