Mercurial > MadButterfly
view src/prop.c @ 935:960e2395973d
Fix the bug of crash by abort() when running testsvg.js.
The cached coords their pcache areas should be recomputed are also add
ro zeroing list. They have no dirty areas. But, their pcache area
must be added to parent cached coord.
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Fri, 12 Nov 2010 16:03:19 +0800 |
parents | 586e50f82c1f |
children |
line wrap: on
line source
// -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 4; -*- // vim: sw=4:ts=8:sts=4 #include "mb_prop.h" #define ASSERT(x) static mb_prop_entry_t *_mb_prop_find(mb_prop_store_t *prop_store, int id) { mb_prop_entry_t *entry; for(entry = STAILQ_HEAD(prop_store->entries); entry != NULL; entry = STAILQ_NEXT(mb_prop_entry_t, next, entry)) { if(entry->id == id) return entry; } return NULL; } void mb_prop_store_destroy(mb_prop_store_t *prop_store) { mb_prop_entry_t *entry, *last; last = STAILQ_HEAD(prop_store->entries); if(last == NULL) return; for(entry = STAILQ_NEXT(mb_prop_entry_t, next, last); entry != NULL; entry = STAILQ_NEXT(mb_prop_entry_t, next, entry)) { STAILQ_REMOVE(prop_store->entries, mb_prop_entry_t, next, last); elmpool_elm_free(prop_store->entry_pool, last); last = entry; } STAILQ_REMOVE(prop_store->entries, mb_prop_entry_t, next, last); elmpool_elm_free(prop_store->entry_pool, last); } void *mb_prop_set(mb_prop_store_t *prop_store, int id, void *value) { mb_prop_entry_t *entry; void *old; entry = _mb_prop_find(prop_store, id); if(entry) { old = entry->value; entry->value = value; return old; } entry = elmpool_elm_alloc(prop_store->entry_pool); ASSERT(entry != NULL); entry->id = id; entry->value = value; STAILQ_INS(prop_store->entries, mb_prop_entry_t, next, entry); return NULL; } void *mb_prop_get(mb_prop_store_t *prop_store, int id) { mb_prop_entry_t *entry; entry = _mb_prop_find(prop_store, id); if(entry) return entry->value; return NULL; } void mb_prop_del(mb_prop_store_t *prop_store, int id) { mb_prop_entry_t *entry; entry = _mb_prop_find(prop_store, id); if(entry) STAILQ_REMOVE(prop_store->entries, mb_prop_entry_t, next, entry); } int mb_prop_has(mb_prop_store_t *prop_store, int id) { mb_prop_entry_t *entry; entry = _mb_prop_find(prop_store, id); if(entry) return 1; return 0; }