summaryrefslogtreecommitdiff
path: root/tests/suite/ecore/src/lib/eina_share_common.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/suite/ecore/src/lib/eina_share_common.c')
-rw-r--r--tests/suite/ecore/src/lib/eina_share_common.c1070
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();
}
/**