From f6fb8c8a662e8403a579ceb548b8b51701ed58cf Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Fri, 28 Nov 2008 14:21:55 +0000 Subject: Optimise css_stylesheet_add_rule by the cunning approach of not iterating through a singly linked list to find the end every time we want to insert a rule. This doubles parsing speed. svn path=/trunk/libcss/; revision=5811 --- src/stylesheet.c | 15 ++++++--------- src/stylesheet.h | 1 + 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/stylesheet.c b/src/stylesheet.c index ea3f2a6..0936243 100644 --- a/src/stylesheet.c +++ b/src/stylesheet.c @@ -759,8 +759,6 @@ css_error css_stylesheet_rule_append_style(css_stylesheet *sheet, */ css_error css_stylesheet_add_rule(css_stylesheet *sheet, css_rule *rule) { - css_rule *r; - if (sheet == NULL || rule == NULL) return CSS_BADPARM; @@ -771,16 +769,15 @@ css_error css_stylesheet_add_rule(css_stylesheet *sheet, css_rule *rule) /* Add rule to sheet */ sheet->rule_count++; - /** \todo this may need optimising */ - for (r = sheet->rule_list; r != NULL && r->next != NULL; r = r->next) - /* do nothing */; - if (r == NULL) { + + if (sheet->last_rule == NULL) { rule->prev = rule->next = NULL; - sheet->rule_list = rule; + sheet->rule_list = sheet->last_rule = rule; } else { - r->next = rule; - rule->prev = r; + sheet->last_rule->next = rule; + rule->prev = sheet->last_rule; rule->next = NULL; + sheet->last_rule = rule; } /** \todo If there are selectors in the rule, add them to the hash diff --git a/src/stylesheet.h b/src/stylesheet.h index 2156b8e..a331299 100644 --- a/src/stylesheet.h +++ b/src/stylesheet.h @@ -142,6 +142,7 @@ struct css_stylesheet { uint32_t rule_count; /**< Number of rules in sheet */ css_rule *rule_list; /**< List of rules in sheet */ + css_rule *last_rule; /**< Last rule in list */ bool disabled; /**< Whether this sheet is * disabled */ -- cgit v1.2.3