From 642d8686def0ccb97426fadd6a46ed0b20fc3c0f Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Thu, 11 Dec 2008 13:55:47 +0000 Subject: [PATCH] Remove ecore_hash and eina_hash use from ecore. SVN revision: 38105 --- legacy/ecore/src/lib/ecore/ecore_plugin.c | 36 ++- legacy/ecore/src/lib/ecore_con/Ecore_Con.h | 2 +- legacy/ecore/src/lib/ecore_con/ecore_con.c | 25 +- .../src/lib/ecore_con/ecore_con_private.h | 2 +- .../src/lib/ecore_desktop/Ecore_Desktop.h | 16 +- .../src/lib/ecore_desktop/ecore_desktop.c | 246 +++++++++--------- .../lib/ecore_desktop/ecore_desktop_icon.c | 64 ++--- .../lib/ecore_desktop/ecore_desktop_menu.c | 102 ++++---- .../lib/ecore_desktop/ecore_desktop_paths.c | 14 +- .../lib/ecore_desktop/ecore_desktop_tree.c | 30 ++- .../src/lib/ecore_directfb/ecore_directfb.c | 18 +- legacy/ecore/src/lib/ecore_evas/ecore_evas.c | 12 +- .../src/lib/ecore_evas/ecore_evas_directfb.c | 30 ++- .../src/lib/ecore_evas/ecore_evas_private.h | 2 +- .../src/lib/ecore_evas/ecore_evas_win32.c | 10 +- .../src/lib/ecore_evas/ecore_evas_wince.c | 10 +- .../ecore/src/lib/ecore_evas/ecore_evas_x.c | 50 ++-- .../src/lib/ecore_imf/ecore_imf_module.c | 124 ++++++--- .../src/lib/ecore_x/xcb/ecore_xcb_netwm.c | 33 +-- .../src/lib/ecore_x/xlib/ecore_x_netwm.c | 31 ++- 20 files changed, 473 insertions(+), 384 deletions(-) diff --git a/legacy/ecore/src/lib/ecore/ecore_plugin.c b/legacy/ecore/src/lib/ecore/ecore_plugin.c index 29c195a874..068a48afc7 100644 --- a/legacy/ecore/src/lib/ecore/ecore_plugin.c +++ b/legacy/ecore/src/lib/ecore/ecore_plugin.c @@ -24,6 +24,10 @@ static Ecore_List *loaded_plugins = NULL; +static Eina_Bool _hash_keys(const Eina_Hash *hash, + const char *key, + void *list); + /** * @defgroup Ecore_Plugin Plugin Functions * @@ -163,7 +167,8 @@ EAPI Ecore_List * ecore_plugin_available_get(Ecore_Path_Group *group) { Ecore_List *avail = NULL; - Ecore_Hash *plugins = NULL; + Eina_Hash *plugins = NULL; + Eina_Iterator *it = NULL; char *path; CHECK_PARAM_POINTER_RETURN("group", group, NULL); @@ -172,8 +177,7 @@ ecore_plugin_available_get(Ecore_Path_Group *group) return NULL; ecore_list_first_goto(group->paths); - plugins = ecore_hash_new(ecore_str_hash, ecore_str_compare); - ecore_hash_free_key_cb_set(plugins, free); + plugins = eina_hash_string_superfast_new(free); while ((path = ecore_list_next(group->paths)) != NULL) { @@ -214,21 +218,37 @@ ecore_plugin_available_get(Ecore_Path_Group *group) ext = strrchr(ppath, '.'); *ext = '\0'; - if (!ecore_hash_get(plugins, ppath)) + if (!eina_hash_find(plugins, ppath)) { char *key; key = strdup(ppath); - ecore_hash_set(plugins, key, key); + eina_hash_add(plugins, key, key); } } closedir(dir); } - ecore_hash_free_key_cb_set(plugins, NULL); - avail = ecore_hash_keys(plugins); + avail = ecore_list_new(); ecore_list_free_cb_set(avail, free); - ecore_hash_destroy(plugins); + + + it = eina_hash_iterator_key_new(plugins); + if (it) + { + eina_iterator_foreach(it, EINA_EACH(_hash_keys), avail); + eina_iterator_free(it); + } + + eina_hash_free(plugins); + return avail; } + +static Eina_Bool +_hash_keys(const Eina_Hash *hash, const char *key, void *list) +{ + ecore_list_append(list, key); + return EINA_TRUE; +} diff --git a/legacy/ecore/src/lib/ecore_con/Ecore_Con.h b/legacy/ecore/src/lib/ecore_con/Ecore_Con.h index d5e0f2c0f8..b2b9d58091 100644 --- a/legacy/ecore/src/lib/ecore_con/Ecore_Con.h +++ b/legacy/ecore/src/lib/ecore_con/Ecore_Con.h @@ -188,7 +188,7 @@ extern "C" { EAPI void *ecore_con_server_del(Ecore_Con_Server *svr); EAPI void *ecore_con_server_data_get(Ecore_Con_Server *svr); EAPI int ecore_con_server_connected_get(Ecore_Con_Server *svr); - EAPI Ecore_List *ecore_con_server_clients_get(Ecore_Con_Server *svr); + EAPI Eina_List *ecore_con_server_clients_get(Ecore_Con_Server *svr); EAPI int ecore_con_server_send(Ecore_Con_Server *svr, const void *data, int size); EAPI void ecore_con_server_client_limit_set(Ecore_Con_Server *svr, int client_limit, char reject_excess_clients); EAPI char *ecore_con_server_ip_get(Ecore_Con_Server *svr); diff --git a/legacy/ecore/src/lib/ecore_con/ecore_con.c b/legacy/ecore/src/lib/ecore_con/ecore_con.c index 99054c08c2..e064747a56 100644 --- a/legacy/ecore/src/lib/ecore_con/ecore_con.c +++ b/legacy/ecore/src/lib/ecore_con/ecore_con.c @@ -178,7 +178,7 @@ ecore_con_server_add(Ecore_Con_Type compl_type, const char *name, int port, svr->created = 1; svr->reject_excess_clients = 0; svr->client_limit = -1; - svr->clients = ecore_list_new(); + svr->clients = NULL; svr->ppid = getpid(); ecore_con_ssl_server_prepare(svr); @@ -351,8 +351,8 @@ ecore_con_server_connect(Ecore_Con_Type compl_type, const char *name, int port, svr->data = (void *)data; svr->created = 0; svr->reject_excess_clients = 0; + svr->clients = NULL; svr->client_limit = -1; - svr->clients = ecore_list_new(); ecore_con_ssl_server_prepare(svr); type = compl_type & ECORE_CON_TYPE; @@ -551,7 +551,7 @@ ecore_con_server_connected_get(Ecore_Con_Server *svr) * @return The list of clients on this server. * @ingroup Ecore_Con_Server_Group */ -EAPI Ecore_List * +EAPI Eina_List * ecore_con_server_clients_get(Ecore_Con_Server *svr) { if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_CON_SERVER)) @@ -782,8 +782,7 @@ ecore_con_client_del(Ecore_Con_Client *cl) } else { - if (ecore_list_goto(cl->server->clients, cl)) - ecore_list_remove(cl->server->clients); + cl->server->clients = eina_list_remove(cl->server->clients, cl); _ecore_con_client_free(cl); } return data; @@ -864,6 +863,7 @@ ecore_con_client_flush(Ecore_Con_Client *cl) static void _ecore_con_server_free(Ecore_Con_Server *svr) { + Ecore_Con_Client *cl; double t_start, t; ECORE_MAGIC_SET(svr, ECORE_MAGIC_NONE); @@ -882,9 +882,12 @@ _ecore_con_server_free(Ecore_Con_Server *svr) } } if (svr->write_buf) free(svr->write_buf); - while (!ecore_list_empty_is(svr->clients)) - _ecore_con_client_free(ecore_list_first_remove(svr->clients)); - ecore_list_destroy(svr->clients); + while (svr->clients) + { + cl = eina_list_data_get(svr->clients); + svr->clients = eina_list_remove(svr->clients, cl); + _ecore_con_client_free(cl); + } if ((svr->created) && (svr->path) && (svr->ppid == getpid())) unlink(svr->path); if (svr->fd >= 0) close(svr->fd); @@ -1181,7 +1184,7 @@ _ecore_con_svr_handler(void *data, Ecore_Fd_Handler *fd_handler __UNUSED__) if (svr->delete_me) return 1; if ((svr->client_limit >= 0) && (!svr->reject_excess_clients)) { - if (ecore_list_count(svr->clients) >= svr->client_limit) return 1; + if (eina_list_count(svr->clients) >= svr->client_limit) return 1; } /* a new client */ size_in = sizeof(struct sockaddr_in); @@ -1223,7 +1226,7 @@ _ecore_con_svr_handler(void *data, Ecore_Fd_Handler *fd_handler __UNUSED__) ecore_main_fd_handler_add(cl->fd, ECORE_FD_READ, _ecore_con_svr_cl_handler, cl, NULL, NULL); ECORE_MAGIC_SET(cl, ECORE_MAGIC_CON_CLIENT); - ecore_list_append(svr->clients, cl); + eina_list_append(svr->clients, cl); if (!svr->path) { ip = incoming.sin_addr.s_addr; @@ -1422,7 +1425,7 @@ _ecore_con_svr_udp_handler(void *data, Ecore_Fd_Handler *fd_handler) } memcpy(cl->data, &client_addr, sizeof(client_addr)); ECORE_MAGIC_SET(cl, ECORE_MAGIC_CON_CLIENT); - ecore_list_append(svr->clients, cl); + eina_list_append(svr->clients, cl); ip = client_addr.sin_addr.s_addr; snprintf(ipbuf, sizeof(ipbuf), diff --git a/legacy/ecore/src/lib/ecore_con/ecore_con_private.h b/legacy/ecore/src/lib/ecore_con/ecore_con_private.h index db9fb60092..c3cbe9fbc5 100644 --- a/legacy/ecore/src/lib/ecore_con/ecore_con_private.h +++ b/legacy/ecore/src/lib/ecore_con/ecore_con_private.h @@ -72,7 +72,7 @@ struct _Ecore_Con_Server char *path; void *data; Ecore_Fd_Handler *fd_handler; - Ecore_List *clients; + Eina_List *clients; int write_buf_size; int write_buf_offset; unsigned char *write_buf; diff --git a/legacy/ecore/src/lib/ecore_desktop/Ecore_Desktop.h b/legacy/ecore/src/lib/ecore_desktop/Ecore_Desktop.h index 825e4e91df..2b728db9d7 100644 --- a/legacy/ecore/src/lib/ecore_desktop/Ecore_Desktop.h +++ b/legacy/ecore/src/lib/ecore_desktop/Ecore_Desktop.h @@ -34,7 +34,7 @@ struct _Ecore_Desktop * space and cycles that just covers up bugs. On the other hand, it makes * for a more robust library, and it's used everywhere else in ecore. */ - Ecore_Hash *data, *group, *Categories, *OnlyShowIn, *NotShowIn, *MimeTypes, *Actions; + Eina_Hash *data, *group, *Categories, *OnlyShowIn, *NotShowIn, *MimeTypes, *Actions; char *original_path; char *original_lang; char *eap_name; @@ -72,7 +72,7 @@ typedef struct _Ecore_Desktop Ecore_Desktop; struct _Ecore_Desktop_Icon_Theme { - Ecore_Hash *data, *group; + Eina_Hash *data, *group; Ecore_List *Inherits; Ecore_List *Directories; char *path; @@ -92,7 +92,7 @@ typedef struct _Ecore_Desktop_Icon_Theme Ecore_Desktop_Icon_Theme; struct _Ecore_Desktop_Icon_Theme_Directory { - Ecore_Hash *icons; + Eina_Hash *icons; char *path; char *full_path; char *type; @@ -201,12 +201,12 @@ extern "C" void *data); EAPI int ecore_desktop_paths_shutdown(void); - Ecore_Hash *ecore_desktop_paths_to_hash(const char *paths); + Eina_Hash *ecore_desktop_paths_to_hash(const char *paths); Ecore_List *ecore_desktop_paths_to_list(const char *paths); EAPI int ecore_desktop_init(void); EAPI int ecore_desktop_shutdown(void); - Ecore_Hash *ecore_desktop_ini_get(const char *file); + Eina_Hash *ecore_desktop_ini_get(const char *file); Ecore_Desktop *ecore_desktop_get(const char *file, const char *lang); void ecore_desktop_save(Ecore_Desktop * desktop); EAPI Ecore_List *ecore_desktop_get_command(Ecore_Desktop * desktop, @@ -220,7 +220,7 @@ extern "C" const char *icon_size, const char *icon_theme); - Ecore_Hash *ecore_desktop_icon_theme_list(void); + Eina_Hash *ecore_desktop_icon_theme_list(void); Ecore_Desktop_Icon_Theme *ecore_desktop_icon_theme_get(const char *file, const char *lang); void ecore_desktop_icon_theme_destroy(Ecore_Desktop_Icon_Theme @@ -228,7 +228,7 @@ extern "C" EAPI void ecore_desktop_menu_for_each(void (*func) - (const char *name, const char *path, const char *directory, Ecore_Hash * apps)); + (const char *name, const char *path, const char *directory, Eina_Hash * apps)); Ecore_Desktop_Tree *ecore_desktop_menu_get(char *file); Ecore_Desktop_Tree *ecore_desktop_tree_new(char *buffer); @@ -249,7 +249,7 @@ extern "C" Ecore_Desktop_Tree * element); Ecore_Desktop_Tree *ecore_desktop_tree_add_hash(Ecore_Desktop_Tree * tree, - Ecore_Hash * element); + Eina_Hash * element); void ecore_desktop_tree_remove(Ecore_Desktop_Tree * tree, int element); int ecore_desktop_tree_exist(Ecore_Desktop_Tree * tree, diff --git a/legacy/ecore/src/lib/ecore_desktop/ecore_desktop.c b/legacy/ecore/src/lib/ecore_desktop/ecore_desktop.c index 33a52c729f..e27f80addd 100644 --- a/legacy/ecore/src/lib/ecore_desktop/ecore_desktop.c +++ b/legacy/ecore/src/lib/ecore_desktop/ecore_desktop.c @@ -14,12 +14,12 @@ extern int reject_count, not_over_count; static int init_count = 0; -static Ecore_Hash *desktop_cache; +static Eina_Hash *desktop_cache = NULL; Ecore_Desktop *_ecore_desktop_get(const char *file, const char *lang); void _ecore_desktop_destroy(Ecore_Desktop * desktop); -#define IFGETDUP(src, key, dst) src = (char *)ecore_hash_get(result->group, key); if (src) dst = strdup(src); else dst = NULL; +#define IFGETDUP(src, key, dst) src = (char *)eina_hash_find(result->group, key); if (src) dst = strdup(src); else dst = NULL; #define IFFREE(src) if (src) free(src); src = NULL; /** @@ -33,35 +33,33 @@ void _ecore_desktop_destroy(Ecore_Desktop * desktop); /** * Get the contents of a .ini style file. * - * The Ecore_Hash returned is a two level hash, the first level + * The Eina_Hash returned is a two level hash, the first level * is the groups in the file, one per group, keyed by the name * of that group. The value of each of those first level hashes - * is the second level Ecore_Hash, the contents of each group. + * is the second level Eina_Hash, the contents of each group. * * @param file Full path to the .ini style file. - * @return An Ecore_Hash of the files contents. + * @return An Eina_Hash of the files contents. * @ingroup Ecore_Desktop_Main_Group */ -Ecore_Hash * +Eina_Hash * ecore_desktop_ini_get(const char *file) { - Ecore_Hash *result; + Eina_Hash *result; FILE *f; char buffer[PATH_MAX]; - Ecore_Hash *current = NULL; + Eina_Hash *current = NULL; - result = ecore_hash_new(ecore_str_hash, ecore_str_compare); + result = eina_hash_string_superfast_new(eina_hash_free); if (!result) return NULL; f = fopen(file, "r"); if (!f) { fprintf(stderr, "ERROR: Cannot Open File %s\n", file); - ecore_hash_destroy(result); + eina_hash_free(result); return NULL; } - ecore_hash_free_key_cb_set(result, free); - ecore_hash_free_value_cb_set(result, (Ecore_Free_Cb) ecore_hash_destroy); *buffer = '\0'; #ifdef DEBUG fprintf(stdout, "PARSING INI %s\n", file); @@ -84,12 +82,10 @@ ecore_desktop_ini_get(const char *file) while ((*c != ']') && (*c != '\n') && (*c != '\0')) c++; *c++ = '\0'; - current = ecore_hash_new(ecore_str_hash, ecore_str_compare); + current = ein_hash_string_superfast_new(free); if (current) { - ecore_hash_free_key_cb_set(current, free); - ecore_hash_free_value_cb_set(current, free); - ecore_hash_set(result, strdup(key), current); + eina_hash_add(result, key, current); #ifdef DEBUG fprintf(stdout, " GROUP [%s]\n", key); #endif @@ -121,10 +117,9 @@ ecore_desktop_ini_get(const char *file) c++; *c++ = '\0'; /* FIXME: should strip space at end, then unescape value. */ - tv = ecore_hash_remove(current, key); - if (tv) free(tv); + eina_hash_del(current, key); if (value[0] != '\0') - ecore_hash_set(current, strdup(key), strdup(value)); + eina_hash_add(current, key, strdup(value)); #ifdef DEBUG fprintf(stdout, " %s=%s\n", key, value); #endif @@ -158,7 +153,7 @@ ecore_desktop_get(const char *file, const char *lang) /* Kill the hash, it takes up way too much memory. */ if (result->data) { - ecore_hash_destroy(result->data); + eina_hash_free(result->data); result->data = NULL; } result->group = NULL; @@ -178,7 +173,7 @@ _ecore_desktop_get(const char *file, const char *lang) double begin; begin = ecore_time_get(); - result = (Ecore_Desktop *) ecore_hash_get(desktop_cache, (char *)file); + result = eina_hash_find(desktop_cache, (char *)file); /* Check if the cache is still valid. */ if (result) { @@ -187,7 +182,7 @@ _ecore_desktop_get(const char *file, const char *lang) { if (st.st_mtime > result->mtime) { - ecore_hash_remove(desktop_cache, result->original_path); + eina_hash_del(desktop_cache, result->original_path); result = NULL; } stated = 1; @@ -214,9 +209,9 @@ _ecore_desktop_get(const char *file, const char *lang) /* Timestamp the cache, and no need to stat the file twice if the cache was stale. */ if ((stated) || (stat(result->original_path, &st) >= 0)) result->mtime = st.st_mtime; - result->group = ecore_hash_get(result->data, "Desktop Entry"); + result->group = eina_hash_find(result->data, "Desktop Entry"); if (!result->group) - result->group = ecore_hash_get(result->data, "KDE Desktop Entry"); + result->group = eina_hash_find(result->data, "KDE Desktop Entry"); /* This is a "Desktop" file, probably an application. */ if (result->group) { @@ -428,42 +423,42 @@ _ecore_desktop_get(const char *file, const char *lang) } } - value = ecore_hash_get(result->group, "MimeType"); + value = eina_hash_find(result->group, "MimeType"); if (value) result->MimeTypes = ecore_desktop_paths_to_hash(value); - value = ecore_hash_get(result->group, "Actions"); + value = eina_hash_find(result->group, "Actions"); if (value) result->Actions = ecore_desktop_paths_to_hash(value); - value = ecore_hash_get(result->group, "OnlyShowIn"); + value = eina_hash_find(result->group, "OnlyShowIn"); if (value) result->OnlyShowIn = ecore_desktop_paths_to_hash(value); - value = ecore_hash_get(result->group, "NotShowIn"); + value = eina_hash_find(result->group, "NotShowIn"); if (value) result->NotShowIn = ecore_desktop_paths_to_hash(value); - value = ecore_hash_get(result->group, "X-KDE-StartupNotify"); + value = eina_hash_find(result->group, "X-KDE-StartupNotify"); if (value) result->startup = (strcmp(value, "true") == 0); - value = ecore_hash_get(result->group, "StartupNotify"); + value = eina_hash_find(result->group, "StartupNotify"); if (value) result->startup = (strcmp(value, "true") == 0); - value = ecore_hash_get(result->group, "X-Enlightenment-WaitExit"); + value = eina_hash_find(result->group, "X-Enlightenment-WaitExit"); if (value) result->wait_exit = (strcmp(value, "true") == 0); - value = ecore_hash_get(result->group, "NoDisplay"); + value = eina_hash_find(result->group, "NoDisplay"); if (value) result->no_display = (strcmp(value, "true") == 0); - value = ecore_hash_get(result->group, "Hidden"); + value = eina_hash_find(result->group, "Hidden"); if (value) result->hidden = (strcmp(value, "true") == 0); } else { /*Maybe it's a 'trash' file - which also follows the Desktop FDO spec */ - result->group = ecore_hash_get(result->data, "Trash Info"); + result->group = eina_hash_find(result->data, "Trash Info"); if (result->group) { IFGETDUP(value, "Path", result->path); @@ -479,7 +474,7 @@ _ecore_desktop_get(const char *file, const char *lang) result = NULL; } else - ecore_hash_set(desktop_cache, strdup(result->original_path), result); + eina_hash_add(desktop_cache, result->original_path, result); } error: @@ -504,6 +499,13 @@ error: return result; } +static Eina_Bool +_hash_keys(Eina_Hash *hash, const void *key, void *data, void *list) +{ + ecore_list_append(list, key); + return EINA_TRUE; +} + void ecore_desktop_save(Ecore_Desktop * desktop) { @@ -517,27 +519,20 @@ ecore_desktop_save(Ecore_Desktop * desktop) { desktop->data = ecore_desktop_ini_get(desktop->original_path); desktop->group = - (Ecore_Hash *) ecore_hash_get(desktop->data, "Desktop Entry"); + (Eina_Hash *) eina_hash_find(desktop->data, "Desktop Entry"); if (!desktop->group) desktop->group = - (Ecore_Hash *) ecore_hash_get(desktop->data, + (Eina_Hash *) eina_hash_find(desktop->data, "KDE Desktop Entry"); if (!desktop->group) { trash = 1; desktop->group = - (Ecore_Hash *) ecore_hash_get(desktop->data, "Trash Info"); + (Eina_Hash *) eina_hash_find(desktop->data, "Trash Info"); } } else - { - desktop->group = ecore_hash_new(ecore_str_hash, ecore_str_compare); - if (desktop->group) - { - ecore_hash_free_key_cb_set(desktop->group, free); - ecore_hash_free_value_cb_set(desktop->group, free); - } - } + desktop->group = eina_hash_string_superfast_new(free); } if (desktop->group) @@ -552,9 +547,9 @@ ecore_desktop_save(Ecore_Desktop * desktop) real = ecore_file_readlink(desktop->original_path); if (real) - ecore_hash_set(desktop->group, - strdup("X-Enlightenment-OriginalPath"), - real); + eina_hash_add(desktop->group, + "X-Enlightenment-OriginalPath", + real); } } @@ -562,106 +557,119 @@ ecore_desktop_save(Ecore_Desktop * desktop) commands = ecore_desktop_get_command(desktop, NULL, 0); if (commands) { - temp = ecore_list_first(commands); - if (temp) - ecore_hash_set(desktop->group, strdup("Exec"), strdup(temp)); - ecore_list_destroy(commands); + temp = ecore_list_first(commands); + if (temp) + eina_hash_add(desktop->group, "Exec", strdup(temp)); + ecore_list_destroy(commands); } if (desktop->name) - ecore_hash_set(desktop->group, strdup("Name"), - strdup(desktop->name)); + eina_hash_add(desktop->group, "Name", + strdup(desktop->name)); if (desktop->generic) - ecore_hash_set(desktop->group, strdup("GenericName"), - strdup(desktop->generic)); + eina_hash_add(desktop->group, "GenericName", + strdup(desktop->generic)); if (desktop->comment) - ecore_hash_set(desktop->group, strdup("Comment"), - strdup(desktop->comment)); + eina_hash_add(desktop->group, "Comment", + strdup(desktop->comment)); if (desktop->type) - ecore_hash_set(desktop->group, strdup("Type"), - strdup(desktop->type)); + eina_hash_add(desktop->group, "Type", + strdup(desktop->type)); if (desktop->URL) - ecore_hash_set(desktop->group, strdup("URL"), strdup(desktop->URL)); + eina_hash_add(desktop->group, "URL", strdup(desktop->URL)); if (desktop->file) - ecore_hash_set(desktop->group, strdup("File"), - strdup(desktop->file)); + eina_hash_add(desktop->group, "File", + strdup(desktop->file)); if (desktop->icon) - ecore_hash_set(desktop->group, strdup("Icon"), - strdup(desktop->icon)); + eina_hash_add(desktop->group, "Icon", + strdup(desktop->icon)); if (desktop->icon_theme) - ecore_hash_set(desktop->group, strdup("X-Enlightenment-IconTheme"), - strdup(desktop->icon_theme)); + eina_hash_add(desktop->group, "X-Enlightenment-IconTheme", + strdup(desktop->icon_theme)); else - ecore_hash_remove(desktop->group, "X-Enlightenment-IconTheme"); + eina_hash_del(desktop->group, "X-Enlightenment-IconTheme"); if (desktop->icon_class) - ecore_hash_set(desktop->group, strdup("X-Enlightenment-IconClass"), - strdup(desktop->icon_class)); + eina_hash_add(desktop->group, "X-Enlightenment-IconClass", + strdup(desktop->icon_class)); else - ecore_hash_remove(desktop->group, "X-Enlightenment-IconClass"); + eina_hash_del(desktop->group, "X-Enlightenment-IconClass"); if (desktop->icon_path) - ecore_hash_set(desktop->group, strdup("X-Enlightenment-IconPath"), - strdup(desktop->icon_path)); + eina_hash_add(desktop->group, "X-Enlightenment-IconPath", + strdup(desktop->icon_path)); else - ecore_hash_remove(desktop->group, "X-Enlightenment-IconPath"); + eina_hash_del(desktop->group, "X-Enlightenment-IconPath"); if (desktop->window_class) - ecore_hash_set(desktop->group, strdup("StartupWMClass"), - strdup(desktop->window_class)); + eina_hash_add(desktop->group, "StartupWMClass", + strdup(desktop->window_class)); if (desktop->categories) - ecore_hash_set(desktop->group, strdup("Categories"), - strdup(desktop->categories)); + eina_hash_add(desktop->group, "Categories", + strdup(desktop->categories)); if (desktop->window_name) - ecore_hash_set(desktop->group, strdup("X-Enlightenment-WindowName"), - strdup(desktop->window_name)); + eina_hash_add(desktop->group, "X-Enlightenment-WindowName", + strdup(desktop->window_name)); else - ecore_hash_remove(desktop->group, "X-Enlightenment-WindowName"); + eina_hash_del(desktop->group, "X-Enlightenment-WindowName"); if (desktop->window_title) - ecore_hash_set(desktop->group, strdup("X-Enlightenment-WindowTitle"), - strdup(desktop->window_title)); + eina_hash_add(desktop->group, "X-Enlightenment-WindowTitle", + strdup(desktop->window_title)); else - ecore_hash_remove(desktop->group, "X-Enlightenment-WindowTitle"); + eina_hash_del(desktop->group, "X-Enlightenment-WindowTitle"); if (desktop->window_role) - ecore_hash_set(desktop->group, strdup("X-Enlightenment-WindowRole"), - strdup(desktop->window_role)); + eina_hash_add(desktop->group, "X-Enlightenment-WindowRole", + strdup(desktop->window_role)); else - ecore_hash_remove(desktop->group, "X-Enlightenment-WindowRole"); - ecore_hash_remove(desktop->group, "X-KDE-StartupNotify"); + eina_hash_del(desktop->group, "X-Enlightenment-WindowRole"); + eina_hash_del(desktop->group, "X-KDE-StartupNotify"); if (desktop->wait_exit) - ecore_hash_set(desktop->group, strdup("X-Enlightenment-WaitExit"), - strdup("true")); + eina_hash_add(desktop->group, "X-Enlightenment-WaitExit", + strdup("true")); else - ecore_hash_remove(desktop->group, "X-Enlightenment-WaitExit"); + eina_hash_del(desktop->group, "X-Enlightenment-WaitExit"); if (desktop->startup) - ecore_hash_set(desktop->group, strdup("StartupNotify"), - strdup("true")); + eina_hash_add(desktop->group, "StartupNotify", + strdup("true")); else - ecore_hash_remove(desktop->group, "StartupNotify"); + eina_hash_del(desktop->group, "StartupNotify"); if (desktop->no_display) - ecore_hash_set(desktop->group, strdup("NoDisplay"), strdup("true")); + eina_hash_add(desktop->group, "NoDisplay", strdup("true")); else - ecore_hash_remove(desktop->group, "NoDisplay"); + eina_hash_del(desktop->group, "NoDisplay"); if (desktop->hidden) - ecore_hash_set(desktop->group, strdup("Hidden"), strdup("true")); + eina_hash_add(desktop->group, "Hidden", strdup("true")); else - ecore_hash_remove(desktop->group, "Hidden"); + eina_hash_del(desktop->group, "Hidden"); /* FIXME: deal with the ShowIn's and mime stuff. */ if (desktop->path) - ecore_hash_set(desktop->group, strdup("Path"), - strdup(desktop->path)); + eina_hash_add(desktop->group, "Path", + strdup(desktop->path)); if (desktop->deletiondate) - ecore_hash_set(desktop->group, strdup("DeletionDate"), - strdup(desktop->deletiondate)); + eina_hash_add(desktop->group, "DeletionDate", + strdup(desktop->deletiondate)); if (desktop->original_path) { FILE *f; Ecore_List *list; char *key; + Eina_Iterator *it = NULL; ecore_file_unlink(desktop->original_path); f = fopen(desktop->original_path, "wb"); - list = ecore_hash_keys(desktop->group); + + if ((list = ecore_list_new())) + return; + + if ((it = eina_hash_iterator_key_new(desktop->group))) + { + ecore_list_destroy(list); + return; + } + + eina_iterator_foreach(it, EINA_EACH(_hash_keys), list); + eina_iterator_free(it); + if ((!f) || (!list)) return; @@ -674,7 +682,7 @@ ecore_desktop_save(Ecore_Desktop * desktop) { char *value; - value = (char *)ecore_hash_get(desktop->group, key); + value = (char *)eina_hash_find(desktop->group, key); if ((value) && (value[0] != '\0')) fprintf(f, "%s=%s\n", key, value); } @@ -683,11 +691,11 @@ ecore_desktop_save(Ecore_Desktop * desktop) if (desktop->data) { - ecore_hash_destroy(desktop->data); + eina_hash_free(desktop->data); desktop->data = NULL; } else - ecore_hash_destroy(desktop->group); + eina_hash_free(desktop->group); desktop->group = NULL; } } @@ -710,15 +718,7 @@ ecore_desktop_init() return --init_count; if (!desktop_cache) - { - desktop_cache = ecore_hash_new(ecore_str_hash, ecore_str_compare); - if (desktop_cache) - { - ecore_hash_free_key_cb_set(desktop_cache, free); - ecore_hash_free_value_cb_set(desktop_cache, - (Ecore_Free_Cb) _ecore_desktop_destroy); - } - } + desktop_cache = eina_hash_string_superfast_new(_ecore_desktop_destroy); if (!ecore_desktop_icon_init()) return --init_count; @@ -744,7 +744,7 @@ ecore_desktop_shutdown() if (desktop_cache) { - ecore_hash_destroy(desktop_cache); + eina_hash_free(desktop_cache); desktop_cache = NULL; } @@ -795,14 +795,14 @@ _ecore_desktop_destroy(Ecore_Desktop * desktop) IFFREE(desktop->window_name); IFFREE(desktop->window_title); IFFREE(desktop->window_role); - if (desktop->NotShowIn) ecore_hash_destroy(desktop->NotShowIn); - if (desktop->OnlyShowIn) ecore_hash_destroy(desktop->OnlyShowIn); - if (desktop->Categories) ecore_hash_destroy(desktop->Categories); - if (desktop->MimeTypes) ecore_hash_destroy(desktop->MimeTypes); - if (desktop->Actions) ecore_hash_destroy(desktop->Actions); + if (desktop->NotShowIn) eina_hash_free(desktop->NotShowIn); + if (desktop->OnlyShowIn) eina_hash_free(desktop->OnlyShowIn); + if (desktop->Categories) eina_hash_free(desktop->Categories); + if (desktop->MimeTypes) eina_hash_free(desktop->MimeTypes); + if (desktop->Actions) eina_hash_free(desktop->Actions); if (desktop->data) { - ecore_hash_destroy(desktop->data); + eina_hash_free(desktop->data); desktop->data = NULL; } desktop->group = NULL; diff --git a/legacy/ecore/src/lib/ecore_desktop/ecore_desktop_icon.c b/legacy/ecore/src/lib/ecore_desktop/ecore_desktop_icon.c index 618e3c8dfb..429628bd8b 100644 --- a/legacy/ecore/src/lib/ecore_desktop/ecore_desktop_icon.c +++ b/legacy/ecore/src/lib/ecore_desktop/ecore_desktop_icon.c @@ -29,7 +29,7 @@ _ecore_desktop_icon_theme_cache_check(Ecore_Desktop_Icon_Theme *icon_theme); static const char *ext[] = { "", ".edj", ".png", ".svgz", ".svg", ".xpm", NULL }; /* "" is in case the icon already has an extension, search for that first. */ static int init_count = 0; -static Ecore_Hash *icon_theme_cache = NULL; +static Eina_Hash *icon_theme_cache = NULL; /** * @defgroup Ecore_Desktop_Icon_Group icon theme Functions @@ -233,7 +233,7 @@ _ecore_desktop_icon_find0(const char *icon, const char *icon_size, #ifdef DEBUG printf("FDO icon = %s\n", path); #endif - found = ecore_hash_get(directory->icons, path); + found = eina_hash_find(directory->icons, path); if (found) { found = strdup(found); @@ -341,7 +341,7 @@ done: return found; } -Ecore_Hash * +Eina_Hash* ecore_desktop_icon_theme_list(void) { static int loaded = 0; @@ -382,15 +382,7 @@ ecore_desktop_icon_init() return init_count; if (!icon_theme_cache) - { - icon_theme_cache = ecore_hash_new(ecore_str_hash, ecore_str_compare); - if (icon_theme_cache) - { - ecore_hash_free_key_cb_set(icon_theme_cache, free); - ecore_hash_free_value_cb_set(icon_theme_cache, - ECORE_FREE_CB(_ecore_desktop_icon_theme_destroy)); - } - } + icon_theme_cache = eina_hash_string_superfast_new(_ecore_desktop_icon_theme_destroy); return init_count; } @@ -411,7 +403,7 @@ ecore_desktop_icon_shutdown() if (icon_theme_cache) { - ecore_hash_destroy(icon_theme_cache); + eina_hash_free(icon_theme_cache); icon_theme_cache = NULL; } @@ -422,7 +414,7 @@ ecore_desktop_icon_shutdown() * Get the contents of an index.theme file. * * Everything that is in the index.theme file is returned in the - * data member of the Ecore_Desktop_Icon_Theme structure, it's an Ecore_Hash + * data member of the Ecore_Desktop_Icon_Theme structure, it's an Eina_Hash * as returned by ecore_desktop_ini_get(). Some of the data in the * index.theme file is decoded into specific members of the returned * structure. @@ -454,7 +446,7 @@ ecore_desktop_icon_theme_get(const char *icon_theme, const char *lang __UNUSED__ #endif } - result = ecore_hash_get(icon_theme_cache, icon_theme); + result = eina_hash_find(icon_theme_cache, icon_theme); if (result) goto done; if (!theme_dir) { @@ -474,7 +466,7 @@ ecore_desktop_icon_theme_get(const char *icon_theme, const char *lang __UNUSED__ if (!result) goto error; result->data = ecore_desktop_ini_get(theme_path); if (!result->data) goto error; - result->group = ecore_hash_get(result->data, "Icon Theme"); + result->group = eina_hash_find(result->data, "Icon Theme"); if (!result->group) goto error; @@ -482,23 +474,23 @@ ecore_desktop_icon_theme_get(const char *icon_theme, const char *lang __UNUSED__ result->hicolor = 1; /* According to the spec, name and comment are required, but we can fake those easily enough. */ - value = ecore_hash_get(result->group, "Name"); + value = eina_hash_find(result->group, "Name"); if (!value) value = icon_theme; result->name = strdup(value); - value = ecore_hash_get(result->group, "Comment"); + value = eina_hash_find(result->group, "Comment"); if (!value) value = "No comment provided."; result->comment = strdup(value); - value = ecore_hash_get(result->group, "Inherits"); + value = eina_hash_find(result->group, "Inherits"); if (value) { result->inherits = strdup(value); if (result->inherits) result->Inherits = ecore_desktop_paths_to_list(result->inherits); } - value = ecore_hash_get(result->group, "Example"); + value = eina_hash_find(result->group, "Example"); if (!value) value = "exec"; result->example = strdup(value); - value = ecore_hash_get(result->group, "Directories"); + value = eina_hash_find(result->group, "Directories"); /* FIXME: Directories is also required, don't feel like faking it for now. */ if (!value) goto error; result->directories = strdup(value); @@ -511,11 +503,11 @@ ecore_desktop_icon_theme_get(const char *icon_theme, const char *lang __UNUSED__ ecore_list_first_goto(Directories); while ((directory = ecore_list_next(Directories)) != NULL) { - Ecore_Hash *sub_group; + Eina_Hash *sub_group; Ecore_Desktop_Icon_Theme_Directory *dir; /* Get the details for this theme directory. */ - sub_group = ecore_hash_get(result->data, directory); + sub_group = eina_hash_find(result->data, directory); dir = calloc(1, sizeof (Ecore_Desktop_Icon_Theme_Directory)); if ((dir) && (sub_group)) { @@ -525,14 +517,14 @@ ecore_desktop_icon_theme_get(const char *icon_theme, const char *lang __UNUSED__ dir->path = strdup(directory); snprintf(full_path, PATH_MAX, "%s/%s", theme_dir, directory); dir->full_path = strdup(full_path); - value = ecore_hash_get(sub_group, "Type"); + value = eina_hash_find(sub_group, "Type"); if (!value) value = "Threshold"; dir->type = strdup(value); - size = ecore_hash_get(sub_group, "Size"); - minsize = ecore_hash_get(sub_group, "MinSize"); - maxsize = ecore_hash_get(sub_group, "MaxSize"); - threshold = ecore_hash_get(sub_group, "Threshold"); + size = eina_hash_find(sub_group, "Size"); + minsize = eina_hash_find(sub_group, "MinSize"); + maxsize = eina_hash_find(sub_group, "MaxSize"); + threshold = eina_hash_find(sub_group, "Threshold"); if (size) { if (!minsize) @@ -558,8 +550,8 @@ ecore_desktop_icon_theme_get(const char *icon_theme, const char *lang __UNUSED__ /* This passes the basic validation tests, mark it as real and cache it. */ result->path = strdup(theme_path); - ecore_hash_set(icon_theme_cache, strdup(icon_theme), result); - ecore_hash_destroy(result->data); + eina_hash_add(icon_theme_cache, icon_theme, result); + eina_hash_free(result->data); result->data = NULL; result->group = NULL; @@ -576,7 +568,7 @@ error: if (theme_path) free(theme_path); if (result) { - if (result->data) ecore_hash_destroy(result->data); + if (result->data) eina_hash_free(result->data); _ecore_desktop_icon_theme_destroy(result); } return NULL; @@ -633,7 +625,7 @@ _ecore_desktop_icon_theme_directory_destroy(Ecore_Desktop_Icon_Theme_Directory * if (icon_theme_directory->type) free(icon_theme_directory->type); if (icon_theme_directory->icons) - ecore_hash_destroy(icon_theme_directory->icons); + eina_hash_free(icon_theme_directory->icons); free(icon_theme_directory); } @@ -686,16 +678,14 @@ _ecore_desktop_icon_theme_cache_check(Ecore_Desktop_Icon_Theme *icon_theme) { if (dir->icons) { - ecore_hash_destroy(dir->icons); + eina_hash_free(dir->icons); dir->icons = NULL; } - dir->icons = ecore_hash_new(ecore_str_hash, ecore_str_compare); + dir->icons = eina_hash_string_superfast_new(NULL); if (dir->icons) { Ecore_List *files; - ecore_hash_free_key_cb_set(dir->icons, free); - ecore_hash_free_value_cb_set(dir->icons, free); files = ecore_file_ls(dir->full_path); if (files) { @@ -704,7 +694,7 @@ _ecore_desktop_icon_theme_cache_check(Ecore_Desktop_Icon_Theme *icon_theme) while ((file = ecore_list_next(files))) { snprintf(full_path, PATH_MAX, "%s/%s", dir->full_path, file); - ecore_hash_set(dir->icons, strdup(file), strdup(full_path)); + eina_hash_add(dir->icons, file, strdup(full_path)); } ecore_list_destroy(files); } diff --git a/legacy/ecore/src/lib/ecore_desktop/ecore_desktop_menu.c b/legacy/ecore/src/lib/ecore_desktop/ecore_desktop_menu.c index 3afc397966..85bdb20341 100644 --- a/legacy/ecore/src/lib/ecore_desktop/ecore_desktop_menu.c +++ b/legacy/ecore/src/lib/ecore_desktop/ecore_desktop_menu.c @@ -24,7 +24,7 @@ struct _ecore_desktop_menu_expand_apps_data { char *path; - Ecore_Hash *pool; + Eina_Hash *pool; int length; }; @@ -41,7 +41,7 @@ struct _ecore_desktop_menu_generate_data { char *name, *path; Ecore_Desktop_Tree *rules; - Ecore_Hash *pool, *apps; + Eina_Hash *pool, *apps; int unallocated; Ecore_Desktop_Tree *rule; @@ -88,7 +88,7 @@ static void _ecore_desktop_menu_add_dirs(Ecore_Desktop_Tree * tree, static int _ecore_desktop_menu_expand_apps(struct _ecore_desktop_menu_unxml_data *unxml_data, char *app_dir, - Ecore_Hash * pool); + Eina_Hash * pool); static int _ecore_desktop_menu_check_app(void *data, const char *path); static int _ecore_desktop_menu_merge(const void *data, @@ -123,7 +123,7 @@ static int _ecore_desktop_menu_apply_rules(struct EAPI void ecore_desktop_menu_for_each(void (*func) - (const char *name, const char *path, const char *directory, Ecore_Hash * apps)) + (const char *name, const char *path, const char *directory, Eina_Hash * apps)) { char *menu_file; @@ -177,9 +177,9 @@ _ecore_desktop_menu_make_apps(const void *data, Ecore_Desktop_Tree * tree, char *path; char *name; char *directory; - Ecore_Hash *apps; + Eina_Hash *apps; void (*func) (char *name, char *path, char *directory, - Ecore_Hash * apps); + Eina_Hash * apps); func = data; name = (char *)tree->elements[element].element; @@ -206,8 +206,8 @@ _ecore_desktop_menu_make_apps(const void *data, Ecore_Desktop_Tree * tree, else directory = NULL; path = (char *)tree->elements[element + 1].element; -// pool = (Ecore_Hash *) tree->elements[element + 2].element; - apps = (Ecore_Hash *) tree->elements[element + 4].element; +// pool = (Eina_Hash *) tree->elements[element + 2].element; + apps = (Eina_Hash *) tree->elements[element + 4].element; path = &path[11]; #ifdef DEBUG printf("OUTPUTTING MENU - %s \t\t%s \t\t%s\n", path, name, directory); @@ -650,18 +650,14 @@ static Ecore_Desktop_Tree * _ecore_desktop_menu_create_menu() { Ecore_Desktop_Tree *menu, *rules; - Ecore_Hash *pool, *apps; + Eina_Hash *pool, *apps; menu = ecore_desktop_tree_new(NULL); rules = ecore_desktop_tree_new(NULL); - pool = ecore_hash_new(ecore_str_hash, ecore_str_compare); - apps = ecore_hash_new(ecore_str_hash, ecore_str_compare); + pool = eina_hash_string_superfast_new(free); + apps = eina_hash_string_superfast_new(free); if ((menu) && (rules) && (pool) && (apps)) { - ecore_hash_free_key_cb_set(pool, free); - ecore_hash_free_value_cb_set(pool, free); - ecore_hash_free_key_cb_set(apps, free); - ecore_hash_free_value_cb_set(apps, free); ecore_desktop_tree_extend(menu, " <> <>"); ecore_desktop_tree_extend(menu, "current->elements[2].element; + pool = (Eina_Hash *) legacy_data->current->elements[2].element; rules = (Ecore_Desktop_Tree *) legacy_data->current->elements[3].element; if (rules->size == 0) @@ -904,7 +900,7 @@ _ecore_desktop_menu_legacy_menu(void *data, const char *path) ecore_desktop_tree_add_child(rules, new_rules); } sprintf(temp, "%s%s", legacy_data->prefix, file); - ecore_hash_set(pool, strdup(temp), strdup(path)); + eina_hash_add(pool, temp, strdup(path)); #ifdef DEBUG // printf // ("POOLING - _ecore_desktop_menu_legacy_menu(void *data, %s) - %s - %s\n", @@ -1066,7 +1062,7 @@ _ecore_desktop_menu_add_dirs(Ecore_Desktop_Tree * tree, Ecore_List * paths, static int _ecore_desktop_menu_expand_apps(struct _ecore_desktop_menu_unxml_data - *unxml_data, char *app_dir, Ecore_Hash * pool) + *unxml_data, char *app_dir, Eina_Hash * pool) { if (pool) { @@ -1107,12 +1103,17 @@ _ecore_desktop_menu_check_app(void *data, const char *path) char *file; file = strdup(path + our_data->length); - if ((file) && (path)) + if (file) { - for (i = 0; file[i] != '\0'; i++) - if (file[i] == '/') - file[i] = '-'; - ecore_hash_set(our_data->pool, file, strdup(path)); + if (path) + { + for (i = 0; file[i] != '\0'; i++) + if (file[i] == '/') + file[i] = '-'; + eina_hash_add(our_data->pool, file, strdup(path)); + } + free(file); + } #ifdef DEBUG // printf // ("POOLING - _ecore_desktop_menu_check_app(void *data, %s) - %s\n", @@ -1423,9 +1424,9 @@ _ecore_desktop_menu_generate(const void *data, Ecore_Desktop_Tree * tree, generate_data.unallocated = unxml_data->unallocated; generate_data.name = (char *)tree->elements[element].element; generate_data.path = (char *)tree->elements[element + 1].element; - generate_data.pool = (Ecore_Hash *) tree->elements[element + 2].element; + generate_data.pool = (Eina_Hash *) tree->elements[element + 2].element; generate_data.rules = (Ecore_Desktop_Tree *) tree->elements[element + 3].element; - generate_data.apps = (Ecore_Hash *) tree->elements[element + 4].element; + generate_data.apps = (Eina_Hash *) tree->elements[element + 4].element; /* generate and inherit the pools on the first pass, and preparse the include/exclude logic. */ if (!generate_data.unallocated) @@ -1511,10 +1512,10 @@ _ecore_desktop_menu_generate(const void *data, Ecore_Desktop_Tree * tree, { if (unxml_data->stack->elements[i].type == ECORE_DESKTOP_TREE_ELEMENT_TYPE_HASH) { - Ecore_Hash *ancestor; + Eina_Hash *ancestor; - ancestor = (Ecore_Hash *) unxml_data->stack->elements[i].element; - ecore_hash_for_each_node(ancestor, _ecore_desktop_menu_inherit_apps, generate_data.pool); + ancestor = (Eina_Hash *) unxml_data->stack->elements[i].element; + eina_hash_foreach(ancestor, _ecore_desktop_menu_inherit_apps, generate_data.pool); } } } @@ -1542,12 +1543,12 @@ _ecore_desktop_menu_generate(const void *data, Ecore_Desktop_Tree * tree, if (type == 'I') { generate_data.include = TRUE; - ecore_hash_for_each_node(generate_data.pool, _ecore_desktop_menu_select_app, &generate_data); + eina_hash_foreach(generate_data.pool, _ecore_desktop_menu_select_app, &generate_data); } else { generate_data.include = FALSE; - ecore_hash_for_each_node(generate_data.apps, _ecore_desktop_menu_select_app, &generate_data); + eina_hash_foreach(generate_data.apps, _ecore_desktop_menu_select_app, &generate_data); } } } @@ -1575,39 +1576,26 @@ _ecore_desktop_menu_is_include(const void *data, Ecore_Desktop_Tree * tree, int return 0; } -static void -_ecore_desktop_menu_inherit_apps(void *value, void *user_data) +static Eina_Bool +_ecore_desktop_menu_inherit_apps(const Eina_Hash *hash, const void *key, void *value, void *user_data) { - Ecore_Hash_Node *node; - Ecore_Hash *pool; - char *key, *app; - - pool = (Ecore_Hash *) user_data; - node = (Ecore_Hash_Node *) value; - key = (char *)node->key; - app = (char *)node->value; #ifdef DEBUG // printf("CHECKING %s - %s\n", app, key); #endif - if (!ecore_hash_get(pool, key)) - ecore_hash_set(pool, strdup(key), strdup(app)); + if (!eina_hash_find(user_data, key)) + eina_hash_add(user_data, key, strdup(value)); } static void -_ecore_desktop_menu_select_app(void *value, void *user_data) +_ecore_desktop_menu_select_app(const Eina_Hash *hash, const void *key, void *value, void *user_data) { - Ecore_Hash_Node *node; Ecore_Desktop *desktop; struct _ecore_desktop_menu_generate_data *generate_data; - char *key, *app; - node = (Ecore_Hash_Node *) value; generate_data = (struct _ecore_desktop_menu_generate_data *)user_data; - key = (char *)node->key; - app = (char *)node->value; /* FIXME: pass an actuall language parameter. */ - desktop = ecore_desktop_get(app, NULL); + desktop = ecore_desktop_get(value, NULL); if (desktop) { @@ -1619,16 +1607,16 @@ _ecore_desktop_menu_select_app(void *value, void *user_data) desktop->allocated = TRUE; if (generate_data->include) { - ecore_hash_set(generate_data->apps, key, strdup(app)); + eina_hash_add(generate_data->apps, key, strdup(value)); #ifdef DEBUG - printf("INCLUDING %s%s - %s\n", ((generate_data->unallocated) ? "UNALLOCATED " : ""), app, key); + printf("INCLUDING %s%s - %s\n", ((generate_data->unallocated) ? "UNALLOCATED " : ""), value, key); #endif } else { - ecore_hash_remove(generate_data->apps, key); + eina_hash_del(generate_data->apps, key); #ifdef DEBUG - printf("EXCLUDING %s%s - %s\n", ((generate_data->unallocated) ? "UNALLOCATED " : ""), app, key); + printf("EXCLUDING %s%s - %s\n", ((generate_data->unallocated) ? "UNALLOCATED " : ""), value, key); #endif } } @@ -1675,7 +1663,7 @@ _ecore_desktop_menu_apply_rules(struct _ecore_desktop_menu_generate_data *genera case 'C': { /* Try to match a category. */ - if ((desktop->Categories) && (ecore_hash_get(desktop->Categories, &rul[4]) != NULL)) + if ((desktop->Categories) && (eina_hash_find(desktop->Categories, &rul[4]) != NULL)) sub_result = TRUE; break; } diff --git a/legacy/ecore/src/lib/ecore_desktop/ecore_desktop_paths.c b/legacy/ecore/src/lib/ecore_desktop/ecore_desktop_paths.c index ec3975e04f..9e7ea86e89 100644 --- a/legacy/ecore/src/lib/ecore_desktop/ecore_desktop_paths.c +++ b/legacy/ecore/src/lib/ecore_desktop/ecore_desktop_paths.c @@ -898,25 +898,23 @@ _ecore_desktop_paths_cb_exe_exit(void *data, int type, void *event) } #endif -/** Split a list of paths into an Ecore_Hash. +/** Split a list of paths into an Eina_Hash. * * The list of paths can use any one of ;:, to seperate the paths. * You can also escape the :;, with \. * * @param paths A list of paths. */ -Ecore_Hash * +Eina_Hash* ecore_desktop_paths_to_hash(const char *paths) { - Ecore_Hash *result; + Eina_Hash *result; char *path; char buf[PATH_MAX], *p, *pp; if (!paths) return NULL; - result = ecore_hash_new(ecore_str_hash, ecore_str_compare); + result = eina_hash_string_superfast_new(free); if (!result) return NULL; - ecore_hash_free_key_cb_set(result, free); - ecore_hash_free_value_cb_set(result, free); path = strdup(paths); if (path) @@ -942,7 +940,7 @@ ecore_desktop_paths_to_hash(const char *paths) p++; } *pp = '\0'; - if (*buf) ecore_hash_set(result, strdup(buf), strdup(buf)); + if (*buf) eina_hash_add(result, buf, strdup(buf)); if (*p) p++; else p = NULL; } @@ -951,7 +949,7 @@ ecore_desktop_paths_to_hash(const char *paths) return result; } -/** Split a list of paths into an Ecore_Hash. +/** Split a list of paths into an Eina_Hash. * * The list of paths can use any one of ;:, to seperate the paths. * You can also escape the :;, with \. diff --git a/legacy/ecore/src/lib/ecore_desktop/ecore_desktop_tree.c b/legacy/ecore/src/lib/ecore_desktop/ecore_desktop_tree.c index e8bf09ef77..8abfb78b5c 100644 --- a/legacy/ecore/src/lib/ecore_desktop/ecore_desktop_tree.c +++ b/legacy/ecore/src/lib/ecore_desktop/ecore_desktop_tree.c @@ -3,8 +3,11 @@ #include "Ecore_Desktop.h" #include "ecore_desktop_private.h" -static void ecore_desktop_tree_dump_each_hash_node(void *value, - void *user_data); +static Eina_Bool +ecore_desktop_tree_dump_each_hash_node(const Eina_Hash *hash, + const void *key, + void *value, + void *user_data); /* Just a quick and dirty tree implemtation that will likely get replaced by * something much saner at a later date. I wrote most of this while falling @@ -172,7 +175,7 @@ ecore_desktop_tree_add_child(Ecore_Desktop_Tree * tree, } Ecore_Desktop_Tree * -ecore_desktop_tree_add_hash(Ecore_Desktop_Tree * tree, Ecore_Hash * element) +ecore_desktop_tree_add_hash(Ecore_Desktop_Tree * tree, Eina_Hash * element) { tree->elements = (Ecore_Desktop_Tree_Element *) realloc(tree->elements, @@ -310,10 +313,10 @@ ecore_desktop_tree_dump(Ecore_Desktop_Tree * tree, int level) lev = level + 1; printf("HASH ELEMENT TYPE\n"); - ecore_hash_for_each_node((Ecore_Hash *) tree->elements[i]. - element, - ecore_desktop_tree_dump_each_hash_node, - &lev); + eina_hash_foreach((Eina_Hash *) tree->elements[i]. + element, + ecore_desktop_tree_dump_each_hash_node, + &lev); } break; @@ -326,18 +329,19 @@ ecore_desktop_tree_dump(Ecore_Desktop_Tree * tree, int level) } } -static void -ecore_desktop_tree_dump_each_hash_node(void *value, void *user_data) +static Eina_Bool +ecore_desktop_tree_dump_each_hash_node(const Eina_Hash *hash, + const void *key, + void *value, + void *user_data) { - Ecore_Hash_Node *node; int level; int j; - node = (Ecore_Hash_Node *) value; level = *((int *)user_data); for (j = 0; j < level; j++) printf("."); - printf("%s = %s\n", (char *)node->key, (char *)node->value); + printf("%s = %s\n", (char *)key, (char *)value); } void @@ -351,7 +355,7 @@ ecore_desktop_tree_del(Ecore_Desktop_Tree * tree) ecore_desktop_tree_del((Ecore_Desktop_Tree *) tree->elements[i]. element); else if (tree->elements[i].type == ECORE_DESKTOP_TREE_ELEMENT_TYPE_HASH) - ecore_hash_destroy((Ecore_Hash *) tree->elements[i].element); + eina_hash_free((Eina_Hash *) tree->elements[i].element); } E_FREE(tree->elements); diff --git a/legacy/ecore/src/lib/ecore_directfb/ecore_directfb.c b/legacy/ecore/src/lib/ecore_directfb/ecore_directfb.c index ce4bb76db4..3b5a11e51d 100644 --- a/legacy/ecore/src/lib/ecore_directfb/ecore_directfb.c +++ b/legacy/ecore/src/lib/ecore_directfb/ecore_directfb.c @@ -43,7 +43,7 @@ static Ecore_Fd_Handler *_window_event_fd_handler_handle = NULL; static Ecore_Fd_Handler *_input_event_fd_handler_handle = NULL; /* this hash is to store all the possible key names for fast lookup */ -static Ecore_Hash *_ecore_directfb_key_symbols_hash = NULL; +static Eina_Hash *_ecore_directfb_key_symbols_hash = NULL; static IDirectFB *_dfb = NULL; // the main interface @@ -163,7 +163,7 @@ _ecore_directfb_event_handle_key_down(DFBEvent *evt) { case DFEC_INPUT: key_symbol = evt->input.key_symbol; - k = ecore_hash_get(_ecore_directfb_key_symbols_hash, &key_symbol); + k = eina_hash_find(_ecore_directfb_key_symbols_hash, &key_symbol); if(!k) { @@ -179,7 +179,7 @@ _ecore_directfb_event_handle_key_down(DFBEvent *evt) case DFEC_WINDOW: key_symbol = evt->window.key_symbol; - k = ecore_hash_get(_ecore_directfb_key_symbols_hash, &key_symbol); + k = eina_hash_find(_ecore_directfb_key_symbols_hash, &key_symbol); if(!k) { @@ -211,7 +211,7 @@ _ecore_directfb_event_handle_key_up(DFBEvent *evt) { case DFEC_INPUT: key_symbol = evt->input.key_symbol; - k = ecore_hash_get(_ecore_directfb_key_symbols_hash, &key_symbol); + k = eina_hash_find(_ecore_directfb_key_symbols_hash, &key_symbol); if(!k) @@ -228,7 +228,7 @@ _ecore_directfb_event_handle_key_up(DFBEvent *evt) case DFEC_WINDOW: key_symbol = evt->window.key_symbol; - k = ecore_hash_get(_ecore_directfb_key_symbols_hash, &key_symbol); + k = eina_hash_find(_ecore_directfb_key_symbols_hash, &key_symbol); if(!k) { @@ -698,14 +698,14 @@ ecore_directfb_init(const char *name) ECORE_DIRECTFB_EVENT_WHEEL = ecore_event_type_new();; /* create the hash table for the keynames */ - _ecore_directfb_key_symbols_hash = ecore_hash_new(_ecore_directfb_hash_create,_ecore_directfb_hash_compare); + _ecore_directfb_key_symbols_hash = eina_hash_int32_new(NULL); for(i=0; i<_ecore_directfb_key_symbols_count; i++) { struct keymap *k; k = malloc(sizeof(struct keymap)); k->name = _ecore_directfb_key_symbols[i].name; k->string = _ecore_directfb_key_symbols[i].string; - ecore_hash_set(_ecore_directfb_key_symbols_hash, &_ecore_directfb_key_symbols[i].id, k); + eina_hash_add(_ecore_directfb_key_symbols_hash, &_ecore_directfb_key_symbols[i].id, k); } /* create the hash for the windows(key = windowid, val = Ecore_DirectFB_Window struct) */ return _ecore_directfb_init_count; @@ -728,8 +728,8 @@ ecore_directfb_shutdown(void) for(i=0; i<_ecore_directfb_key_symbols_count; i++) { struct keymap *k; - k = ecore_hash_get(_ecore_directfb_key_symbols_hash, &_ecore_directfb_key_symbols[i].id); - ecore_hash_remove(_ecore_directfb_key_symbols_hash, &_ecore_directfb_key_symbols[i].id); + k = eina_hash_find(_ecore_directfb_key_symbols_hash, &_ecore_directfb_key_symbols[i].id); + eina_hash_del(_ecore_directfb_key_symbols_hash, &_ecore_directfb_key_symbols[i].id); free(k); } diff --git a/legacy/ecore/src/lib/ecore_evas/ecore_evas.c b/legacy/ecore/src/lib/ecore_evas/ecore_evas.c index e1a37b510e..721ccccabd 100644 --- a/legacy/ecore/src/lib/ecore_evas/ecore_evas.c +++ b/legacy/ecore/src/lib/ecore_evas/ecore_evas.c @@ -687,7 +687,7 @@ ecore_evas_data_get(const Ecore_Evas *ee, const char *key) if (!key) return NULL; - return evas_hash_find(ee->data, key); + return eina_hash_find(ee->data, key); } /** @@ -717,9 +717,13 @@ ecore_evas_data_set(Ecore_Evas *ee, const char *key, const void *data) if (!key) return; - ee->data = evas_hash_del(ee->data, key, NULL); + eina_hash_del(ee->data, key, NULL); if (data) - ee->data = evas_hash_add(ee->data, key, data); + { + if (!ee->data) + ee->data = eina_hash_string_superfast_new(NULL); + eina_hash_add(ee->data, key, data); + } } #define IFC(_ee, _fn) if (_ee->engine.func->_fn) {_ee->engine.func->_fn @@ -2410,7 +2414,7 @@ _ecore_evas_free(Ecore_Evas *ee) { _ecore_evas_free(ee->sub_ecore_evas->data); } - if (ee->data) evas_hash_free(ee->data); + if (ee->data) eina_hash_free(ee->data); if (ee->name) free(ee->name); if (ee->prop.title) free(ee->prop.title); if (ee->prop.name) free(ee->prop.name); diff --git a/legacy/ecore/src/lib/ecore_evas/ecore_evas_directfb.c b/legacy/ecore/src/lib/ecore_evas/ecore_evas_directfb.c index b80925477e..16ba4f489d 100644 --- a/legacy/ecore/src/lib/ecore_evas/ecore_evas_directfb.c +++ b/legacy/ecore/src/lib/ecore_evas/ecore_evas_directfb.c @@ -14,7 +14,7 @@ static int _ecore_evas_fps_debug = 0; static Ecore_Event_Handler *ecore_evas_event_handlers[13]; static Ecore_Evas *ecore_evases = NULL; -static Evas_Hash *ecore_evases_hash = NULL; +static Eina_Hash *ecore_evases_hash = NULL; static Ecore_Idle_Enterer *ecore_evas_directfb_idle_enterer = NULL; @@ -90,19 +90,19 @@ _ecore_evas_directfb_winid_str_get(Ecore_X_Window win) static Ecore_Evas * _ecore_evas_directfb_match(DFBWindowID win) -{ +{ Ecore_Evas *ee; - - ee = evas_hash_find(ecore_evases_hash, _ecore_evas_directfb_winid_str_get(win)); + + ee = eina_hash_find(ecore_evases_hash, _ecore_evas_directfb_winid_str_get(win)); return ee; } - -static void + +static void _ecore_evas_directfb_mouse_move_process(Ecore_Evas *ee, int x, int y, unsigned int timestamp) { ee->mouse.x = x; ee->mouse.y = y; - + if (ee->prop.cursor.object) { evas_object_show(ee->prop.cursor.object); @@ -324,19 +324,19 @@ _ecore_evas_directfb_init(void) ecore_evas_event_handlers[10] = NULL; ecore_evas_event_handlers[11] = NULL; ecore_evas_event_handlers[12] = NULL; - + return _ecore_evas_init_count; } /* engine functions */ /********************/ - + static void _ecore_evas_directfb_free(Ecore_Evas *ee) { - ecore_evases_hash = evas_hash_del(ecore_evases_hash, _ecore_evas_directfb_winid_str_get(ee->engine.directfb.window->id), ee); + eina_hash_del(ecore_evases_hash, _ecore_evas_directfb_winid_str_get(ee->engine.directfb.window->id), ee); ecore_directfb_window_del(ee->engine.directfb.window); - ecore_evases = _ecore_list2_remove(ecore_evases, ee); + ecore_evases = _ecore_list2_remove(ecore_evases, ee); _ecore_evas_directfb_shutdown(); ecore_directfb_shutdown(); } @@ -601,12 +601,14 @@ ecore_evas_directfb_new(const char *disp_name, int windowed, int x, int y, int w evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo); } ecore_evases = _ecore_list2_prepend(ecore_evases, ee); - ecore_evases_hash = evas_hash_add(ecore_evases_hash, _ecore_evas_directfb_winid_str_get(ee->engine.directfb.window->id), ee); - + if (!ecore_evases_hash) + ecore_evases_hash = eina_hash_string_superfast_new(NULL); + eina_hash_add(ecore_evases_hash, _ecore_evas_directfb_winid_str_get(ee->engine.directfb.window->id), ee); + return ee; #else disp_name = NULL; windowed = x = y = w = h = 0; return NULL; -#endif +#endif } diff --git a/legacy/ecore/src/lib/ecore_evas/ecore_evas_private.h b/legacy/ecore/src/lib/ecore_evas/ecore_evas_private.h index 1bcfd92288..6ec179b674 100644 --- a/legacy/ecore/src/lib/ecore_evas/ecore_evas_private.h +++ b/legacy/ecore/src/lib/ecore_evas/ecore_evas_private.h @@ -233,7 +233,7 @@ struct _Ecore_Evas Eina_Bool should_be_visible : 1; Eina_Bool alpha : 1; - Evas_Hash *data; + Eina_Hash *data; struct { int x, y; diff --git a/legacy/ecore/src/lib/ecore_evas/ecore_evas_win32.c b/legacy/ecore/src/lib/ecore_evas/ecore_evas_win32.c index 381c23cd51..6660f0f5b3 100644 --- a/legacy/ecore/src/lib/ecore_evas/ecore_evas_win32.c +++ b/legacy/ecore/src/lib/ecore_evas/ecore_evas_win32.c @@ -29,7 +29,7 @@ static int _ecore_evas_fps_debug = 0; static Ecore_Event_Handler *ecore_evas_event_handlers[ECORE_EVAS_EVENT_COUNT]; static Ecore_Idle_Enterer *ecore_evas_idle_enterer = NULL; static Ecore_Evas *ecore_evases = NULL; -static Evas_Hash *ecore_evases_hash = NULL; +static Eina_Hash *ecore_evases_hash = NULL; static int _ecore_evas_win32_event_key_down(void *data __UNUSED__, int type __UNUSED__, void *event); @@ -207,7 +207,7 @@ _ecore_evas_win32_match(Ecore_Win32_Window *window) { Ecore_Evas *ee; - ee = evas_hash_find(ecore_evases_hash, _ecore_evas_win32_winid_str_get(window)); + ee = eina_hash_find(ecore_evases_hash, _ecore_evas_win32_winid_str_get(window)); return ee; } @@ -586,7 +586,7 @@ static void _ecore_evas_win32_free(Ecore_Evas *ee) { ecore_win32_window_del(ee->engine.win32.window); - ecore_evases_hash = evas_hash_del(ecore_evases_hash, _ecore_evas_win32_winid_str_get(ee->engine.win32.window), ee); + eina_hash_del(ecore_evases_hash, _ecore_evas_win32_winid_str_get(ee->engine.win32.window), ee); ecore_evases = _ecore_list2_remove(ecore_evases, ee); _ecore_evas_win32_shutdown(); ecore_win32_shutdown(); @@ -1178,7 +1178,9 @@ _ecore_evas_win32_new_internal(int (*_ecore_evas_engine_init)(Ecore_Evas *ee), evas_key_lock_add(ee->evas, "Scroll_Lock"); ecore_evases = _ecore_list2_prepend(ecore_evases, ee); - ecore_evases_hash = evas_hash_add(ecore_evases_hash, _ecore_evas_win32_winid_str_get(ee->engine.win32.window), ee); + if (!ecore_evases_hash) + ecore_evases_hash = eina_hash_string_superfast_new(NULL); + eina_hash_add(ecore_evases_hash, _ecore_evas_win32_winid_str_get(ee->engine.win32.window), ee); return ee; } diff --git a/legacy/ecore/src/lib/ecore_evas/ecore_evas_wince.c b/legacy/ecore/src/lib/ecore_evas/ecore_evas_wince.c index ed30b672fd..e6e306e00c 100644 --- a/legacy/ecore/src/lib/ecore_evas/ecore_evas_wince.c +++ b/legacy/ecore/src/lib/ecore_evas/ecore_evas_wince.c @@ -32,7 +32,7 @@ static int _ecore_evas_fps_debug = 0; static Ecore_Event_Handler *ecore_evas_event_handlers[ECORE_EVAS_EVENT_COUNT]; static Ecore_Idle_Enterer *ecore_evas_idle_enterer = NULL; static Ecore_Evas *ecore_evases = NULL; -static Evas_Hash *ecore_evases_hash = NULL; +static Eina_Hash *ecore_evases_hash = NULL; static int _ecore_evas_wince_event_key_down(void *data __UNUSED__, int type __UNUSED__, void *event); @@ -206,7 +206,7 @@ _ecore_evas_wince_match(Ecore_WinCE_Window *window) { Ecore_Evas *ee; - ee = evas_hash_find(ecore_evases_hash, _ecore_evas_wince_winid_str_get(window)); + ee = eina_hash_find(ecore_evases_hash, _ecore_evas_wince_winid_str_get(window)); return ee; } @@ -507,7 +507,7 @@ static void _ecore_evas_wince_free(Ecore_Evas *ee) { ecore_wince_window_del(ee->engine.wince.window); - ecore_evases_hash = evas_hash_del(ecore_evases_hash, _ecore_evas_wince_winid_str_get(ee->engine.wince.window), ee); + eina_hash_del(ecore_evases_hash, _ecore_evas_wince_winid_str_get(ee->engine.wince.window), ee); ecore_evases = _ecore_list2_remove(ecore_evases, ee); _ecore_evas_wince_shutdown(); ecore_wince_shutdown(); @@ -988,7 +988,9 @@ ecore_evas_software_wince_new_internal(int backend, evas_key_lock_add(ee->evas, "Scroll_Lock"); ecore_evases = _ecore_list2_prepend(ecore_evases, ee); - ecore_evases_hash = evas_hash_add(ecore_evases_hash, _ecore_evas_wince_winid_str_get(ee->engine.wince.window), ee); + if (!ecore_evases_hash) + ecore_evases_hash = eina_hash_string_superfast_new(NULL); + eina_hash_add(ecore_evases_hash, _ecore_evas_wince_winid_str_get(ee->engine.wince.window), ee); return ee; } diff --git a/legacy/ecore/src/lib/ecore_evas/ecore_evas_x.c b/legacy/ecore/src/lib/ecore_evas/ecore_evas_x.c index cfb935e977..985b149ea3 100644 --- a/legacy/ecore/src/lib/ecore_evas/ecore_evas_x.c +++ b/legacy/ecore/src/lib/ecore_evas/ecore_evas_x.c @@ -22,7 +22,7 @@ static int _ecore_evas_init_count = 0; static int _ecore_evas_fps_debug = 0; static Ecore_Evas *ecore_evases = NULL; -static Evas_Hash *ecore_evases_hash = NULL; +static Eina_Hash *ecore_evases_hash = NULL; static Ecore_Event_Handler *ecore_evas_event_handlers[18]; static Ecore_Idle_Enterer *ecore_evas_idle_enterer = NULL; @@ -372,7 +372,7 @@ _ecore_evas_x_match(Ecore_X_Window win) { Ecore_Evas *ee; - ee = evas_hash_find(ecore_evases_hash, _ecore_evas_x_winid_str_get(win)); + ee = eina_hash_find(ecore_evases_hash, _ecore_evas_x_winid_str_get(win)); return ee; } @@ -1330,14 +1330,14 @@ _ecore_evas_x_free(Ecore_Evas *ee) #else ee->engine.x.damages = 0; #endif /* ! HAVE_ECORE_X_XCB */ - ecore_evases_hash = evas_hash_del(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee); + eina_hash_del(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee); while (ee->engine.x.win_extra) { Ecore_X_Window *winp; winp = ee->engine.x.win_extra->data; ee->engine.x.win_extra = eina_list_remove_list(ee->engine.x.win_extra, ee->engine.x.win_extra); - ecore_evases_hash = evas_hash_del(ecore_evases_hash, _ecore_evas_x_winid_str_get(*winp), ee); + eina_hash_del(ecore_evases_hash, _ecore_evas_x_winid_str_get(*winp), ee); free(winp); } ecore_evases = _ecore_list2_remove(ecore_evases, ee); @@ -1838,7 +1838,7 @@ _ecore_evas_x_alpha_set(Ecore_Evas *ee, int alpha) ee->shaped = 0; ee->alpha = alpha; ecore_x_window_del(ee->engine.x.win); - ecore_evases_hash = evas_hash_del(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee); + eina_hash_del(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee); if (ee->alpha) { if (ee->prop.override) @@ -1886,7 +1886,9 @@ _ecore_evas_x_alpha_set(Ecore_Evas *ee, int alpha) evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo); evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h); ecore_x_window_shape_mask_set(ee->engine.x.win, 0); - ecore_evases_hash = evas_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee); + if (!ecore_evases_hash) + ecore_evases_hash = eina_hash_string_superfast_new(NULL); + eina_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee); if (ee->prop.borderless) ecore_x_mwm_borderless_set(ee->engine.x.win, ee->prop.borderless); if (ee->visible) ecore_x_window_show(ee->engine.x.win); @@ -1917,7 +1919,7 @@ _ecore_evas_x_alpha_set(Ecore_Evas *ee, int alpha) ee->shaped = 0; ee->alpha = alpha; ecore_x_window_del(ee->engine.x.win); - ecore_evases_hash = evas_hash_del(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee); + eina_hash_del(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee); if (ee->alpha) { if (ee->prop.override) @@ -1958,7 +1960,9 @@ _ecore_evas_x_alpha_set(Ecore_Evas *ee, int alpha) evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo); evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h); ecore_x_window_shape_mask_set(ee->engine.x.win, 0); - ecore_evases_hash = evas_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee); + if (!ecore_evases_hash) + ecore_evases_hash = eina_hash_string_superfast_new(NULL); + eina_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee); if (ee->prop.borderless) ecore_x_mwm_borderless_set(ee->engine.x.win, ee->prop.borderless); if (ee->visible) ecore_x_window_show(ee->engine.x.win); @@ -1981,7 +1985,7 @@ _ecore_evas_x_alpha_set(Ecore_Evas *ee, int alpha) ee->shaped = 0; ee->alpha = alpha; ecore_x_window_del(ee->engine.x.win); - ecore_evases_hash = evas_hash_del(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee); + eina_hash_del(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee); if (ee->alpha) { if (ee->prop.override) @@ -2016,7 +2020,9 @@ _ecore_evas_x_alpha_set(Ecore_Evas *ee, int alpha) evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo); evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h); ecore_x_window_shape_mask_set(ee->engine.x.win, 0); - ecore_evases_hash = evas_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee); + if (!ecore_evases_hash) + ecore_evases_hash = eina_hash_string_superfast_new(NULL); + eina_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee); if (ee->prop.borderless) ecore_x_mwm_borderless_set(ee->engine.x.win, ee->prop.borderless); if (ee->visible) ecore_x_window_show(ee->engine.x.win); @@ -2832,7 +2838,9 @@ ecore_evas_software_x11_new(const char *disp_name, Ecore_X_Window parent, evas_key_lock_add(ee->evas, "Scroll_Lock"); ecore_evases = _ecore_list2_prepend(ecore_evases, ee); - ecore_evases_hash = evas_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee); + if (!ecore_evases_hash) + ecore_evases_hash = eina_hash_string_superfast_new(NULL); + eina_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee); return ee; #else return NULL; @@ -2933,7 +2941,9 @@ ecore_evas_software_x11_extra_event_window_add(Ecore_Evas *ee, Ecore_X_Window wi { *winp = win; ee->engine.x.win_extra = eina_list_append(ee->engine.x.win_extra, winp); - ecore_evases_hash = evas_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(win), ee); + if (!ecore_evases_hash) + ecore_evases_hash = eina_hash_string_superfast_new(NULL); + eina_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(win), ee); } #else #endif @@ -3020,7 +3030,9 @@ ecore_evas_gl_x11_new(const char *disp_name, Ecore_X_Window parent, evas_key_lock_add(ee->evas, "Scroll_Lock"); ecore_evases = _ecore_list2_prepend(ecore_evases, ee); - ecore_evases_hash = evas_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee); + if (!ecore_evases_hash) + ecore_evases_hash = eina_hash_string_superfast_new(NULL); + eina_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee); # endif /* HAVE_ECORE_X_XCB */ return ee; @@ -3279,7 +3291,9 @@ ecore_evas_xrender_x11_new(const char *disp_name, Ecore_X_Window parent, evas_key_lock_add(ee->evas, "Scroll_Lock"); ecore_evases = _ecore_list2_prepend(ecore_evases, ee); - ecore_evases_hash = evas_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee); + if (!ecore_evases_hash) + ecore_evases_hash = eina_hash_string_superfast_new(NULL); + eina_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee); return ee; #else return NULL; @@ -3493,7 +3507,9 @@ ecore_evas_software_x11_16_new(const char *disp_name, Ecore_X_Window parent, evas_key_lock_add(ee->evas, "Scroll_Lock"); ecore_evases = _ecore_list2_prepend(ecore_evases, ee); - ecore_evases_hash = evas_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee); + if (!ecore_evases_hash) + ecore_evases_hash = eina_hash_string_superfast_new(NULL); + eina_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(ee->engine.x.win), ee); return ee; #else return NULL; @@ -3594,7 +3610,9 @@ ecore_evas_software_x11_16_extra_event_window_add(Ecore_Evas *ee, Ecore_X_Window { *winp = win; ee->engine.x.win_extra = eina_list_append(ee->engine.x.win_extra, winp); - ecore_evases_hash = evas_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(win), ee); + if(!ecore_evases_hash) + ecore_evases_hash = eina_hash_string_superfast_new(NULL); + eina_hash_add(ecore_evases_hash, _ecore_evas_x_winid_str_get(win), ee); } #else #endif /* ! BUILD_ECORE_EVAS_SOFTWARE_16_X11 */ diff --git a/legacy/ecore/src/lib/ecore_imf/ecore_imf_module.c b/legacy/ecore/src/lib/ecore_imf/ecore_imf_module.c index d6b0be120f..d1fd75f268 100644 --- a/legacy/ecore/src/lib/ecore_imf/ecore_imf_module.c +++ b/legacy/ecore/src/lib/ecore_imf/ecore_imf_module.c @@ -15,8 +15,14 @@ static void _ecore_imf_module_append(Ecore_Plugin *plugin, const Ecore_IMF_Conte static void _ecore_imf_module_free(Ecore_IMF_Module *module); static int _ecore_imf_modules_exists(const char *ctx_id); +typedef struct _Ecore_IMF_Selector +{ + const char *toselect; + void *selected; +} Ecore_IMF_Selector; + static Ecore_Path_Group *ecore_imf_modules_path = NULL; -static Ecore_Hash *modules = NULL; +static Eina_Hash *modules = NULL; void ecore_imf_module_init(void) @@ -46,7 +52,7 @@ ecore_imf_module_shutdown(void) { if (modules) { - ecore_hash_destroy(modules); + eina_hash_free(modules); modules = NULL; } @@ -54,27 +60,35 @@ ecore_imf_module_shutdown(void) ecore_imf_modules_path = NULL; } +static Eina_Bool +_hash_module_available_get(const Eina_Hash *hash, int *data, void *list) +{ + ecore_list_append(list, data); + return EINA_TRUE; +} + Ecore_List * ecore_imf_module_available_get(void) { Ecore_List *values; + Eina_Iterator *it = NULL; unsigned int i = 0; if (!modules) return NULL; - /* ecore_hash_values() */ values = ecore_list_new(); - while (i < ecore_prime_table[modules->size]) - { - if (modules->buckets[i]) - { - Ecore_Hash_Node *node; + if (!values) return NULL; - for (node = modules->buckets[i]; node; node = node->next) - ecore_list_append(values, node->value); - } - i++; + it = eina_hash_iterator_data_new(modules); + if (!it) + { + ecore_list_destroy(values); + return NULL; } + + eina_iterator_foreach(it, EINA_EACH(_hash_module_available_get), values); + eina_iterator_free(it); + ecore_list_first_goto(values); return values; @@ -84,7 +98,7 @@ Ecore_IMF_Module * ecore_imf_module_get(const char *ctx_id) { if (!modules) return NULL; - return ecore_hash_get(modules, ctx_id); + return eina_hash_find(modules, ctx_id); } Ecore_IMF_Context * @@ -94,7 +108,7 @@ ecore_imf_module_context_create(const char *ctx_id) Ecore_IMF_Context *ctx = NULL; if (!modules) return NULL; - module = ecore_hash_get(modules, ctx_id); + module = eina_hash_find(modules, ctx_id); if (module) { ctx = module->create(); @@ -109,17 +123,55 @@ ecore_imf_module_context_create(const char *ctx_id) return ctx; } +static Eina_Bool +_hash_ids_get(const Eina_Hash *hash, const char *key, void *list) +{ + ecore_list_append(list, key); + return EINA_TRUE; +} + Ecore_List * ecore_imf_module_context_ids_get(void) { + Ecore_List *l = NULL; + Eina_Iterator *it = NULL; + if (!modules) return NULL; - return ecore_hash_keys(modules); + + l = ecore_list_new(); + if (!l) return NULL; + + it = eina_hash_iterator_key_new(modules); + if (!it) + { + ecore_list_destroy(l); + return NULL; + } + + eina_iterator_foreach(it, EINA_EACH(_hash_ids_get), l); + eina_iterator_free(it); + + return l; +} + +static Eina_Bool +_hash_ids_by_canvas_type_get(const Eina_Hash *hash, int *data, void *fdata) +{ + Ecore_IMF_Module *module = data; + Ecore_IMF_Selector *selector = fdata; + + if (!strcmp(module->info->canvas_type, selector->toselect)) + ecore_list_append(selector->selected, (void *)module->info->id); + + return EINA_TRUE; } Ecore_List * ecore_imf_module_context_ids_by_canvas_type_get(const char *canvas_type) { + Ecore_IMF_Selector selector; Ecore_List *values; + Eina_Iterator *it = NULL; unsigned int i = 0; if (!modules) return NULL; @@ -128,21 +180,20 @@ ecore_imf_module_context_ids_by_canvas_type_get(const char *canvas_type) return ecore_imf_module_context_ids_get(); values = ecore_list_new(); - while (i < ecore_prime_table[modules->size]) - { - if (modules->buckets[i]) - { - Ecore_Hash_Node *node; + if (!values) return NULL; - for (node = modules->buckets[i]; node; node = node->next) - { - Ecore_IMF_Module *module = node->value; - if (strcmp(module->info->canvas_type, canvas_type) == 0) - ecore_list_append(values, (void *) module->info->id); - } - } - i++; + it = eina_hash_iterator_data_new(modules); + if (!it) + { + ecore_list_destroy(values); + return NULL; } + + selector.toselect = canvas_type; + selector.selected = values; + eina_iterator_foreach(it, EINA_EACH(_hash_ids_by_canvas_type_get), &selector); + eina_iterator_free(it); + ecore_list_first_goto(values); return values; @@ -215,11 +266,7 @@ _ecore_imf_module_append(Ecore_Plugin *plugin, Ecore_IMF_Module *module; if (!modules) - { - modules = ecore_hash_new(ecore_str_hash, ecore_str_compare); - ecore_hash_free_key_cb_set(modules, free); - ecore_hash_free_value_cb_set(modules, (Ecore_Free_Cb) _ecore_imf_module_free); - } + modules = eina_hash_string_superfast_new(_ecore_imf_module_free); module = malloc(sizeof(Ecore_IMF_Module)); module->plugin = plugin; @@ -227,7 +274,7 @@ _ecore_imf_module_append(Ecore_Plugin *plugin, /* cache imf_module_create as it may be used several times */ module->create = imf_module_create; - ecore_hash_set(modules, strdup(info->id), module); + eina_hash_add(modules, info->id, module); } static void @@ -244,6 +291,13 @@ _ecore_imf_module_free(Ecore_IMF_Module *module) static int _ecore_imf_modules_exists(const char *ctx_id) { + Eina_Iterator *it = NULL; + if (!modules) return 0; - return (ecore_hash_get(modules, ctx_id) != NULL); + if (!ctx_id) return 0; + + if (eina_hash_find(modules, ctx_id)) + return 1; + + return 0; } diff --git a/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_netwm.c b/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_netwm.c index 13026b1691..e49104364d 100644 --- a/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_netwm.c +++ b/legacy/ecore/src/lib/ecore_x/xcb/ecore_xcb_netwm.c @@ -60,7 +60,7 @@ static void _ecore_x_netwm_startup_info_free(void *data); * Local variables */ -static Ecore_Hash *startup_info = NULL; +static Eina_Hash *startup_info = NULL; /** * Initialize the NetWM module @@ -68,11 +68,7 @@ static Ecore_Hash *startup_info = NULL; EAPI void ecore_x_netwm_init(void) { - startup_info = ecore_hash_new(ecore_direct_hash, ecore_direct_compare); - if (startup_info) - { - ecore_hash_free_value_cb_set(startup_info, _ecore_x_netwm_startup_info_free); - } + startup_info = eina_hash_string_superfast_new(_ecore_x_netwm_startup_info_free); } /** @@ -82,7 +78,7 @@ EAPI void ecore_x_netwm_shutdown(void) { if (startup_info) - ecore_hash_destroy(startup_info); + eina_hash_free(startup_info); startup_info = NULL; } @@ -2765,11 +2761,13 @@ _ecore_x_netwm_startup_info_begin(Ecore_X_Window window, { #if 0 Ecore_X_Startup_Info *info; + unsigned char exists = 0; if (!startup_info) return 0; - info = ecore_hash_get(startup_info, (void *)window); + info = eina_hash_find(startup_info, (void *)window); if (info) { + exists = 1; printf("Already got info for win: 0x%x\n", window); _ecore_x_netwm_startup_info_free(info); } @@ -2787,7 +2785,10 @@ _ecore_x_netwm_startup_info_begin(Ecore_X_Window window, memcpy(info->buffer, data, 20); info->length += 20; info->buffer[info->length] = 0; - ecore_hash_set(startup_info, (void *)info->win, info); + if (exists) + eina_hash_modify(startup_info, (void *)info->win, info); + else + eina_hash_add(startup_info, (void *)info->win, info); if (strlen(info->buffer) != 20) { /* We have a '\0' in there, the message is done */ @@ -2810,7 +2811,7 @@ _ecore_x_netwm_startup_info(Ecore_X_Window window, char *p; if (!startup_info) return 0; - info = ecore_hash_get(startup_info, (void *)window); + info = eina_hash_find(startup_info, (void *)window); if (!info) return 0; if ((info->length + 20) > info->buffer_size) { @@ -2818,7 +2819,7 @@ _ecore_x_netwm_startup_info(Ecore_X_Window window, info->buffer = realloc(info->buffer, info->buffer_size * sizeof(char)); if (!info->buffer) { - ecore_hash_remove(startup_info, (void *)info->win); + eina_hash_del(startup_info, (void *)info->win); _ecore_x_netwm_startup_info_free(info); return 0; } @@ -2922,7 +2923,7 @@ _ecore_x_netwm_startup_info_process(Ecore_X_Startup_Info *info) p = strchr(info->buffer, ':'); if (!p) { - ecore_hash_remove(startup_info, (void *)info->win); + eina_hash_del(startup_info, (void *)info->win); _ecore_x_netwm_startup_info_free(info); return 0; } @@ -2943,7 +2944,7 @@ _ecore_x_netwm_startup_info_process(Ecore_X_Startup_Info *info) event = ECORE_X_EVENT_STARTUP_SEQUENCE_REMOVE; else { - ecore_hash_remove(startup_info, (void *)info->win); + eina_hash_del(startup_info, (void *)info->win); _ecore_x_netwm_startup_info_free(info); return 0; } @@ -2952,7 +2953,7 @@ _ecore_x_netwm_startup_info_process(Ecore_X_Startup_Info *info) if (!_ecore_x_netwm_startup_info_parse(info, p)) { - ecore_hash_remove(startup_info, (void *)info->win); + eina_hash_del(startup_info, (void *)info->win); _ecore_x_netwm_startup_info_free(info); return 0; } @@ -2962,7 +2963,7 @@ _ecore_x_netwm_startup_info_process(Ecore_X_Startup_Info *info) e = calloc(1, sizeof(Ecore_X_Event_Startup_Sequence)); if (!e) { - ecore_hash_remove(startup_info, (void *)info->win); + eina_hash_del(startup_info, (void *)info->win); _ecore_x_netwm_startup_info_free(info); return 0; } @@ -2972,7 +2973,7 @@ _ecore_x_netwm_startup_info_process(Ecore_X_Startup_Info *info) if (event == ECORE_X_EVENT_STARTUP_SEQUENCE_REMOVE) { - ecore_hash_remove(startup_info, (void *)info->win); + eina_hash_del(startup_info, (void *)info->win); _ecore_x_netwm_startup_info_free(info); } else diff --git a/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_netwm.c b/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_netwm.c index dacd7f8585..7cf07e5e1a 100644 --- a/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_netwm.c +++ b/legacy/ecore/src/lib/ecore_x/xlib/ecore_x_netwm.c @@ -56,21 +56,19 @@ static void _ecore_x_netwm_startup_info_free(void *data); * Local variables */ -static Ecore_Hash *startup_info = NULL; +static Eina_Hash *startup_info = NULL; EAPI void ecore_x_netwm_init(void) { - startup_info = ecore_hash_new(ecore_direct_hash, ecore_direct_compare); - if (startup_info) - ecore_hash_free_value_cb_set(startup_info, _ecore_x_netwm_startup_info_free); + startup_info = eina_hash_string_superfast_new(_ecore_x_netwm_startup_info_free); } EAPI void ecore_x_netwm_shutdown(void) { if (startup_info) - ecore_hash_destroy(startup_info); + eina_hash_free(startup_info); startup_info = NULL; } @@ -1140,11 +1138,13 @@ _ecore_x_netwm_startup_info_begin(Ecore_X_Window win, char *data) { #if 0 Ecore_X_Startup_Info *info; + unsigned char *exists = 0; if (!startup_info) return 0; - info = ecore_hash_get(startup_info, (void *)win); + info = eina_hash_find(startup_info, (void *)win); if (info) { + exists = 1; printf("Already got info for win: 0x%x\n", win); _ecore_x_netwm_startup_info_free(info); } @@ -1162,7 +1162,10 @@ _ecore_x_netwm_startup_info_begin(Ecore_X_Window win, char *data) memcpy(info->buffer, data, 20); info->length += 20; info->buffer[info->length] = 0; - ecore_hash_set(startup_info, (void *)info->win, info); + if (exists) + eina_hash_modify(startup_info, (void *)info->win, info); + else + eina_hash_add(startup_info, (void *)info->win, info); if (strlen(info->buffer) != 20) { /* We have a '\0' in there, the message is done */ @@ -1183,7 +1186,7 @@ _ecore_x_netwm_startup_info(Ecore_X_Window win, char *data) char *p; if (!startup_info) return 0; - info = ecore_hash_get(startup_info, (void *)win); + info = eina_hash_find(startup_info, (void *)win); if (!info) return 0; if ((info->length + 20) > info->buffer_size) { @@ -1191,7 +1194,7 @@ _ecore_x_netwm_startup_info(Ecore_X_Window win, char *data) info->buffer = realloc(info->buffer, info->buffer_size * sizeof(char)); if (!info->buffer) { - ecore_hash_remove(startup_info, (void *)info->win); + eina_hash_del(startup_info, (void *)info->win); _ecore_x_netwm_startup_info_free(info); return 0; } @@ -1269,7 +1272,7 @@ _ecore_x_netwm_startup_info_process(Ecore_X_Startup_Info *info) p = strchr(info->buffer, ':'); if (!p) { - ecore_hash_remove(startup_info, (void *)info->win); + eina_hash_del(startup_info, (void *)info->win); _ecore_x_netwm_startup_info_free(info); return 0; } @@ -1290,7 +1293,7 @@ _ecore_x_netwm_startup_info_process(Ecore_X_Startup_Info *info) event = ECORE_X_EVENT_STARTUP_SEQUENCE_REMOVE; else { - ecore_hash_remove(startup_info, (void *)info->win); + eina_hash_del(startup_info, (void *)info->win); _ecore_x_netwm_startup_info_free(info); return 0; } @@ -1299,7 +1302,7 @@ _ecore_x_netwm_startup_info_process(Ecore_X_Startup_Info *info) if (!_ecore_x_netwm_startup_info_parse(info, p)) { - ecore_hash_remove(startup_info, (void *)info->win); + eina_hash_del(startup_info, (void *)info->win); _ecore_x_netwm_startup_info_free(info); return 0; } @@ -1309,7 +1312,7 @@ _ecore_x_netwm_startup_info_process(Ecore_X_Startup_Info *info) e = calloc(1, sizeof(Ecore_X_Event_Startup_Sequence)); if (!e) { - ecore_hash_remove(startup_info, (void *)info->win); + eina_hash_del(startup_info, (void *)info->win); _ecore_x_netwm_startup_info_free(info); return 0; } @@ -1319,7 +1322,7 @@ _ecore_x_netwm_startup_info_process(Ecore_X_Startup_Info *info) if (event == ECORE_X_EVENT_STARTUP_SEQUENCE_REMOVE) { - ecore_hash_remove(startup_info, (void *)info->win); + eina_hash_del(startup_info, (void *)info->win); _ecore_x_netwm_startup_info_free(info); } else