From: Enlightenment S. <no-...@en...> - 2009-02-17 12:58:13
|
Log: * eina/src/lib/eina_module.c: After deleting all members, we should flush the array. Author: cedric Date: 2009-02-17 04:58:09 -0800 (Tue, 17 Feb 2009) New Revision: 39057 Modified: trunk/eina/src/lib/eina_module.c Modified: trunk/eina/src/lib/eina_module.c =================================================================== --- trunk/eina/src/lib/eina_module.c 2009-02-17 07:50:35 UTC (rev 39056) +++ trunk/eina/src/lib/eina_module.c 2009-02-17 12:58:09 UTC (rev 39057) @@ -448,4 +448,6 @@ EINA_ARRAY_ITER_NEXT(array, i, m, iterator) eina_module_delete(m); + + eina_array_flush(array); } |
From: Enlightenment S. <no-...@en...> - 2009-02-25 10:46:19
|
Log: * eina/src/lib/eina_list.c: Use less code. * eina/src/lib/eina_error.c: Add a way to abord on any error message. Author: cedric Date: 2009-02-25 02:46:14 -0800 (Wed, 25 Feb 2009) New Revision: 39196 Modified: trunk/eina/src/lib/eina_error.c trunk/eina/src/lib/eina_list.c Modified: trunk/eina/src/lib/eina_error.c =================================================================== --- trunk/eina/src/lib/eina_error.c 2009-02-25 10:44:13 UTC (rev 39195) +++ trunk/eina/src/lib/eina_error.c 2009-02-25 10:46:14 UTC (rev 39196) @@ -696,6 +696,8 @@ va_start(args, fmt); _print_cb(level, file, fnc, line, fmt, _print_cb_data, args); va_end(args); + + if (getenv("EINA_ERROR_ABORT")) abort(); } /** Modified: trunk/eina/src/lib/eina_list.c =================================================================== --- trunk/eina/src/lib/eina_list.c 2009-02-25 10:44:13 UTC (rev 39195) +++ trunk/eina/src/lib/eina_list.c 2009-02-25 10:46:14 UTC (rev 39196) @@ -816,17 +816,11 @@ eina_list_remove(Eina_List *list, const void *data) { Eina_List *l; - void *list_data; if (list) EINA_MAGIC_CHECK_LIST(list); - EINA_LIST_FOREACH(list, l, list_data) - { - if (list_data == data) + l = eina_list_data_find_list(list, data); return eina_list_remove_list(list, l); - } - - return list; } /** @@ -878,12 +872,11 @@ } else return_l = remove_list->next; - if (remove_list == list->accounting->last) + if (remove_list == remove_list->accounting->last) { EINA_MAGIC_CHECK_LIST(list); list->accounting->last = remove_list->prev; } - _eina_list_mempool_list_free(remove_list); return return_l; } |
From: Enlightenment S. <no-...@en...> - 2009-06-04 09:02:37
|
Log: * Fix some init/shutdown procedure. Author: cedric Date: 2009-06-04 02:02:29 -0700 (Thu, 04 Jun 2009) New Revision: 40892 Modified: trunk/eina/src/lib/eina_hash.c trunk/eina/src/lib/eina_list.c Modified: trunk/eina/src/lib/eina_hash.c =================================================================== --- trunk/eina/src/lib/eina_hash.c 2009-06-04 03:32:32 UTC (rev 40891) +++ trunk/eina/src/lib/eina_hash.c 2009-06-04 09:02:29 UTC (rev 40892) @@ -21,6 +21,7 @@ # include "config.h" #endif +#include <stdio.h> #include <stdlib.h> #include <string.h> #ifdef _MSC_VER @@ -664,7 +665,11 @@ eina_hash_init(void) { if (!_eina_hash_init_count) - eina_error_init(); + if (!eina_error_init()) + { + fprintf(stderr, "Could not initialize eina error module\n"); + return 0; + } return ++_eina_hash_init_count; } Modified: trunk/eina/src/lib/eina_list.c =================================================================== --- trunk/eina/src/lib/eina_list.c 2009-06-04 03:32:32 UTC (rev 40891) +++ trunk/eina/src/lib/eina_list.c 2009-06-04 09:02:29 UTC (rev 40892) @@ -446,10 +446,24 @@ if (!_eina_list_init_count) { - eina_error_init(); - eina_magic_string_init(); - eina_mempool_init(); + if (!eina_error_init()) + { + fprintf(stderr, "Could not initialize eina error module\n"); + return 0; + } + if (!eina_magic_string_init()) + { + EINA_ERROR_PERR("ERROR: Could not initialize eina magic string module.\n"); + goto on_magic_string_fail; + } + + if (!eina_mempool_init()) + { + EINA_ERROR_PERR("ERROR: Could not initialize eina mempool module.\n"); + goto on_mempool_fail; + } + #ifdef EINA_DEFAULT_MEMPOOL choice = "pass_through"; #else @@ -462,14 +476,15 @@ if (!_eina_list_mp) { EINA_ERROR_PERR("ERROR: Mempool for list cannot be allocated in list init.\n"); - abort(); + goto on_init_fail; } _eina_list_accounting_mp = eina_mempool_new(choice, "list_accounting", NULL, sizeof (Eina_List_Accounting), 80); if (!_eina_list_accounting_mp) { EINA_ERROR_PERR("ERROR: Mempool for list accounting cannot be allocated in list init.\n"); - abort(); + eina_mempool_delete(_eina_list_mp); + goto on_init_fail; } eina_magic_string_set(EINA_MAGIC_ITERATOR, @@ -487,6 +502,14 @@ } return ++_eina_list_init_count; + + on_init_fail: + eina_mempool_shutdown(); + on_mempool_fail: + eina_magic_string_shutdown(); + on_magic_string_fail: + eina_error_shutdown(); + return 0; } /** |
From: Enlightenment S. <no-...@en...> - 2009-06-09 16:02:24
|
Log: * eina: Remove memory leak (patch from Andre Dieb). Author: cedric Date: 2009-06-09 09:02:20 -0700 (Tue, 09 Jun 2009) New Revision: 40986 Modified: trunk/eina/src/lib/eina_error.c trunk/eina/src/lib/eina_mempool.c Modified: trunk/eina/src/lib/eina_error.c =================================================================== --- trunk/eina/src/lib/eina_error.c 2009-06-09 15:54:09 UTC (rev 40985) +++ trunk/eina/src/lib/eina_error.c 2009-06-09 16:02:20 UTC (rev 40986) @@ -530,7 +530,6 @@ { char *level; /* TODO register the eina's basic errors */ - /* TODO load the environment variable for getting the log level */ if ((level = getenv("EINA_ERROR_LEVEL"))) { _error_level = atoi(level); Modified: trunk/eina/src/lib/eina_mempool.c =================================================================== --- trunk/eina/src/lib/eina_mempool.c 2009-06-09 15:54:09 UTC (rev 40985) +++ trunk/eina/src/lib/eina_mempool.c 2009-06-09 16:02:20 UTC (rev 40986) @@ -123,8 +123,16 @@ { char *path; - eina_hash_init(); - eina_module_init(); + if (!eina_hash_init()) + { + fprintf(stderr, "Could not initialize eina hash module.\n"); + return 0; + } + if (!eina_module_init()) + { + fprintf(stderr, "Could not initialize eina module module.\n"); + goto module_init_error; + } EINA_ERROR_NOT_MEMPOOL_MODULE = eina_error_msg_register("Not a memory pool module."); _backends = eina_hash_string_superfast_new(NULL); @@ -147,7 +155,8 @@ if (!_modules) { EINA_ERROR_PERR("ERROR: no mempool modules able to be loaded.\n"); - abort(); + eina_hash_free(_backends); + goto mempool_init_error; } eina_module_list_load(_modules); /* builtin backends */ @@ -165,6 +174,14 @@ #endif } return ++_init_count; + + mempool_init_error: + eina_module_shutdown(); + module_init_error: + eina_hash_shutdown(); + + return 0; + } /** @@ -190,9 +207,15 @@ ememoa_fixed_shutdown(); #endif /* dynamic backends */ - eina_module_list_unload(_modules); + eina_module_list_delete(_modules); + if (_modules) + eina_array_free(_modules); + eina_module_shutdown(); - /* TODO delete the _modules list */ + + if (_backends) + eina_hash_free(_backends); + eina_hash_shutdown(); return 0; } |
From: Enlightenment S. <no-...@en...> - 2009-06-18 12:09:47
|
Log: * eina: Improve eina hash manipulation for int. - Faster int key comparison. - Key Length callback could now be NULL and 0 will be assumed. Author: cedric Date: 2009-06-18 05:08:52 -0700 (Thu, 18 Jun 2009) New Revision: 41100 Modified: trunk/eina/src/lib/eina_hash.c Modified: trunk/eina/src/lib/eina_hash.c =================================================================== --- trunk/eina/src/lib/eina_hash.c 2009-06-18 10:21:09 UTC (rev 41099) +++ trunk/eina/src/lib/eina_hash.c 2009-06-18 12:08:52 UTC (rev 41100) @@ -420,7 +420,7 @@ if (!key) return EINA_FALSE; if (!hash->buckets) return EINA_FALSE; - key_length = hash->key_length_cb(key); + key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; key_hash = hash->key_hash_cb(key, key_length); return _eina_hash_del_by_key_hash(hash, key, key_length, key_hash, data); } @@ -449,11 +449,7 @@ _eina_int32_key_cmp(const uint32_t *key1, __UNUSED__ int key1_length, const uint32_t *key2, __UNUSED__ int key2_length) { - if (*key1 > *key2) - return 1; - if (*key1 < *key2) - return -1; - return 0; + return *key1 - *key2; } static unsigned int @@ -466,14 +462,9 @@ _eina_int64_key_cmp(const uint64_t *key1, __UNUSED__ int key1_length, const uint64_t *key2, __UNUSED__ int key2_length) { - if (*key1 > *key2) - return 1; - if (*key1 < *key2) - return -1; - return 0; + return *key1 - *key2; } - static Eina_Bool _eina_foreach_cb(const Eina_Hash *hash, Eina_Hash_Tuple *data, Eina_Hash_Foreach_Data *fdata) { @@ -704,7 +695,6 @@ Eina_Hash *new; eina_error_set(0); - EINA_SAFETY_ON_NULL_RETURN_VAL(key_length_cb, NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(key_cmp_cb, NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(key_hash_cb, NULL); EINA_SAFETY_ON_TRUE_RETURN_VAL(buckets_power_size < 3, NULL); @@ -941,12 +931,11 @@ EINA_MAGIC_CHECK_HASH(hash); EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_length_cb, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE); - key_length = hash->key_length_cb(key); + key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; key_hash = hash->key_hash_cb(key, key_length); return eina_hash_add_by_hash(hash, key, key_length, key_hash, data); @@ -980,12 +969,11 @@ EINA_MAGIC_CHECK_HASH(hash); EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_length_cb, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE); - key_length = hash->key_length_cb(key); + key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; key_hash = hash->key_hash_cb(key, key_length); return eina_hash_direct_add_by_hash(hash, key, key_length, key_hash, data); @@ -1167,11 +1155,10 @@ if (!hash) return NULL; EINA_MAGIC_CHECK_HASH(hash); - EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_length_cb, NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL); - key_length = hash->key_length_cb(key); + key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; hash_num = hash->key_hash_cb(key, key_length); return eina_hash_find_by_hash(hash, key, key_length, hash_num); @@ -1232,12 +1219,11 @@ EINA_MAGIC_CHECK_HASH(hash); EINA_SAFETY_ON_NULL_RETURN_VAL(hash, NULL); - EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_length_cb, NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(data, NULL); - key_length = hash->key_length_cb(key); + key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; hash_num = hash->key_hash_cb(key, key_length); return eina_hash_modify_by_hash(hash, key, key_length, hash_num, data); |
From: Enlightenment S. <no-...@en...> - 2009-06-22 14:18:48
|
Log: * eina_rectangle: Fix typo. Author: cedric Date: 2009-06-22 06:46:05 -0700 (Mon, 22 Jun 2009) New Revision: 41158 Modified: trunk/eina/src/lib/eina_rectangle.c Modified: trunk/eina/src/lib/eina_rectangle.c =================================================================== --- trunk/eina/src/lib/eina_rectangle.c 2009-06-22 13:24:13 UTC (rev 41157) +++ trunk/eina/src/lib/eina_rectangle.c 2009-06-22 13:46:05 UTC (rev 41158) @@ -239,7 +239,7 @@ if (!new) return NULL; new->head = NULL; - new->empty = eina_list_append(NULL, eina_rectangle_add(0, 0, w, h)); + new->empty = eina_list_append(NULL, eina_rectangle_new(0, 0, w, h)); new->references = 0; new->w = w; new->h = h; |
From: Enlightenment S. <no-...@en...> - 2009-06-25 10:58:22
|
Log: * eina: Fix rectangle merge. Author: cedric Date: 2009-06-25 03:58:16 -0700 (Thu, 25 Jun 2009) New Revision: 41193 Modified: trunk/eina/src/lib/eina_rectangle.c Modified: trunk/eina/src/lib/eina_rectangle.c =================================================================== --- trunk/eina/src/lib/eina_rectangle.c 2009-06-25 05:56:02 UTC (rev 41192) +++ trunk/eina/src/lib/eina_rectangle.c 2009-06-25 10:58:16 UTC (rev 41193) @@ -102,7 +102,8 @@ EINA_LIST_FOREACH(empty, l, match) { - if (match->x == r->x && match->w == r->w) + if (match->x == r->x && match->w == r->w + && (match->y == r->y + r->h || r->y == match->y + match->h)) { if (match->y > r->y) match->y = r->y; @@ -114,7 +115,8 @@ return _eina_rectangle_merge_list(empty, match); } - else if (match->y == r->y && match->h == r->h) + else if (match->y == r->y && match->h == r->h + && (match->x == r->x + r->w || r->x == match->x + match->w)) { if (match->x > r->x) match->x = r->x; |
From: Enlightenment S. <no-...@en...> - 2009-07-03 13:05:35
|
Log: * eina: Partial fix for ticket #286. Author: cedric Date: 2009-07-03 05:39:32 -0700 (Fri, 03 Jul 2009) New Revision: 41241 Modified: trunk/eina/src/lib/eina_counter.c Modified: trunk/eina/src/lib/eina_counter.c =================================================================== --- trunk/eina/src/lib/eina_counter.c 2009-07-03 11:16:16 UTC (rev 41240) +++ trunk/eina/src/lib/eina_counter.c 2009-07-03 12:39:32 UTC (rev 41241) @@ -90,7 +90,7 @@ # endif } #else -static int EINA_COUNTER_ERROR_WINDOWS = 0; +static int EINA_ERROR_COUNTER_WINDOWS = 0; static LARGE_INTEGER _eina_counter_frequency; static inline int @@ -233,7 +233,7 @@ * * This function sets up the error module of Eina and only on Windows, * it initializes the high precision timer. It also registers, only on - * Windows, the error #EINA_COUNTER_ERROR_WINDOWS. It is also called + * Windows, the error #EINA_ERROR_COUNTER_WINDOWS. It is also called * by eina_init(). It returns 0 on failure, otherwise it returns the * number of times it has already been called. See eina_error_init() * for the documentation of the initialisation of the dependency @@ -259,9 +259,10 @@ return 0; } #ifdef _WIN32 + EINA_ERROR_COUNTER_WINDOWS = eina_error_msg_register("Change your OS, you moron !"); if (!QueryPerformanceFrequency(&_eina_counter_frequency)) { - EINA_COUNTER_ERROR_WINDOWS = eina_error_msg_register("Change your OS, you moron !"); + eina_error_set(EINA_ERROR_COUNTER_WINDOWS); eina_error_shutdown(); return 0; } |
From: Enlightenment S. <no-...@en...> - 2009-07-07 14:52:15
|
Log: * eina: Remove recursion from eina_rectangle. Author: cedric Date: 2009-07-07 04:24:44 -0700 (Tue, 07 Jul 2009) New Revision: 41263 Modified: trunk/eina/src/lib/eina_rectangle.c Modified: trunk/eina/src/lib/eina_rectangle.c =================================================================== --- trunk/eina/src/lib/eina_rectangle.c 2009-07-07 11:07:43 UTC (rev 41262) +++ trunk/eina/src/lib/eina_rectangle.c 2009-07-07 11:24:44 UTC (rev 41263) @@ -93,6 +93,8 @@ { Eina_Rectangle *match; Eina_List *l; + int xw; + int yh; if (r->w == 0 || r->h == 0) { @@ -100,10 +102,14 @@ return empty; } + start_again: + xw = r->x + r->w; + yh = r->y + r->h; + EINA_LIST_FOREACH(empty, l, match) { if (match->x == r->x && match->w == r->w - && (match->y == r->y + r->h || r->y == match->y + match->h)) + && (match->y == yh || r->y == match->y + match->h)) { if (match->y > r->y) match->y = r->y; @@ -113,10 +119,12 @@ empty = eina_list_remove_list(empty, l); - return _eina_rectangle_merge_list(empty, match); + r = match; + + goto start_again; } else if (match->y == r->y && match->h == r->h - && (match->x == r->x + r->w || r->x == match->x + match->w)) + && (match->x == xw || r->x == match->x + match->w)) { if (match->x > r->x) match->x = r->x; @@ -126,7 +134,9 @@ empty = eina_list_remove_list(empty, l); - return _eina_rectangle_merge_list(empty, match); + r = match; + + goto start_again; } } @@ -153,13 +163,11 @@ { r->y += h; r->h -= h; - empty = _eina_rectangle_merge_list(empty, r); } else if (r->h == h) { r->x += w; r->w -= w; - empty = _eina_rectangle_merge_list(empty, r); } else { @@ -190,8 +198,8 @@ empty = _eina_rectangle_merge_list(empty, r); r = eina_rectangle_new(x2, y2, w2, h2); - if (r) empty = _eina_rectangle_merge_list(empty, r); } + if (r) empty = _eina_rectangle_merge_list(empty, r); /* Return empty */ return empty; } @@ -242,7 +250,7 @@ #endif _eina_rectangle_alloc_mp = eina_mempool_add(choice, "rectangle-alloc", NULL, - sizeof (Eina_Rectangle_Alloc) + sizeof (Eina_Rectangle), 42); + sizeof (Eina_Rectangle_Alloc) + sizeof (Eina_Rectangle), 256); if (!_eina_rectangle_alloc_mp) { EINA_ERROR_PERR("ERROR: Mempool for rectangle cannot be allocated in list init.\n"); |
From: Enlightenment S. <no-...@en...> - 2009-07-21 15:21:55
|
Log: * eina: Handle NULL in eina_list_search_sorted_near_list. Author: cedric Date: 2009-07-21 08:21:46 -0700 (Tue, 21 Jul 2009) New Revision: 41467 Modified: trunk/eina/src/lib/eina_list.c Modified: trunk/eina/src/lib/eina_list.c =================================================================== --- trunk/eina/src/lib/eina_list.c 2009-07-21 14:43:53 UTC (rev 41466) +++ trunk/eina/src/lib/eina_list.c 2009-07-21 15:21:46 UTC (rev 41467) @@ -1649,6 +1649,8 @@ unsigned int inf, sup, cur, tmp; int part; + if (!list) return NULL; + inf = 0; sup = eina_list_count(list) ; cur = sup >> 1; |
From: Enlightenment S. <no-...@en...> - 2009-08-05 14:46:34
|
Log: * eina_rectangle: Forgot to initialise one attribute. Author: cedric Date: 2009-08-05 07:46:21 -0700 (Wed, 05 Aug 2009) New Revision: 41606 Modified: trunk/eina/src/lib/eina_rectangle.c Modified: trunk/eina/src/lib/eina_rectangle.c =================================================================== --- trunk/eina/src/lib/eina_rectangle.c 2009-08-05 14:23:47 UTC (rev 41605) +++ trunk/eina/src/lib/eina_rectangle.c 2009-08-05 14:46:21 UTC (rev 41606) @@ -331,6 +331,7 @@ new->head = NULL; new->empty = eina_list_append(NULL, eina_rectangle_new(0, 0, w, h)); new->references = 0; + new->sorted = EINA_FALSE; new->w = w; new->h = h; |
From: Enlightenment S. <no-...@en...> - 2009-08-11 14:11:50
|
Log: * eina: eina_cpu_count should be multiplatform. Author: cedric Date: 2009-08-11 07:11:36 -0700 (Tue, 11 Aug 2009) New Revision: 41689 Modified: trunk/eina/src/lib/eina_cpu.c Modified: trunk/eina/src/lib/eina_cpu.c =================================================================== --- trunk/eina/src/lib/eina_cpu.c 2009-08-11 14:00:51 UTC (rev 41688) +++ trunk/eina/src/lib/eina_cpu.c 2009-08-11 14:11:36 UTC (rev 41689) @@ -21,13 +21,26 @@ #endif #ifdef EFL_HAVE_PTHREAD -# define _GNU_SOURCE -# include <sched.h> +# ifdef _WIN32 +# define WIN32_LEAN_AND_MEAN +# include <windows.h> +# elif defined (__SUNPRO_C) +# include <unistd.h> +# elif defined (__FreeBSD) || defined (__OpenBSD__) || defined (__NetBSD__) || defined (__DragonFly__) || defined (__MacOSX__) +# include <unistd.h> +# elif defined (__linux__) +# define _GNU_SOURCE +# include <sched.h> +# endif # include <pthread.h> # define TH_MAX 8 #endif +#include <stdio.h> +#include <string.h> +#include <errno.h> + #include "eina_cpu.h" /*============================================================================* @@ -111,6 +124,34 @@ EAPI int eina_cpu_count(void) { #ifdef EFL_HAVE_PTHREAD + +# if defined (_WIN32) + SYSTEM_INFO sysinfo; + + GetSystemInfo(&sysinfo); + return sysinfo.dwNumberOfProcessors; + +# elif defined (__SUNPRO_C) + return sysconf(_SC_NPROCESSORS_ONLN); + +# elif defined (__FreeBSD) || defined (__OpenBSD__) || defined (__NetBSD__) || defined (__DragonFly__) || defined (__MacOSX__) + int mib[4]; + size_t len; + int cpus; + + mib[0] = CTL_HW; + mib[1] = HM_AVAILCPU; + sysctl(mib, 2, &cpus, &len, NULL, 0); + if (cpus < 1) + { + mib[1] = HW_NCPU; + sysctl(mib, 2, &cpus, &len, NULL, 0); + if (cpus < 1) + cpus = 1; + } + return cpus; + +# elif defined (__linux__) cpu_set_t cpu; int i; static int cpus = 0; @@ -119,13 +160,20 @@ CPU_ZERO(&cpu); if (sched_getaffinity(0, sizeof(cpu), &cpu) != 0) - return 1; + { + fprintf(stderr, "[Eina] could not get cpu affinity: %s\n", strerror(errno)); + return 1; + } for (i = 0; i < TH_MAX; i++) { if (CPU_ISSET(i, &cpu)) cpus = i + 1; else break; } return cpus; + +# else +# error "eina_cpu_count() error: Platform not supported" +# endif #else return 1; #endif |
From: Enlightenment S. <no-...@en...> - 2009-08-12 09:02:25
|
Log: * eina_stringshare: We should use "unsigned char", because suncc think that char is signed. Author: cedric Date: 2009-08-12 02:02:09 -0700 (Wed, 12 Aug 2009) New Revision: 41697 Modified: trunk/eina/src/lib/eina_stringshare.c Modified: trunk/eina/src/lib/eina_stringshare.c =================================================================== --- trunk/eina/src/lib/eina_stringshare.c 2009-08-11 20:53:09 UTC (rev 41696) +++ trunk/eina/src/lib/eina_stringshare.c 2009-08-12 09:02:09 UTC (rev 41697) @@ -147,7 +147,7 @@ static Eina_Stringshare *share = NULL; static int _eina_stringshare_init_count = 0; -static const char _eina_stringshare_single[512] = { +static const unsigned char _eina_stringshare_single[512] = { 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0, 16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0, 31,0,32,0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,40,0,41,0,42,0,43,0,44,0,45,0, |
From: Enlightenment S. <no-...@en...> - 2009-08-14 14:22:37
|
Log: * eina: Fix typo. Author: cedric Date: 2009-08-14 07:22:25 -0700 (Fri, 14 Aug 2009) New Revision: 41762 Modified: trunk/eina/src/lib/eina_rectangle.c Modified: trunk/eina/src/lib/eina_rectangle.c =================================================================== --- trunk/eina/src/lib/eina_rectangle.c 2009-08-14 12:31:20 UTC (rev 41761) +++ trunk/eina/src/lib/eina_rectangle.c 2009-08-14 14:22:25 UTC (rev 41762) @@ -259,14 +259,14 @@ sizeof (Eina_Rectangle_Alloc) + sizeof (Eina_Rectangle), 1024); if (!_eina_rectangle_alloc_mp) { - EINA_ERROR_PERR("ERROR: Mempool for rectangle cannot be allocated in list init.\n"); + EINA_ERROR_PERR("ERROR: Mempool for rectangle cannot be allocated in rectangle init.\n"); goto init_error; } _eina_rectangle_mp = eina_mempool_add(choice, "rectangle", NULL, sizeof (Eina_Rectangle), 256); if (!_eina_rectangle_mp) { - EINA_ERROR_PERR("ERROR: Mempool for rectangle cannot be allocated in list init.\n"); + EINA_ERROR_PERR("ERROR: Mempool for rectangle cannot be allocated in rectangle init.\n"); goto init_error; } |
From: Enlightenment S. <no-...@en...> - 2009-08-18 13:58:12
|
Log: * eina_rectangle: Add a local cache to rectangle creation. Author: cedric Date: 2009-08-18 06:35:33 -0700 (Tue, 18 Aug 2009) New Revision: 41856 Modified: trunk/eina/src/lib/eina_rectangle.c Modified: trunk/eina/src/lib/eina_rectangle.c =================================================================== --- trunk/eina/src/lib/eina_rectangle.c 2009-08-18 11:06:33 UTC (rev 41855) +++ trunk/eina/src/lib/eina_rectangle.c 2009-08-18 13:35:33 UTC (rev 41856) @@ -31,6 +31,7 @@ #include "eina_safety_checks.h" #include "eina_mempool.h" #include "eina_list.h" +#include "eina_trash.h" /*============================================================================* * Local * @@ -43,6 +44,8 @@ #define EINA_RECTANGLE_POOL_MAGIC 0x1578FCB0 #define EINA_RECTANGLE_ALLOC_MAGIC 0x1578FCB1 +#define BUCKET_THRESHOLD 110 + typedef struct _Eina_Rectangle_Alloc Eina_Rectangle_Alloc; struct _Eina_Rectangle_Pool @@ -51,6 +54,9 @@ Eina_List *empty; void *data; + Eina_Trash *bucket; + unsigned int bucket_count; + unsigned int references; int w; int h; @@ -82,6 +88,9 @@ static Eina_Mempool *_eina_rectangle_alloc_mp = NULL; static Eina_Mempool *_eina_rectangle_mp = NULL; +static Eina_Trash *_eina_rectangles = NULL; +static unsigned int _eina_rectangles_count = 0; + static int _eina_rectangle_cmp(const Eina_Rectangle *r1, const Eina_Rectangle *r2) { @@ -285,12 +294,18 @@ EAPI int eina_rectangle_shutdown(void) { + Eina_Rectangle *del; + --_eina_rectangle_init_count; if (_eina_rectangle_init_count) return _eina_rectangle_init_count; eina_list_shutdown(); + while (del = eina_trash_pop(&_eina_rectangles)) + eina_mempool_free(_eina_rectangle_mp, del); + _eina_rectangles_count = 0; + eina_mempool_del(_eina_rectangle_alloc_mp); eina_mempool_del(_eina_rectangle_mp); @@ -305,7 +320,15 @@ { Eina_Rectangle *rect; - rect = eina_mempool_malloc(_eina_rectangle_mp, sizeof (Eina_Rectangle)); + if (_eina_rectangles) + { + rect = eina_trash_pop(&_eina_rectangles); + _eina_rectangles_count--; + } + else + { + rect = eina_mempool_malloc(_eina_rectangle_mp, sizeof (Eina_Rectangle)); + } if (!rect) return NULL; EINA_RECTANGLE_SET(rect, x, y, w, h); @@ -317,7 +340,16 @@ eina_rectangle_free(Eina_Rectangle *rect) { EINA_SAFETY_ON_NULL_RETURN(rect); - eina_mempool_free(_eina_rectangle_mp, rect); + + if (_eina_rectangles_count > BUCKET_THRESHOLD) + { + eina_mempool_free(_eina_rectangle_mp, rect); + } + else + { + eina_trash_push(&_eina_rectangles, rect); + _eina_rectangles_count++; + } } EAPI Eina_Rectangle_Pool * @@ -334,6 +366,8 @@ new->sorted = EINA_FALSE; new->w = w; new->h = h; + new->bucket = NULL; + new->bucket_count = 0; EINA_MAGIC_SET(new, EINA_RECTANGLE_POOL_MAGIC); @@ -356,6 +390,12 @@ eina_mempool_free(_eina_rectangle_alloc_mp, del); } + while (pool->bucket) + { + del = eina_trash_pop(&pool->bucket); + eina_mempool_free(_eina_rectangle_alloc_mp, del); + } + MAGIC_FREE(pool); } @@ -390,8 +430,16 @@ if (x == -1) return NULL; pool->sorted = EINA_FALSE; - new = eina_mempool_malloc(_eina_rectangle_alloc_mp, - sizeof (Eina_Rectangle_Alloc) + sizeof (Eina_Rectangle)); + if (pool->bucket_count > 0) + { + new = eina_trash_pop(&pool->bucket); + pool->bucket_count--; + } + else + { + new = eina_mempool_malloc(_eina_rectangle_alloc_mp, + sizeof (Eina_Rectangle_Alloc) + sizeof (Eina_Rectangle)); + } if (!new) return NULL; rect = (Eina_Rectangle*) (new + 1); @@ -428,8 +476,20 @@ era->pool->sorted = EINA_FALSE; } - EINA_MAGIC_SET(era, EINA_MAGIC_NONE); - eina_mempool_free(_eina_rectangle_alloc_mp, era); + if (era->pool->bucket_count < BUCKET_THRESHOLD) + { + Eina_Rectangle_Pool *pool; + + pool = era->pool; + + pool->bucket_count++; + eina_trash_push(&pool->bucket, era); + } + else + { + EINA_MAGIC_SET(era, EINA_MAGIC_NONE); + eina_mempool_free(_eina_rectangle_alloc_mp, era); + } } EAPI Eina_Rectangle_Pool * |
From: Enlightenment S. <no-...@en...> - 2009-09-14 15:29:08
|
Log: * eina: Add explanation around compiler false positiv warning. Author: cedric Date: 2009-09-14 08:28:55 -0700 (Mon, 14 Sep 2009) New Revision: 42488 Modified: trunk/eina/src/lib/eina_array.c trunk/eina/src/lib/eina_rbtree.c Modified: trunk/eina/src/lib/eina_array.c =================================================================== --- trunk/eina/src/lib/eina_array.c 2009-09-14 08:46:52 UTC (rev 42487) +++ trunk/eina/src/lib/eina_array.c 2009-09-14 15:28:55 UTC (rev 42488) @@ -522,6 +522,10 @@ eina_array_remove(Eina_Array *array, Eina_Bool (*keep)(void *data, void *gdata), void *gdata) { void **tmp; + /* WARNING: + The algorithm does exit before using unitialized data. So compiler is + giving you a false positiv here too. + */ void *data; unsigned int total = 0; unsigned int limit; Modified: trunk/eina/src/lib/eina_rbtree.c =================================================================== --- trunk/eina/src/lib/eina_rbtree.c 2009-09-14 08:46:52 UTC (rev 42487) +++ trunk/eina/src/lib/eina_rbtree.c 2009-09-14 15:28:55 UTC (rev 42488) @@ -257,6 +257,11 @@ Eina_Rbtree head; Eina_Rbtree *g, *t; /* Grandparent & parent */ Eina_Rbtree *p, *q; /* Iterator & parent */ + /* WARNING: + Compiler is not able to understand the underlying algorithm and don't know that + first top node is always black, so it will never use last before running the loop + one time. + */ Eina_Rbtree_Direction dir, last; EINA_SAFETY_ON_NULL_RETURN_VAL(node, root); |
From: Enlightenment S. <no-...@en...> - 2009-09-25 12:02:27
|
Log: * eina_atofp: Always return EINA_TRUE on valid input string. Author: cedric Date: 2009-09-25 05:02:14 -0700 (Fri, 25 Sep 2009) New Revision: 42700 Modified: trunk/eina/src/lib/eina_convert.c Modified: trunk/eina/src/lib/eina_convert.c =================================================================== --- trunk/eina/src/lib/eina_convert.c 2009-09-25 11:51:52 UTC (rev 42699) +++ trunk/eina/src/lib/eina_convert.c 2009-09-25 12:02:14 UTC (rev 42700) @@ -735,9 +735,11 @@ long long m; long e; - if (!eina_convert_atod(src, length, &m, &e) || !fp) + if (!eina_convert_atod(src, length, &m, &e)) return EINA_FALSE; + if (!fp) return EINA_TRUE; + e += 32; if (e > 0) *fp = m << e; |
From: Enlightenment S. <no-...@en...> - 2009-11-13 17:52:53
|
Log: * eina: Now it's possible set a level when eina should abort on log. Author: cedric Date: 2009-11-13 09:52:43 -0800 (Fri, 13 Nov 2009) New Revision: 43669 Modified: trunk/eina/src/lib/eina_log.c Modified: trunk/eina/src/lib/eina_log.c =================================================================== --- trunk/eina/src/lib/eina_log.c 2009-11-13 17:51:52 UTC (rev 43668) +++ trunk/eina/src/lib/eina_log.c 2009-11-13 17:52:43 UTC (rev 43669) @@ -324,6 +324,7 @@ */ #define EINA_LOG_ENV_ABORT "EINA_LOG_ABORT" +#define EINA_LOG_ENV_ABORT_LEVEL "EINA_LOG_ABORT_LEVEL" #define EINA_LOG_ENV_LEVEL "EINA_LOG_LEVEL" #define EINA_LOG_ENV_LEVELS "EINA_LOG_LEVELS" #define EINA_LOG_ENV_LEVELS_GLOB "EINA_LOG_LEVELS_GLOB" @@ -355,6 +356,7 @@ static Eina_Bool _disable_file = EINA_FALSE; static Eina_Bool _disable_function = EINA_FALSE; static Eina_Bool _abort_on_critical = EINA_FALSE; +static int _abort_level_on_critical = EINA_LOG_LEVEL_CRITICAL; #ifdef EFL_HAVE_PTHREAD #include <pthread.h> @@ -979,6 +981,9 @@ if ((tmp = getenv(EINA_LOG_ENV_ABORT)) && (atoi(tmp) == 1)) _abort_on_critical = EINA_TRUE; + if ((tmp = getenv(EINA_LOG_ENV_ABORT_LEVEL))) + _abort_level_on_critical = atoi(tmp); + eina_log_print_prefix_update(); // Global log level @@ -1395,7 +1400,7 @@ _print_cb(d, level, file, fnc, line, fmt, _print_cb_data, args); if (EINA_UNLIKELY(_abort_on_critical) && - EINA_UNLIKELY(level <= EINA_LOG_LEVEL_CRITICAL)) + EINA_UNLIKELY(level <= _abort_level_on_critical)) abort(); } |
From: Enlightenment S. <no-...@en...> - 2009-12-07 13:08:22
|
Log: * eina: Fix atofp when exponent is negativ. Author: cedric Date: 2009-12-07 05:08:16 -0800 (Mon, 07 Dec 2009) New Revision: 44244 Modified: trunk/eina/src/lib/eina_convert.c Modified: trunk/eina/src/lib/eina_convert.c =================================================================== --- trunk/eina/src/lib/eina_convert.c 2009-12-07 12:53:29 UTC (rev 44243) +++ trunk/eina/src/lib/eina_convert.c 2009-12-07 13:08:16 UTC (rev 44244) @@ -747,7 +747,7 @@ e += 32; if (e > 0) *fp = m << e; - else *fp = m >> e; + else *fp = m >> -e; return EINA_TRUE; } |
From: Enlightenment S. <no-...@en...> - 2009-12-31 10:26:57
|
Log: * eina_benchmark: Little cleanup. Author: cedric Date: 2009-12-31 02:26:41 -0800 (Thu, 31 Dec 2009) New Revision: 44831 Modified: trunk/eina/src/lib/eina_benchmark.c Modified: trunk/eina/src/lib/eina_benchmark.c =================================================================== --- trunk/eina/src/lib/eina_benchmark.c 2009-12-31 09:17:28 UTC (rev 44830) +++ trunk/eina/src/lib/eina_benchmark.c 2009-12-31 10:26:41 UTC (rev 44831) @@ -498,6 +498,8 @@ EAPI void eina_benchmark_free(Eina_Benchmark *bench) { + Eina_Array *names; + if (!bench) return ; while (bench->runs) @@ -508,23 +510,16 @@ free(run); } - while (bench->names) + EINA_LIST_FREE(bench->names, names) { - Eina_Array *names; + Eina_Array_Iterator it; + char *tmp; + unsigned int i; - names = eina_list_data_get(bench->names); - if (names) - { - Eina_Array_Iterator it; - char *tmp; - unsigned int i; - - EINA_ARRAY_ITER_NEXT(names, i, tmp, it) - free(tmp); - - eina_array_free(names); - } - bench->names = eina_list_remove_list(bench->names, bench->names); + EINA_ARRAY_ITER_NEXT(names, i, tmp, it) + free(tmp); + + eina_array_free(names); } free(bench); |
From: Enlightenment S. <no-...@en...> - 2010-02-09 12:59:38
|
Log: * eina: Remove warning in eina_stringshare. Author: cedric Date: 2010-02-09 04:59:31 -0800 (Tue, 09 Feb 2010) New Revision: 46009 Modified: trunk/eina/src/lib/eina_stringshare.c Modified: trunk/eina/src/lib/eina_stringshare.c =================================================================== --- trunk/eina/src/lib/eina_stringshare.c 2010-02-09 12:59:29 UTC (rev 46008) +++ trunk/eina/src/lib/eina_stringshare.c 2010-02-09 12:59:31 UTC (rev 46009) @@ -763,14 +763,14 @@ static inline Eina_Bool -_eina_stringshare_node_eq(const Eina_Stringshare_Node *node, const char *str, int slen) +_eina_stringshare_node_eq(const Eina_Stringshare_Node *node, const char *str, unsigned int slen) { return ((node->length == slen) && (memcmp(node->str, str, slen) == 0)); } static Eina_Stringshare_Node * -_eina_stringshare_head_find(Eina_Stringshare_Head *head, const char *str, int slen) +_eina_stringshare_head_find(Eina_Stringshare_Head *head, const char *str, unsigned int slen) { Eina_Stringshare_Node *node, *prev; |
From: Enlightenment S. <no-...@en...> - 2010-05-03 13:18:01
|
Log: * eina: make quadtree faster. Author: cedric Date: 2010-05-03 06:17:52 -0700 (Mon, 03 May 2010) New Revision: 48575 Modified: trunk/eina/src/lib/eina_quadtree.c Modified: trunk/eina/src/lib/eina_quadtree.c =================================================================== --- trunk/eina/src/lib/eina_quadtree.c 2010-05-03 11:07:39 UTC (rev 48574) +++ trunk/eina/src/lib/eina_quadtree.c 2010-05-03 13:17:52 UTC (rev 48575) @@ -84,16 +84,14 @@ Eina_QuadTree_Root *root; Eina_List *hidden; - Eina_Array *change; + size_t root_count; size_t items_count; + Eina_Trash *items_trash; - Eina_Mempool *items_mp; - - size_t root_count; Eina_Trash *root_trash; - Eina_Mempool *root_mp; + Eina_Inlist *change; Eina_Inlist *cached; Eina_Rectangle target; @@ -145,6 +143,8 @@ }; static int _eina_log_qd_dom = -1; +static Eina_Mempool *root_mp = NULL; +static Eina_Mempool *items_mp = NULL; #ifdef ERR #undef ERR @@ -169,24 +169,27 @@ static Eina_QuadTree_Root * eina_quadtree_root_free(Eina_QuadTree *q, Eina_QuadTree_Root *root) { + Eina_QuadTree_Item *item; + if (!root) return NULL; EINA_MAGIC_CHECK_QUADTREE_ROOT(root, NULL); - root->both = eina_list_free(root->both); + EINA_LIST_FREE(root->both, item) + eina_mempool_free(items_mp, item); root->left = eina_quadtree_root_free(q, root->left); root->right = eina_quadtree_root_free(q, root->right); EINA_MAGIC_SET(root, 0); - /* eina_quadtree_root_free is only called when the memory pool will be destroyed */ + eina_mempool_free(root_mp, root); return NULL; } static Eina_QuadTree_Root * eina_quadtree_root_rebuild_pre(Eina_QuadTree *q, - Eina_Array *change, + Eina_Inlist **change, Eina_QuadTree_Root *root) { Eina_QuadTree_Item *item; @@ -197,7 +200,7 @@ { if (item->visible) { - eina_array_push(change, item); + *change = eina_inlist_append(*change, EINA_INLIST_GET(item)); } else if (!item->hidden) { @@ -213,7 +216,7 @@ EINA_MAGIC_SET(root, 0); if (q->root_count > 50) { - eina_mempool_free(q->root_mp, root); + eina_mempool_free(root_mp, root); } else { @@ -225,24 +228,25 @@ } static size_t -_eina_quadtree_split(Eina_Array *objects, +_eina_quadtree_split(Eina_Inlist *objects, Eina_QuadTree_Root *root, - Eina_Array *left, - Eina_Array *right, + Eina_Inlist **left, + Eina_Inlist **right, Eina_Quad_Callback func, int border, int middle) { Eina_QuadTree_Item *object; - Eina_Array_Iterator it; - unsigned int i; middle /= 2; if (middle <= 4) { - EINA_ARRAY_ITER_NEXT(objects, i, object, it) + while (objects) { + object = EINA_INLIST_CONTAINER_GET(objects, Eina_QuadTree_Item); + objects = objects->next; + object->change = EINA_FALSE; if (!object->visible) { @@ -281,8 +285,11 @@ } else { - EINA_ARRAY_ITER_NEXT(objects, i, object, it) + while (objects) { + object = EINA_INLIST_CONTAINER_GET(objects, Eina_QuadTree_Item); + objects = objects->next; + object->change = EINA_FALSE; if (!object->visible) { @@ -304,10 +311,10 @@ switch (func(object->object, border + middle)) { case EINA_QUAD_LEFT: - eina_array_push(left, object); + *left = eina_inlist_append(*left, EINA_INLIST_GET(object)); break; case EINA_QUAD_RIGHT: - eina_array_push(right, object); + *right = eina_inlist_append(*right, EINA_INLIST_GET(object)); break; case EINA_QUAD_BOTH: root->both = eina_list_append(root->both, object); @@ -324,29 +331,27 @@ } } - eina_array_clean(objects); - return middle; } static Eina_QuadTree_Root * _eina_quadtree_update(Eina_QuadTree *q, Eina_QuadTree_Root *parent, - Eina_QuadTree_Root *root, Eina_Array *objects, + Eina_QuadTree_Root *root, Eina_Inlist *objects, Eina_Bool direction, Eina_Rectangle *size) { - Eina_Array right; - Eina_Array left; + Eina_Inlist *right = NULL; + Eina_Inlist *left = NULL; size_t w2; size_t h2; - if (!objects || eina_array_count_get(objects) == 0) + if (!objects) return root; if (!root) { root = eina_trash_pop(&q->root_trash); - if (!root) root = eina_mempool_malloc(q->root_mp, sizeof (Eina_QuadTree_Root)); + if (!root) root = eina_mempool_malloc(root_mp, sizeof (Eina_QuadTree_Root)); else q->root_count--; if (!root) { @@ -363,9 +368,6 @@ EINA_MAGIC_SET(root, EINA_MAGIC_QUADTREE_ROOT); } - eina_array_step_set(&right, 32); - eina_array_step_set(&left, 32); - w2 = 0; h2 = 0; @@ -380,18 +382,15 @@ size->w -= w2; size->h -= h2; root->left = _eina_quadtree_update(q, root, - root->left, &left, + root->left, left, !direction, size); size->x += w2; size->y += h2; root->right = _eina_quadtree_update(q, root, - root->right, &right, + root->right, right, !direction, size); size->x -= w2; size->y -= h2; size->w += w2; size->h += h2; - eina_array_flush(&left); - eina_array_flush(&right); - return root; } @@ -557,7 +556,7 @@ if (object->quad->root_count > 50) { - eina_mempool_free(object->quad->root_mp, object->root); + eina_mempool_free(root_mp, object->root); } else { @@ -588,13 +587,8 @@ result->geom.w = w; result->geom.h = h; - result->change = eina_array_new(32); + result->change = NULL; - result->items_mp = eina_mempool_add("chained_mempool", "QuadTree Item", NULL, - sizeof (Eina_QuadTree_Item), 320); - result->root_mp = eina_mempool_add("chained_mempool", "QuadTree Root", NULL, - sizeof (Eina_QuadTree_Root), 32); - result->lost = EINA_TRUE; EINA_MAGIC_SET(result, EINA_MAGIC_QUADTREE); @@ -605,18 +599,39 @@ EAPI void eina_quadtree_free(Eina_QuadTree *q) { + Eina_QuadTree_Item *item; + if (!q) return ; EINA_MAGIC_CHECK_QUADTREE(q); - eina_array_free(q->change); - q->hidden = eina_list_free(q->hidden); + while (q->change) + { + item = EINA_INLIST_CONTAINER_GET(q->change, Eina_QuadTree_Item); + q->change = q->change->next; + if (!item->hidden) + eina_mempool_free(items_mp, item); + } + EINA_LIST_FREE(q->hidden, item) + eina_mempool_free(items_mp, item); + eina_quadtree_root_free(q, q->root); - eina_mempool_del(q->items_mp); - eina_mempool_del(q->root_mp); + while (q->items_trash) + { + item = eina_trash_pop(&q->items_trash); + eina_mempool_free(items_mp, item); + } + while (q->root_trash) + { + Eina_QuadTree_Root *root; + + root = eina_trash_pop(&q->root_trash); + eina_mempool_free(root_mp, root); + } + EINA_MAGIC_SET(q, 0); free(q); } @@ -631,7 +646,7 @@ if (!object) return NULL; result = eina_trash_pop(&q->items_trash); - if (!result) result = eina_mempool_malloc(q->items_mp, sizeof (Eina_QuadTree_Item)); + if (!result) result = eina_mempool_malloc(items_mp, sizeof (Eina_QuadTree_Item)); else q->items_count--; if (!result) return NULL; @@ -639,6 +654,7 @@ result->root = NULL; result->object = object; + result->index = 0; result->change = EINA_TRUE; result->delete_me = EINA_FALSE; result->visible = EINA_TRUE; @@ -647,7 +663,7 @@ EINA_MAGIC_SET(result, EINA_MAGIC_QUADTREE_ITEM); /* Insertion is delayed until we really need to use it */ - eina_array_push(q->change, result); + q->change = eina_inlist_append(q->change, EINA_INLIST_GET(result)); return result; } @@ -679,7 +695,7 @@ EINA_MAGIC_SET(object, 0); if (object->quad->items_count > 256) { - eina_mempool_free(object->quad->items_mp, object); + eina_mempool_free(items_mp, object); } else { @@ -703,7 +719,8 @@ /* Delaying change until needed */ if (!object->change) - eina_array_push(object->quad->change, object); + object->quad->change = eina_inlist_append(object->quad->change, + EINA_INLIST_GET(object)); object->change = EINA_TRUE; _eina_quadtree_remove(object); @@ -758,17 +775,18 @@ if (q->resize) /* Full rebuild needed ! */ { DBG("resizing quadtree"); - q->root = eina_quadtree_root_rebuild_pre(q, q->change, q->root); + q->root = eina_quadtree_root_rebuild_pre(q, &q->change, q->root); q->resize = EINA_FALSE; } EINA_RECTANGLE_SET(&canvas, 0, 0, q->geom.w, q->geom.h); - if (eina_array_count_get(q->change) > 0) + if (q->change) { DBG("updating quadtree content"); q->root = _eina_quadtree_update(q, NULL, q->root, q->change, EINA_FALSE, &canvas); + q->change = NULL; } if (q->target.x != x @@ -804,6 +822,8 @@ EINA_MAGIC_CHECK_QUADTREE_ITEM(qi, NULL); + if (!qi->visible) return NULL; + return (void*) qi->object; } @@ -845,6 +865,11 @@ EMS(EINA_MAGIC_QUADTREE_ITEM); #undef EMS + items_mp = eina_mempool_add("chained_mempool", "QuadTree Item", NULL, + sizeof (Eina_QuadTree_Item), 320); + root_mp = eina_mempool_add("chained_mempool", "QuadTree Root", NULL, + sizeof (Eina_QuadTree_Root), 32); + return EINA_TRUE; } |
From: Enlightenment S. <no-...@en...> - 2010-05-04 14:42:22
|
Log: * eina: use previous cached result in quadtree. Author: cedric Date: 2010-05-04 07:42:13 -0700 (Tue, 04 May 2010) New Revision: 48607 Modified: trunk/eina/src/lib/eina_quadtree.c Modified: trunk/eina/src/lib/eina_quadtree.c =================================================================== --- trunk/eina/src/lib/eina_quadtree.c 2010-05-04 01:34:00 UTC (rev 48606) +++ trunk/eina/src/lib/eina_quadtree.c 2010-05-04 14:42:13 UTC (rev 48607) @@ -787,6 +787,7 @@ q->root = _eina_quadtree_update(q, NULL, q->root, q->change, EINA_FALSE, &canvas); q->change = NULL; + q->lost = EINA_TRUE; } if (q->target.x != x @@ -805,6 +806,7 @@ q->cached = _eina_quadtree_collide(NULL, q->root, EINA_FALSE, &canvas, &q->target); + q->lost = EINA_FALSE; } return q->cached; |
From: Enlightenment S. <no-...@en...> - 2010-05-04 16:26:38
|
Log: * eina: don't shadow global variable. Author: cedric Date: 2010-05-04 09:26:29 -0700 (Tue, 04 May 2010) New Revision: 48614 Modified: trunk/eina/src/lib/eina_quadtree.c Modified: trunk/eina/src/lib/eina_quadtree.c =================================================================== --- trunk/eina/src/lib/eina_quadtree.c 2010-05-04 15:58:10 UTC (rev 48613) +++ trunk/eina/src/lib/eina_quadtree.c 2010-05-04 16:26:29 UTC (rev 48614) @@ -741,16 +741,16 @@ EAPI Eina_Bool eina_quadtree_show(Eina_QuadTree_Item *object) { - size_t index; + size_t tmp; EINA_MAGIC_CHECK_QUADTREE_ITEM(object, EINA_FALSE); - index = object->quad->index++; - if (object->index == index + tmp = object->quad->index++; + if (object->index == tmp && object->visible) return EINA_TRUE; - object->index = index; + object->index = tmp; if (object->root) object->root->sorted = EINA_FALSE; object->quad->lost = EINA_TRUE; |
From: Enlightenment S. <no-...@en...> - 2010-07-19 11:25:16
|
Log: * eina: fix tolower call. Author: cedric Date: 2010-07-19 04:25:10 -0700 (Mon, 19 Jul 2010) New Revision: 50366 Modified: trunk/eina/src/lib/eina_str.c Modified: trunk/eina/src/lib/eina_str.c =================================================================== --- trunk/eina/src/lib/eina_str.c 2010-07-19 10:59:07 UTC (rev 50365) +++ trunk/eina/src/lib/eina_str.c 2010-07-19 11:25:10 UTC (rev 50366) @@ -32,6 +32,7 @@ #include <stdlib.h> #include <string.h> #include <limits.h> +#include <ctype.h> #ifdef HAVE_ICONV # include <errno.h> @@ -574,7 +575,7 @@ char *p; if ((!str) || (!(*str))) return; - for (p = *str; (*p); *p++) + for (p = *str; (*p); p++) if ((*p >= 'A') && (*p <= 'Z')) *p = tolower(*p); } |