summaryrefslogtreecommitdiff
path: root/src/parse
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2008-11-30 16:43:37 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2008-11-30 16:43:37 +0000
commit79a34e5d5a9a93d9232efd595291bc5ebea2f2c5 (patch)
treec35e7cc49699420e01a973f4bccb639931e9cc1d /src/parse
parent7dad1d392d1c380648f6de13f81ade48ce958be1 (diff)
downloadlibcss-79a34e5d5a9a93d9232efd595291bc5ebea2f2c5.tar.gz
libcss-79a34e5d5a9a93d9232efd595291bc5ebea2f2c5.tar.bz2
Use parserutils_hash instead of parserutils_dict.
This approximately halves the size of the interned string table. We now have the following for allzengarden.css: 5507 slots used (of 8192 => 67.224121%) Data: 3 full blocks: 12288 bytes 10 partial blocks: 38946 bytes (of 40960 => 95.083008%) Total: 53488 (4112) (32) Entries: 21 full blocks: 86016 bytes 1 partial blocks: 2096 bytes (of 4096 => 51.171875%) Total: 90496 (4112) (32) Hash structures: 65592 Which gives a total dictionary size of 209,576 bytes. Note that 43% of this is parserutils_hash_entry structures (length-pointer pairs). It would be good, therefore, to be able to purge these. svn path=/trunk/libcss/; revision=5852
Diffstat (limited to 'src/parse')
-rw-r--r--src/parse/language.c2
-rw-r--r--src/parse/parse.c18
-rw-r--r--src/parse/parse.h4
3 files changed, 12 insertions, 12 deletions
diff --git a/src/parse/language.c b/src/parse/language.c
index 4273658..d229c2a 100644
--- a/src/parse/language.c
+++ b/src/parse/language.c
@@ -409,7 +409,7 @@ css_error handleStartAtRule(css_language *c, const parserutils_vector *vector)
return CSS_INVALID;
}
- entry.data = atkeyword->lower.data;
+ entry.data = (void *) atkeyword->lower.data;
perror = parserutils_stack_push(c->context, (void *) &entry);
if (perror != PARSERUTILS_OK) {
diff --git a/src/parse/parse.c b/src/parse/parse.c
index bfa6c27..d7ad461 100644
--- a/src/parse/parse.c
+++ b/src/parse/parse.c
@@ -10,7 +10,7 @@
#include <stdbool.h>
#include <parserutils/input/inputstream.h>
-#include <parserutils/utils/dict.h>
+#include <parserutils/utils/hash.h>
#include <parserutils/utils/stack.h>
#include <parserutils/utils/vector.h>
@@ -91,7 +91,7 @@ struct css_parser
#define STACK_CHUNK 32
parserutils_stack *states; /**< Stack of states */
- parserutils_dict *dictionary; /**< Dictionary for interned strings */
+ parserutils_hash *dictionary; /**< Dictionary for interned strings */
parserutils_vector *tokens; /**< Vector of pending tokens */
@@ -185,7 +185,7 @@ static css_error (*parseFuncs[])(css_parser *parser) = {
* CSS_NOMEM on memory exhaustion
*/
css_error css_parser_create(const char *charset, css_charset_source cs_source,
- parserutils_dict *dictionary, css_alloc alloc, void *pw,
+ parserutils_hash *dictionary, css_alloc alloc, void *pw,
css_parser **parser)
{
css_parser *p;
@@ -420,13 +420,13 @@ const char *css_parser_read_charset(css_parser *parser,
const uint8_t *css_parser_dict_add(css_parser *parser, const uint8_t *data,
size_t len)
{
- const parserutils_dict_entry *interned;
+ const parserutils_hash_entry *interned;
parserutils_error perror;
if (parser == NULL || data == NULL || len == 0)
return NULL;
- perror = parserutils_dict_insert(parser->dictionary, data, len,
+ perror = parserutils_hash_insert(parser->dictionary, data, len,
&interned);
if (perror != PARSERUTILS_OK)
return NULL;
@@ -584,7 +584,7 @@ css_error getToken(css_parser *parser, const css_token **token)
if (t->type != CSS_TOKEN_S &&
t->data.data != NULL && t->data.len > 0) {
/* Insert token text into the dictionary */
- const parserutils_dict_entry *interned;
+ const parserutils_hash_entry *interned;
uint8_t temp[t->data.len];
bool lower = false;
@@ -607,7 +607,7 @@ css_error getToken(css_parser *parser, const css_token **token)
/* We get to insert it twice - once for the raw
* data, and once for a lowercased version that
* we need internally. */
- perror = parserutils_dict_insert(
+ perror = parserutils_hash_insert(
parser->dictionary,
temp, t->data.len,
&interned);
@@ -619,13 +619,13 @@ css_error getToken(css_parser *parser, const css_token **token)
t->lower.data = interned->data;
t->lower.len = interned->len;
- perror = parserutils_dict_insert(
+ perror = parserutils_hash_insert(
parser->dictionary,
t->data.data, t->data.len,
&interned);
} else {
/* Otherwise, we're not interested in case */
- perror = parserutils_dict_insert(
+ perror = parserutils_hash_insert(
parser->dictionary,
t->data.data, t->data.len,
&interned);
diff --git a/src/parse/parse.h b/src/parse/parse.h
index a948d56..7e57791 100644
--- a/src/parse/parse.h
+++ b/src/parse/parse.h
@@ -8,7 +8,7 @@
#ifndef css_parse_parse_h_
#define css_parse_parse_h_
-#include <parserutils/utils/dict.h>
+#include <parserutils/utils/hash.h>
#include <parserutils/utils/vector.h>
#include <libcss/errors.h>
@@ -57,7 +57,7 @@ typedef union css_parser_optparams {
} css_parser_optparams;
css_error css_parser_create(const char *charset, css_charset_source cs_source,
- parserutils_dict *dict, css_alloc alloc, void *pw,
+ parserutils_hash *dict, css_alloc alloc, void *pw,
css_parser **parser);
css_error css_parser_destroy(css_parser *parser);