diff options
Diffstat (limited to 'tests/suite/ecore/src/lib/eina_share_common.c')
-rw-r--r-- | tests/suite/ecore/src/lib/eina_share_common.c | 1070 |
1 files changed, 525 insertions, 545 deletions
diff --git a/tests/suite/ecore/src/lib/eina_share_common.c b/tests/suite/ecore/src/lib/eina_share_common.c index 2302843eaa..76deb8b3ac 100644 --- a/tests/suite/ecore/src/lib/eina_share_common.c +++ b/tests/suite/ecore/src/lib/eina_share_common.c @@ -55,7 +55,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include "config.h" #endif #include <stdlib.h> @@ -64,11 +64,11 @@ #include <stddef.h> #ifdef EFL_HAVE_POSIX_THREADS -# include <pthread.h> +#include <pthread.h> #endif #ifdef HAVE_EVIL -# include <Evil.h> +#include <Evil.h> #endif #include "eina_config.h" @@ -126,468 +126,460 @@ typedef struct _Eina_Share_Common_Head Eina_Share_Common_Head; int _eina_share_common_log_dom = -1; -struct _Eina_Share -{ - Eina_Share_Common *share; - Eina_Magic node_magic; +struct _Eina_Share { + Eina_Share_Common *share; + Eina_Magic node_magic; #ifdef EINA_SHARE_COMMON_USAGE - Eina_Share_Common_Population population; - int max_node_population; + Eina_Share_Common_Population population; + int max_node_population; #endif }; -struct _Eina_Share_Common -{ - Eina_Share_Common_Head *buckets[EINA_SHARE_COMMON_BUCKETS]; +struct _Eina_Share_Common { + Eina_Share_Common_Head *buckets[EINA_SHARE_COMMON_BUCKETS]; - EINA_MAGIC -}; - -struct _Eina_Share_Common_Node -{ - Eina_Share_Common_Node *next; + EINA_MAGIC}; - EINA_MAGIC +struct _Eina_Share_Common_Node { + Eina_Share_Common_Node *next; - unsigned int length; - unsigned int references; - char str[]; + EINA_MAGIC unsigned int length; + unsigned int references; + char str[]; }; -struct _Eina_Share_Common_Head -{ - EINA_RBTREE; - EINA_MAGIC - - int hash; +struct _Eina_Share_Common_Head { + EINA_RBTREE; + EINA_MAGIC int hash; #ifdef EINA_SHARE_COMMON_USAGE - int population; + int population; #endif - Eina_Share_Common_Node *head; - Eina_Share_Common_Node builtin_node; + Eina_Share_Common_Node *head; + Eina_Share_Common_Node builtin_node; }; #ifdef EFL_HAVE_THREADS Eina_Bool _share_common_threads_activated = EINA_FALSE; -# ifdef EFL_HAVE_POSIX_THREADS +#ifdef EFL_HAVE_POSIX_THREADS static pthread_mutex_t _mutex_big = PTHREAD_MUTEX_INITIALIZER; -# define SHARE_COMMON_LOCK_BIG() if(_share_common_threads_activated) \ +#define SHARE_COMMON_LOCK_BIG() if(_share_common_threads_activated) \ pthread_mutex_lock(&_mutex_big) -# define SHARE_COMMON_UNLOCK_BIG() if(_share_common_threads_activated) \ +#define SHARE_COMMON_UNLOCK_BIG() if(_share_common_threads_activated) \ pthread_mutex_unlock(&_mutex_big) -# else /* EFL_HAVE_WIN32_THREADS */ +#else /* EFL_HAVE_WIN32_THREADS */ static HANDLE _mutex_big = NULL; -# define SHARE_COMMON_LOCK_BIG() if(_share_common_threads_activated) \ +#define SHARE_COMMON_LOCK_BIG() if(_share_common_threads_activated) \ WaitForSingleObject(_mutex_big, INFINITE) -# define SHARE_COMMON_UNLOCK_BIG() if(_share_common_threads_activated) \ +#define SHARE_COMMON_UNLOCK_BIG() if(_share_common_threads_activated) \ ReleaseMutex(_mutex_big) -# endif /* EFL_HAVE_WIN32_THREADS */ -#else /* EFL_HAVE_THREADS */ -# define SHARE_COMMON_LOCK_BIG() do {} while (0) -# define SHARE_COMMON_UNLOCK_BIG() do {} while (0) +#endif /* EFL_HAVE_WIN32_THREADS */ +#else /* EFL_HAVE_THREADS */ +#define SHARE_COMMON_LOCK_BIG() do {} while (0) +#define SHARE_COMMON_UNLOCK_BIG() do {} while (0) #endif #ifdef EINA_SHARE_COMMON_USAGE -struct _Eina_Share_Common_Population -{ - int count; - int max; +struct _Eina_Share_Common_Population { + int count; + int max; }; static Eina_Share_Common_Population population = { 0, 0 }; -static Eina_Share_Common_Population population_group[4] = -{ - { 0, 0 }, - { 0, 0 }, - { 0, 0 }, - { 0, 0 } +static Eina_Share_Common_Population population_group[4] = { + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0} }; -static void -_eina_share_common_population_init(Eina_Share *share) +static void _eina_share_common_population_init(Eina_Share * share) { - unsigned int i; + unsigned int i; - for (i = 0; - i < sizeof (share->population_group) / - sizeof (share->population_group[0]); - ++i) - { - share->population_group[i].count = 0; - share->population_group[i].max = 0; - } + for (i = 0; + i < sizeof(share->population_group) / + sizeof(share->population_group[0]); ++i) { + share->population_group[i].count = 0; + share->population_group[i].max = 0; + } } -static void -_eina_share_common_population_shutdown(Eina_Share *share) +static void _eina_share_common_population_shutdown(Eina_Share * share) { - unsigned int i; + unsigned int i; - share->max_node_population = 0; - share->population.count = 0; - share->population.max = 0; + share->max_node_population = 0; + share->population.count = 0; + share->population.max = 0; - for (i = 0; - i < sizeof (share->population_group) / - sizeof (share->population_group[0]); - ++i) - { - share->population_group[i].count = 0; - share->population_group[i].max = 0; - } + for (i = 0; + i < sizeof(share->population_group) / + sizeof(share->population_group[0]); ++i) { + share->population_group[i].count = 0; + share->population_group[i].max = 0; + } } -static void -_eina_share_common_population_stats(Eina_Share *share) +static void _eina_share_common_population_stats(Eina_Share * share) { - unsigned int i; + unsigned int i; - fprintf(stderr, "eina share_common statistic:\n"); - fprintf(stderr, - " * maximum shared strings : %i\n", - share->population.max); - fprintf(stderr, - " * maximum shared strings per node : %i\n", - share->max_node_population); + fprintf(stderr, "eina share_common statistic:\n"); + fprintf(stderr, + " * maximum shared strings : %i\n", share->population.max); + fprintf(stderr, + " * maximum shared strings per node : %i\n", + share->max_node_population); - for (i = 0; - i < sizeof (share->population_group) / - sizeof (share->population_group[0]); - ++i) - fprintf(stderr, - "DDD: %i strings of length %i, max strings: %i\n", - share->population_group[i].count, - i, - share->population_group[i].max); + for (i = 0; + i < sizeof(share->population_group) / + sizeof(share->population_group[0]); ++i) + fprintf(stderr, + "DDD: %i strings of length %i, max strings: %i\n", + share->population_group[i].count, + i, share->population_group[i].max); } -void -eina_share_common_population_add(Eina_Share *share, int slen) +void eina_share_common_population_add(Eina_Share * share, int slen) { - SHARE_COMMON_LOCK_BIG(); + SHARE_COMMON_LOCK_BIG(); - share->population.count++; - if (share->population.count > share->population.max) - share->population.max = share->population.count; + share->population.count++; + if (share->population.count > share->population.max) + share->population.max = share->population.count; - if (slen < 4) - { - share->population_group[slen].count++; - if (share->population_group[slen].count > - share->population_group[slen].max) - share->population_group[slen].max = - share->population_group[slen].count; - } + if (slen < 4) { + share->population_group[slen].count++; + if (share->population_group[slen].count > + share->population_group[slen].max) + share->population_group[slen].max = + share->population_group[slen].count; + } - SHARE_COMMON_UNLOCK_BIG(); + SHARE_COMMON_UNLOCK_BIG(); } -void -eina_share_common_population_del(Eina_Share *share, int slen) +void eina_share_common_population_del(Eina_Share * share, int slen) { - SHARE_COMMON_LOCK_BIG(); + SHARE_COMMON_LOCK_BIG(); - share->population.count--; - if (slen < 4) - share->population_group[slen].count--; + share->population.count--; + if (slen < 4) + share->population_group[slen].count--; - SHARE_COMMON_UNLOCK_BIG(); + SHARE_COMMON_UNLOCK_BIG(); } static void -_eina_share_common_population_head_init(Eina_Share *share, - Eina_Share_Common_Head *head) +_eina_share_common_population_head_init(Eina_Share * share, + Eina_Share_Common_Head * head) { - head->population = 1; + head->population = 1; } static void -_eina_share_common_population_head_add(Eina_Share *share, - Eina_Share_Common_Head *head) +_eina_share_common_population_head_add(Eina_Share * share, + Eina_Share_Common_Head * head) { - head->population++; - if (head->population > share->max_node_population) - share->max_node_population = head->population; + head->population++; + if (head->population > share->max_node_population) + share->max_node_population = head->population; } static void -_eina_share_common_population_head_del(Eina_Share *share, - Eina_Share_Common_Head *head) +_eina_share_common_population_head_del(Eina_Share * share, + Eina_Share_Common_Head * head) { - head->population--; + head->population--; } -#else /* EINA_SHARE_COMMON_USAGE undefined */ +#else /* EINA_SHARE_COMMON_USAGE undefined */ -static void _eina_share_common_population_init(__UNUSED__ Eina_Share *share) { +static void _eina_share_common_population_init(__UNUSED__ Eina_Share * + share) +{ } -static void _eina_share_common_population_shutdown(__UNUSED__ Eina_Share *share) + +static void _eina_share_common_population_shutdown(__UNUSED__ Eina_Share * + share) { } -static void _eina_share_common_population_stats(__UNUSED__ Eina_Share *share) { + +static void _eina_share_common_population_stats(__UNUSED__ Eina_Share * + share) +{ } -void eina_share_common_population_add(__UNUSED__ Eina_Share *share, - __UNUSED__ int slen) { + +void eina_share_common_population_add(__UNUSED__ Eina_Share * share, + __UNUSED__ int slen) +{ } -void eina_share_common_population_del(__UNUSED__ Eina_Share *share, - __UNUSED__ int slen) { + +void eina_share_common_population_del(__UNUSED__ Eina_Share * share, + __UNUSED__ int slen) +{ } -static void _eina_share_common_population_head_init( - __UNUSED__ Eina_Share *share, - __UNUSED__ Eina_Share_Common_Head *head) { + +static void _eina_share_common_population_head_init(__UNUSED__ Eina_Share * + share, + __UNUSED__ + Eina_Share_Common_Head + * head) +{ } -static void _eina_share_common_population_head_add( - __UNUSED__ Eina_Share *share, - __UNUSED__ - Eina_Share_Common_Head *head) { + +static void _eina_share_common_population_head_add(__UNUSED__ Eina_Share * + share, + __UNUSED__ + Eina_Share_Common_Head * + head) +{ } -static void _eina_share_common_population_head_del( - __UNUSED__ Eina_Share *share, - __UNUSED__ - Eina_Share_Common_Head *head) { + +static void _eina_share_common_population_head_del(__UNUSED__ Eina_Share * + share, + __UNUSED__ + Eina_Share_Common_Head * + head) +{ } #endif static int -_eina_share_common_cmp(const Eina_Share_Common_Head *ed, - const int *hash, - __UNUSED__ int length, - __UNUSED__ void *data) +_eina_share_common_cmp(const Eina_Share_Common_Head * ed, + const int *hash, + __UNUSED__ int length, __UNUSED__ void *data) { - EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(ed, , 0); + EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(ed,, 0); - return ed->hash - *hash; + return ed->hash - *hash; } static Eina_Rbtree_Direction -_eina_share_common_node(const Eina_Share_Common_Head *left, - const Eina_Share_Common_Head *right, - __UNUSED__ void *data) +_eina_share_common_node(const Eina_Share_Common_Head * left, + const Eina_Share_Common_Head * right, + __UNUSED__ void *data) { - EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(left, , 0); - EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(right, , 0); + EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(left,, 0); + EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(right,, 0); - if (left->hash - right->hash < 0) - return EINA_RBTREE_LEFT; + if (left->hash - right->hash < 0) + return EINA_RBTREE_LEFT; - return EINA_RBTREE_RIGHT; + return EINA_RBTREE_RIGHT; } static void -_eina_share_common_head_free(Eina_Share_Common_Head *ed, __UNUSED__ void *data) +_eina_share_common_head_free(Eina_Share_Common_Head * ed, + __UNUSED__ void *data) { - EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(ed, ); + EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(ed,); - while (ed->head) - { - Eina_Share_Common_Node *el = ed->head; + while (ed->head) { + Eina_Share_Common_Node *el = ed->head; - ed->head = ed->head->next; - if (el != &ed->builtin_node) - MAGIC_FREE(el); - } - MAGIC_FREE(ed); + ed->head = ed->head->next; + if (el != &ed->builtin_node) + MAGIC_FREE(el); + } + MAGIC_FREE(ed); } static void -_eina_share_common_node_init(Eina_Share_Common_Node *node, - const char *str, - int slen, - unsigned int null_size, - Eina_Magic node_magic) +_eina_share_common_node_init(Eina_Share_Common_Node * node, + const char *str, + int slen, + unsigned int null_size, Eina_Magic node_magic) { - EINA_MAGIC_SET(node, node_magic); - node->references = 1; - node->length = slen; - memcpy(node->str, str, slen); - memset(node->str + slen, 0, null_size); /* Nullify the null */ + EINA_MAGIC_SET(node, node_magic); + node->references = 1; + node->length = slen; + memcpy(node->str, str, slen); + memset(node->str + slen, 0, null_size); /* Nullify the null */ - (void) node_magic; /* When magic are disable, node_magic is unused, this remove a warning. */ + (void) node_magic; /* When magic are disable, node_magic is unused, this remove a warning. */ } -static Eina_Share_Common_Head * -_eina_share_common_head_alloc(int slen) +static Eina_Share_Common_Head *_eina_share_common_head_alloc(int slen) { - Eina_Share_Common_Head *head; - const size_t head_size = offsetof(Eina_Share_Common_Head, builtin_node.str); + Eina_Share_Common_Head *head; + const size_t head_size = + offsetof(Eina_Share_Common_Head, builtin_node.str); - head = malloc(head_size + slen); - if (!head) - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + head = malloc(head_size + slen); + if (!head) + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return head; + return head; } -static const char * -_eina_share_common_add_head(Eina_Share *share, - Eina_Share_Common_Head **p_bucket, - int hash, - const char *str, - unsigned int slen, - unsigned int null_size) +static const char *_eina_share_common_add_head(Eina_Share * share, + Eina_Share_Common_Head ** + p_bucket, int hash, + const char *str, + unsigned int slen, + unsigned int null_size) { - Eina_Rbtree **p_tree = (Eina_Rbtree **)p_bucket; - Eina_Share_Common_Head *head; + Eina_Rbtree **p_tree = (Eina_Rbtree **) p_bucket; + Eina_Share_Common_Head *head; - head = _eina_share_common_head_alloc(slen + null_size); - if (!head) - return NULL; + head = _eina_share_common_head_alloc(slen + null_size); + if (!head) + return NULL; - EINA_MAGIC_SET(head, EINA_MAGIC_SHARE_HEAD); - head->hash = hash; - head->head = &head->builtin_node; - _eina_share_common_node_init(head->head, - str, - slen, - null_size, - share->node_magic); - head->head->next = NULL; + EINA_MAGIC_SET(head, EINA_MAGIC_SHARE_HEAD); + head->hash = hash; + head->head = &head->builtin_node; + _eina_share_common_node_init(head->head, + str, + slen, null_size, share->node_magic); + head->head->next = NULL; - _eina_share_common_population_head_init(share, head); + _eina_share_common_population_head_init(share, head); - *p_tree = eina_rbtree_inline_insert - (*p_tree, EINA_RBTREE_GET(head), - EINA_RBTREE_CMP_NODE_CB(_eina_share_common_node), NULL); + *p_tree = eina_rbtree_inline_insert + (*p_tree, EINA_RBTREE_GET(head), + EINA_RBTREE_CMP_NODE_CB(_eina_share_common_node), NULL); - return head->head->str; + return head->head->str; } static void -_eina_share_common_del_head(Eina_Share_Common_Head **p_bucket, - Eina_Share_Common_Head *head) +_eina_share_common_del_head(Eina_Share_Common_Head ** p_bucket, + Eina_Share_Common_Head * head) { - Eina_Rbtree **p_tree = (Eina_Rbtree **)p_bucket; + Eina_Rbtree **p_tree = (Eina_Rbtree **) p_bucket; - *p_tree = eina_rbtree_inline_remove - (*p_tree, EINA_RBTREE_GET(head), - EINA_RBTREE_CMP_NODE_CB(_eina_share_common_node), NULL); + *p_tree = eina_rbtree_inline_remove + (*p_tree, EINA_RBTREE_GET(head), + EINA_RBTREE_CMP_NODE_CB(_eina_share_common_node), NULL); - MAGIC_FREE(head); + MAGIC_FREE(head); } static inline Eina_Bool -_eina_share_common_node_eq(const Eina_Share_Common_Node *node, - const char *str, - unsigned int slen) +_eina_share_common_node_eq(const Eina_Share_Common_Node * node, + const char *str, unsigned int slen) { - return ((node->length == slen) && - (memcmp(node->str, str, slen) == 0)); + return ((node->length == slen) && + (memcmp(node->str, str, slen) == 0)); } -static Eina_Share_Common_Node * -_eina_share_common_head_find(Eina_Share_Common_Head *head, - const char *str, - unsigned int slen) +static Eina_Share_Common_Node + *_eina_share_common_head_find(Eina_Share_Common_Head * head, + const char *str, unsigned int slen) { - Eina_Share_Common_Node *node, *prev; + Eina_Share_Common_Node *node, *prev; - node = head->head; - if (_eina_share_common_node_eq(node, str, slen)) - return node; + node = head->head; + if (_eina_share_common_node_eq(node, str, slen)) + return node; - prev = node; - node = node->next; - for (; node; prev = node, node = node->next) - if (_eina_share_common_node_eq(node, str, slen)) - { - /* promote node, make hot items be at the beginning */ - prev->next = node->next; - node->next = head->head; - head->head = node; - return node; - } + prev = node; + node = node->next; + for (; node; prev = node, node = node->next) + if (_eina_share_common_node_eq(node, str, slen)) { + /* promote node, make hot items be at the beginning */ + prev->next = node->next; + node->next = head->head; + head->head = node; + return node; + } - return NULL; + return NULL; } static Eina_Bool -_eina_share_common_head_remove_node(Eina_Share_Common_Head *head, - const Eina_Share_Common_Node *node) +_eina_share_common_head_remove_node(Eina_Share_Common_Head * head, + const Eina_Share_Common_Node * node) { - Eina_Share_Common_Node *cur, *prev; + Eina_Share_Common_Node *cur, *prev; - if (head->head == node) - { - head->head = node->next; - return 1; - } + if (head->head == node) { + head->head = node->next; + return 1; + } - prev = head->head; - cur = head->head->next; - for (; cur; prev = cur, cur = cur->next) - if (cur == node) - { - prev->next = cur->next; - return 1; - } + prev = head->head; + cur = head->head->next; + for (; cur; prev = cur, cur = cur->next) + if (cur == node) { + prev->next = cur->next; + return 1; + } - return 0; + return 0; } -static Eina_Share_Common_Head * -_eina_share_common_find_hash(Eina_Share_Common_Head *bucket, int hash) +static Eina_Share_Common_Head + *_eina_share_common_find_hash(Eina_Share_Common_Head * bucket, + int hash) { - return (Eina_Share_Common_Head *)eina_rbtree_inline_lookup - (EINA_RBTREE_GET(bucket), &hash, 0, - EINA_RBTREE_CMP_KEY_CB(_eina_share_common_cmp), NULL); + return (Eina_Share_Common_Head *) eina_rbtree_inline_lookup + (EINA_RBTREE_GET(bucket), &hash, 0, + EINA_RBTREE_CMP_KEY_CB(_eina_share_common_cmp), NULL); } -static Eina_Share_Common_Node * -_eina_share_common_node_alloc(unsigned int slen, unsigned int null_size) +static Eina_Share_Common_Node *_eina_share_common_node_alloc(unsigned int + slen, + unsigned int + null_size) { - Eina_Share_Common_Node *node; - const size_t node_size = offsetof(Eina_Share_Common_Node, str); + Eina_Share_Common_Node *node; + const size_t node_size = offsetof(Eina_Share_Common_Node, str); - node = malloc(node_size + slen + null_size); - if (!node) - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); + node = malloc(node_size + slen + null_size); + if (!node) + eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return node; + return node; } -static Eina_Share_Common_Node * -_eina_share_common_node_from_str(const char *str, Eina_Magic node_magic) +static Eina_Share_Common_Node *_eina_share_common_node_from_str(const char + *str, + Eina_Magic + node_magic) { - Eina_Share_Common_Node *node; - const size_t offset = offsetof(Eina_Share_Common_Node, str); + Eina_Share_Common_Node *node; + const size_t offset = offsetof(Eina_Share_Common_Node, str); - node = (Eina_Share_Common_Node *)(str - offset); - EINA_MAGIC_CHECK_SHARE_COMMON_NODE(node, node_magic, ); - return node; + node = (Eina_Share_Common_Node *) (str - offset); + EINA_MAGIC_CHECK_SHARE_COMMON_NODE(node, node_magic,); + return node; - (void) node_magic; /* When magic are disable, node_magic is unused, this remove a warning. */ + (void) node_magic; /* When magic are disable, node_magic is unused, this remove a warning. */ } static Eina_Bool -eina_iterator_array_check(const Eina_Rbtree *rbtree __UNUSED__, - Eina_Share_Common_Head *head, - struct dumpinfo *fdata) +eina_iterator_array_check(const Eina_Rbtree * rbtree __UNUSED__, + Eina_Share_Common_Head * head, + struct dumpinfo *fdata) { - Eina_Share_Common_Node *node; + Eina_Share_Common_Node *node; - SHARE_COMMON_LOCK_BIG(); + SHARE_COMMON_LOCK_BIG(); - fdata->used += sizeof(Eina_Share_Common_Head); - for (node = head->head; node; node = node->next) - { - printf("DDD: %5i %5i ", node->length, node->references); - printf("'%.*s'\n", node->length, ((char *)node) + sizeof(Eina_Share_Common_Node)); - fdata->used += sizeof(Eina_Share_Common_Node); - fdata->used += node->length; - fdata->saved += (node->references - 1) * node->length; - fdata->dups += node->references - 1; - fdata->unique++; - } + fdata->used += sizeof(Eina_Share_Common_Head); + for (node = head->head; node; node = node->next) { + printf("DDD: %5i %5i ", node->length, node->references); + printf("'%.*s'\n", node->length, + ((char *) node) + sizeof(Eina_Share_Common_Node)); + fdata->used += sizeof(Eina_Share_Common_Node); + fdata->used += node->length; + fdata->saved += (node->references - 1) * node->length; + fdata->dups += node->references - 1; + fdata->unique++; + } - SHARE_COMMON_UNLOCK_BIG(); + SHARE_COMMON_UNLOCK_BIG(); - return EINA_TRUE; + return EINA_TRUE; } /** @@ -611,48 +603,46 @@ eina_iterator_array_check(const Eina_Rbtree *rbtree __UNUSED__, * @see eina_init() */ Eina_Bool -eina_share_common_init(Eina_Share **_share, - Eina_Magic node_magic, - const char *node_magic_STR) -{ - Eina_Share *share; - share = *_share = calloc(sizeof(Eina_Share), 1); - if (!share) - return EINA_FALSE; - - if (_eina_share_common_log_dom < 0) /*Only register if not already */ - _eina_share_common_log_dom = eina_log_domain_register( - "eina_share", - EINA_LOG_COLOR_DEFAULT); - - if (_eina_share_common_log_dom < 0) - { - EINA_LOG_ERR("Could not register log domain: eina_share_common"); - return EINA_FALSE; - } - - share->share = calloc(1, sizeof(Eina_Share_Common)); - if (!share->share) - { - if (_eina_share_common_log_dom > 0) - { - eina_log_domain_unregister(_eina_share_common_log_dom); - _eina_share_common_log_dom = -1; - } - - return EINA_FALSE; - } - - share->node_magic = node_magic; +eina_share_common_init(Eina_Share ** _share, + Eina_Magic node_magic, const char *node_magic_STR) +{ + Eina_Share *share; + share = *_share = calloc(sizeof(Eina_Share), 1); + if (!share) + return EINA_FALSE; + + if (_eina_share_common_log_dom < 0) /*Only register if not already */ + _eina_share_common_log_dom = + eina_log_domain_register("eina_share", + EINA_LOG_COLOR_DEFAULT); + + if (_eina_share_common_log_dom < 0) { + EINA_LOG_ERR + ("Could not register log domain: eina_share_common"); + return EINA_FALSE; + } + + share->share = calloc(1, sizeof(Eina_Share_Common)); + if (!share->share) { + if (_eina_share_common_log_dom > 0) { + eina_log_domain_unregister + (_eina_share_common_log_dom); + _eina_share_common_log_dom = -1; + } + + return EINA_FALSE; + } + + share->node_magic = node_magic; #define EMS(n) eina_magic_string_static_set(n, n ## _STR) - EMS(EINA_MAGIC_SHARE); - EMS(EINA_MAGIC_SHARE_HEAD); - EMS(node_magic); + EMS(EINA_MAGIC_SHARE); + EMS(EINA_MAGIC_SHARE_HEAD); + EMS(node_magic); #undef EMS - EINA_MAGIC_SET(share->share, EINA_MAGIC_SHARE); + EINA_MAGIC_SET(share->share, EINA_MAGIC_SHARE); - _eina_share_common_population_init(share); - return EINA_TRUE; + _eina_share_common_population_init(share); + return EINA_TRUE; } /** @@ -666,39 +656,36 @@ eina_share_common_init(Eina_Share **_share, * * @see eina_shutdown() */ -Eina_Bool -eina_share_common_shutdown(Eina_Share **_share) +Eina_Bool eina_share_common_shutdown(Eina_Share ** _share) { - unsigned int i; - Eina_Share *share = *_share; + unsigned int i; + Eina_Share *share = *_share; - SHARE_COMMON_LOCK_BIG(); + SHARE_COMMON_LOCK_BIG(); - _eina_share_common_population_stats(share); + _eina_share_common_population_stats(share); - /* remove any string still in the table */ - for (i = 0; i < EINA_SHARE_COMMON_BUCKETS; i++) - { - eina_rbtree_delete(EINA_RBTREE_GET( - share->share->buckets[i]), - EINA_RBTREE_FREE_CB( - _eina_share_common_head_free), NULL); - share->share->buckets[i] = NULL; - } - MAGIC_FREE(share->share); + /* remove any string still in the table */ + for (i = 0; i < EINA_SHARE_COMMON_BUCKETS; i++) { + eina_rbtree_delete(EINA_RBTREE_GET + (share->share->buckets[i]), + EINA_RBTREE_FREE_CB + (_eina_share_common_head_free), NULL); + share->share->buckets[i] = NULL; + } + MAGIC_FREE(share->share); - _eina_share_common_population_shutdown(share); - if (_eina_share_common_log_dom > 0) /* Only free if necessary */ - { - eina_log_domain_unregister(_eina_share_common_log_dom); - _eina_share_common_log_dom = -1; - } + _eina_share_common_population_shutdown(share); + if (_eina_share_common_log_dom > 0) { /* Only free if necessary */ + eina_log_domain_unregister(_eina_share_common_log_dom); + _eina_share_common_log_dom = -1; + } - SHARE_COMMON_UNLOCK_BIG(); + SHARE_COMMON_UNLOCK_BIG(); - free(*_share); - *_share = NULL; - return EINA_TRUE; + free(*_share); + *_share = NULL; + return EINA_TRUE; } #ifdef EFL_HAVE_THREADS @@ -712,10 +699,9 @@ eina_share_common_shutdown(Eina_Share **_share) * * @see eina_threads_init() */ -void -eina_share_common_threads_init(void) +void eina_share_common_threads_init(void) { - _share_common_threads_activated = EINA_TRUE; + _share_common_threads_activated = EINA_TRUE; } /** @@ -727,10 +713,9 @@ eina_share_common_threads_init(void) * * @see eina_threads_shutdown() */ -void -eina_share_common_threads_shutdown(void) +void eina_share_common_threads_shutdown(void) { - _share_common_threads_activated = EINA_FALSE; + _share_common_threads_activated = EINA_FALSE; } #endif @@ -743,230 +728,225 @@ eina_share_common_threads_shutdown(void) * @cond LOCAL */ -const char * -eina_share_common_add_length(Eina_Share *share, - const char *str, - unsigned int slen, - unsigned int null_size) +const char *eina_share_common_add_length(Eina_Share * share, + const char *str, + unsigned int slen, + unsigned int null_size) { - Eina_Share_Common_Head **p_bucket, *ed; - Eina_Share_Common_Node *el; - int hash_num, hash; + Eina_Share_Common_Head **p_bucket, *ed; + Eina_Share_Common_Node *el; + int hash_num, hash; - if (!str) - return NULL; + if (!str) + return NULL; - eina_share_common_population_add(share, slen); + eina_share_common_population_add(share, slen); - if (slen <= 0) - return NULL; + if (slen <= 0) + return NULL; - hash = eina_hash_superfast(str, slen); - hash_num = hash & 0xFF; - hash = (hash >> 8) & EINA_SHARE_COMMON_MASK; + hash = eina_hash_superfast(str, slen); + hash_num = hash & 0xFF; + hash = (hash >> 8) & EINA_SHARE_COMMON_MASK; - SHARE_COMMON_LOCK_BIG(); - p_bucket = share->share->buckets + hash_num; + SHARE_COMMON_LOCK_BIG(); + p_bucket = share->share->buckets + hash_num; - ed = _eina_share_common_find_hash(*p_bucket, hash); - if (!ed) - { - const char *s = _eina_share_common_add_head(share, - p_bucket, - hash, - str, - slen, - null_size); - SHARE_COMMON_UNLOCK_BIG(); - return s; - } + ed = _eina_share_common_find_hash(*p_bucket, hash); + if (!ed) { + const char *s = _eina_share_common_add_head(share, + p_bucket, + hash, + str, + slen, + null_size); + SHARE_COMMON_UNLOCK_BIG(); + return s; + } - EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(ed, SHARE_COMMON_UNLOCK_BIG(), NULL); + EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(ed, SHARE_COMMON_UNLOCK_BIG(), + NULL); - el = _eina_share_common_head_find(ed, str, slen); - if (el) - { - EINA_MAGIC_CHECK_SHARE_COMMON_NODE(el, - share->node_magic, - SHARE_COMMON_UNLOCK_BIG()); - el->references++; - SHARE_COMMON_UNLOCK_BIG(); - return el->str; - } + el = _eina_share_common_head_find(ed, str, slen); + if (el) { + EINA_MAGIC_CHECK_SHARE_COMMON_NODE(el, + share->node_magic, + SHARE_COMMON_UNLOCK_BIG + ()); + el->references++; + SHARE_COMMON_UNLOCK_BIG(); + return el->str; + } - el = _eina_share_common_node_alloc(slen, null_size); - if (!el) - { - SHARE_COMMON_UNLOCK_BIG(); - return NULL; - } + el = _eina_share_common_node_alloc(slen, null_size); + if (!el) { + SHARE_COMMON_UNLOCK_BIG(); + return NULL; + } - _eina_share_common_node_init(el, str, slen, null_size, share->node_magic); - el->next = ed->head; - ed->head = el; - _eina_share_common_population_head_add(share, ed); + _eina_share_common_node_init(el, str, slen, null_size, + share->node_magic); + el->next = ed->head; + ed->head = el; + _eina_share_common_population_head_add(share, ed); - SHARE_COMMON_UNLOCK_BIG(); + SHARE_COMMON_UNLOCK_BIG(); - return el->str; + return el->str; } -const char * -eina_share_common_ref(Eina_Share *share, const char *str) +const char *eina_share_common_ref(Eina_Share * share, const char *str) { - Eina_Share_Common_Node *node; + Eina_Share_Common_Node *node; - if (!str) - return NULL; + if (!str) + return NULL; - SHARE_COMMON_LOCK_BIG(); - node = _eina_share_common_node_from_str(str, share->node_magic); - node->references++; - DBG("str=%p refs=%u", str, node->references); + SHARE_COMMON_LOCK_BIG(); + node = _eina_share_common_node_from_str(str, share->node_magic); + node->references++; + DBG("str=%p refs=%u", str, node->references); - SHARE_COMMON_UNLOCK_BIG(); + SHARE_COMMON_UNLOCK_BIG(); - eina_share_common_population_add(share, node->length); + eina_share_common_population_add(share, node->length); - return str; + return str; } -void -eina_share_common_del(Eina_Share *share, const char *str) +void eina_share_common_del(Eina_Share * share, const char *str) { - unsigned int slen; - Eina_Share_Common_Head *ed; - Eina_Share_Common_Head **p_bucket; - Eina_Share_Common_Node *node; - int hash_num, hash; + unsigned int slen; + Eina_Share_Common_Head *ed; + Eina_Share_Common_Head **p_bucket; + Eina_Share_Common_Node *node; + int hash_num, hash; - if (!str) - return; + if (!str) + return; - SHARE_COMMON_LOCK_BIG(); + SHARE_COMMON_LOCK_BIG(); - node = _eina_share_common_node_from_str(str, share->node_magic); - slen = node->length; - eina_share_common_population_del(share, slen); - if (node->references > 1) - { - node->references--; - DBG("str=%p refs=%u", str, node->references); - SHARE_COMMON_UNLOCK_BIG(); - return; - } + node = _eina_share_common_node_from_str(str, share->node_magic); + slen = node->length; + eina_share_common_population_del(share, slen); + if (node->references > 1) { + node->references--; + DBG("str=%p refs=%u", str, node->references); + SHARE_COMMON_UNLOCK_BIG(); + return; + } - DBG("str=%p refs=0, delete.", str); - node->references = 0; + DBG("str=%p refs=0, delete.", str); + node->references = 0; - hash = eina_hash_superfast(str, slen); - hash_num = hash & 0xFF; - hash = (hash >> 8) & EINA_SHARE_COMMON_MASK; + hash = eina_hash_superfast(str, slen); + hash_num = hash & 0xFF; + hash = (hash >> 8) & EINA_SHARE_COMMON_MASK; - p_bucket = share->share->buckets + hash_num; - ed = _eina_share_common_find_hash(*p_bucket, hash); - if (!ed) - goto on_error; + p_bucket = share->share->buckets + hash_num; + ed = _eina_share_common_find_hash(*p_bucket, hash); + if (!ed) + goto on_error; - EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(ed, SHARE_COMMON_UNLOCK_BIG()); + EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(ed, SHARE_COMMON_UNLOCK_BIG()); - if (!_eina_share_common_head_remove_node(ed, node)) - goto on_error; + if (!_eina_share_common_head_remove_node(ed, node)) + goto on_error; - if (node != &ed->builtin_node) - MAGIC_FREE(node); + if (node != &ed->builtin_node) + MAGIC_FREE(node); - if (!ed->head) - _eina_share_common_del_head(p_bucket, ed); - else - _eina_share_common_population_head_del(share, ed); + if (!ed->head) + _eina_share_common_del_head(p_bucket, ed); + else + _eina_share_common_population_head_del(share, ed); - SHARE_COMMON_UNLOCK_BIG(); + SHARE_COMMON_UNLOCK_BIG(); - return; + return; -on_error: - SHARE_COMMON_UNLOCK_BIG(); - /* possible segfault happened before here, but... */ - CRITICAL("EEEK trying to del non-shared share_common \"%s\"", str); + on_error: + SHARE_COMMON_UNLOCK_BIG(); + /* possible segfault happened before here, but... */ + CRITICAL("EEEK trying to del non-shared share_common \"%s\"", str); } int -eina_share_common_length(__UNUSED__ Eina_Share *share, const char *str) +eina_share_common_length(__UNUSED__ Eina_Share * share, const char *str) { - const Eina_Share_Common_Node *node; + const Eina_Share_Common_Node *node; - if (!str) - return -1; + if (!str) + return -1; - node = _eina_share_common_node_from_str(str, share->node_magic); - return node->length; + node = _eina_share_common_node_from_str(str, share->node_magic); + return node->length; } void -eina_share_common_dump(Eina_Share *share, void (*additional_dump)( - struct dumpinfo *), int used) -{ - Eina_Iterator *it; - unsigned int i; - struct dumpinfo di; - - if (!share) - return; - - di.used = used; - di.saved = 0; - di.dups = 0; - di.unique = 0; - printf("DDD: len ref string\n"); - printf("DDD:-------------------\n"); - - SHARE_COMMON_LOCK_BIG(); - for (i = 0; i < EINA_SHARE_COMMON_BUCKETS; i++) - { - if (!share->share->buckets[i]) - { - continue; // printf("DDD: BUCKET # %i (HEAD=%i, NODE=%i)\n", i, - - } - -// sizeof(Eina_Share_Common_Head), sizeof(Eina_Share_Common_Node)); - it = eina_rbtree_iterator_prefix( - (Eina_Rbtree *)share->share->buckets[i]); - eina_iterator_foreach(it, EINA_EACH_CB(eina_iterator_array_check), &di); - eina_iterator_free(it); - } - if (additional_dump) - additional_dump(&di); +eina_share_common_dump(Eina_Share * share, + void (*additional_dump) (struct dumpinfo *), + int used) +{ + Eina_Iterator *it; + unsigned int i; + struct dumpinfo di; + + if (!share) + return; + + di.used = used; + di.saved = 0; + di.dups = 0; + di.unique = 0; + printf("DDD: len ref string\n"); + printf("DDD:-------------------\n"); + + SHARE_COMMON_LOCK_BIG(); + for (i = 0; i < EINA_SHARE_COMMON_BUCKETS; i++) { + if (!share->share->buckets[i]) { + continue; // printf("DDD: BUCKET # %i (HEAD=%i, NODE=%i)\n", i, + + } +// sizeof(Eina_Share_Common_Head), sizeof(Eina_Share_Common_Node)); + it = eina_rbtree_iterator_prefix((Eina_Rbtree *) share-> + share->buckets[i]); + eina_iterator_foreach(it, + EINA_EACH_CB + (eina_iterator_array_check), &di); + eina_iterator_free(it); + } + if (additional_dump) + additional_dump(&di); #ifdef EINA_SHARE_COMMON_USAGE - /* One character strings are not counted in the hash. */ - di.saved += share->population_group[0].count * sizeof(char); - di.saved += share->population_group[1].count * sizeof(char) * 2; + /* One character strings are not counted in the hash. */ + di.saved += share->population_group[0].count * sizeof(char); + di.saved += share->population_group[1].count * sizeof(char) * 2; #endif - printf("DDD:-------------------\n"); - printf("DDD: usage (bytes) = %i, saved = %i (%3.0f%%)\n", - di.used, di.saved, di.used ? (di.saved * 100.0 / di.used) : 0.0); - printf("DDD: unique: %d, duplicates: %d (%3.0f%%)\n", - di.unique, di.dups, di.unique ? (di.dups * 100.0 / di.unique) : 0.0); + printf("DDD:-------------------\n"); + printf("DDD: usage (bytes) = %i, saved = %i (%3.0f%%)\n", + di.used, di.saved, + di.used ? (di.saved * 100.0 / di.used) : 0.0); + printf("DDD: unique: %d, duplicates: %d (%3.0f%%)\n", di.unique, + di.dups, di.unique ? (di.dups * 100.0 / di.unique) : 0.0); #ifdef EINA_SHARE_COMMON_USAGE - printf("DDD: Allocated strings: %i\n", share->population.count); - printf("DDD: Max allocated strings: %i\n", share->population.max); - - for (i = 0; - i < sizeof (share->population_group) / - sizeof (share->population_group[0]); - ++i) - fprintf(stderr, - "DDD: %i strings of length %i, max strings: %i\n", - share->population_group[i].count, - i, - share->population_group[i].max); + printf("DDD: Allocated strings: %i\n", share->population.count); + printf("DDD: Max allocated strings: %i\n", share->population.max); + + for (i = 0; + i < sizeof(share->population_group) / + sizeof(share->population_group[0]); ++i) + fprintf(stderr, + "DDD: %i strings of length %i, max strings: %i\n", + share->population_group[i].count, + i, share->population_group[i].max); #endif - SHARE_COMMON_UNLOCK_BIG(); + SHARE_COMMON_UNLOCK_BIG(); } /** |