Commit Graph

503 Commits

Author SHA1 Message Date
Gustavo Sverzut Barbieri f98bf21da7 allocate more buckets on init to save couple of reallocs during startup.
SVN revision: 42303
2009-09-06 22:34:38 +00:00
Gustavo Sverzut Barbieri 205e0fe399 fix macro positioning of '\'
SVN revision: 42302
2009-09-06 22:25:36 +00:00
Gustavo Sverzut Barbieri e4af7c100c EINA API BREAK: no more individual modules init/shutdown.
Being able to indivually initialize individual modules was initially
"good", but at end it's putting complexities on users that would try
to "optimize" by doing just what they used, but in the end most people
would get them wrong, users would have to do lots of code and etc. At
the end it does not worth.

Most module init just register handful errors and log domains, so are
cheap. The exception is mempool users, that would dlopen() stuff, but
people that are concerned (embedded) can just compile those statically
in eina.

Since at the end any real application would use most of modules, we
actually end saving lots of function calls that would do nothing other
than increment a global counter.

I also did the init/shutdown use an array, making it easier to
maintain. The inital dependencies were analysed by a script I wrote, I
hope it's all right.

Please fix any breakages you find!



SVN revision: 42300
2009-09-06 22:21:56 +00:00
Vincent Torri 718873e00c shut down safety checks in the log module
Note : currently, because of a circular calls of
eina_log_init() and eina_safety_checks_init(), eina
is not correctly shut down. Imho, eina_log should not
depend on the safety checks module. That would mean
some fprintf in eina_log_domain_new(), eina_log_domain_free(),
eina_log_domain_register()and eina_log_domain_unregister().


SVN revision: 42292
2009-09-06 15:25:35 +00:00
Vincent Torri e780763aa0 shutdown array module
SVN revision: 42287
2009-09-06 08:39:04 +00:00
Gustavo Sverzut Barbieri 5846195caf eina_log: be able to disable function or line.
write down specialized cases for threads or not, function or file,
color or not. Maybe it's not even an optimization since we add yet
another indirection/function call, but each case is simpler.

 * EINA_LOG_FILE_DISABLE=1: disables show of file:line in
   stderr/stdout messages.
 * EINA_LOG_FUNCTION_DISABLE=1: disables show of function() in
   stderr/stdout messages.

one must not use the two options at the same time, if that's the case
code will ignore EINA_LOG_FILE_DISABLE=1 and use just function
disable.



SVN revision: 42272
2009-09-04 23:45:16 +00:00
Vincent Torri d56568b7f9 eina_log uses pthreads now (if enabled), so link libeina against pthread
SVN revision: 42248
2009-09-04 16:25:18 +00:00
Gustavo Sverzut Barbieri eef2d35ea6 eina_matrixsparse: loggify, install header, remove warnings and coding style.
* use eina_log
 * install eina_matrixsparse.h
 * remove unused variable
 * fix coding style issue reported by Vincent



SVN revision: 42246
2009-09-04 14:18:05 +00:00
Gustavo Sverzut Barbieri 643958705b eina_matrixsparse: welcome sparse matrix implementation and tests.
Sparse Matrix was implemented and tested by Rafael Antognolli and
myself in order to implement optimized large sparse matrix walk in
some products, one of them WebKit-EFL optimizations.

We have done extensive tests, with good code coverage. Similar to
lists/inlists, we keep pointer to last known element and similar to
iterators we keep reference to last accessed row and cell inside
rows. This allows fast sequential access (for i... for j... m[i,j]),
that is our most common usage case.

Rows are kept in a list, with cells inside that row as another
list. It's not similar to most book implementations where cells keep
reference to their sibling cells in other rows as well, we opted to
not do that to save some pointers and make algorithms simpler, still
do great for our use case.

This code was developed on behalf of our client, that wants to remain
unnamed so far. Thanks client ;-)



SVN revision: 42243
2009-09-04 13:43:44 +00:00
Gustavo Sverzut Barbieri e88b62b295 oops! thanks Vincent.
SVN revision: 42230
2009-09-04 03:52:05 +00:00
Gustavo Sverzut Barbieri 4d5fbb7742 loggify array.
this is the last eina module to be converted to eina_log! :-)


SVN revision: 42228
2009-09-04 02:35:24 +00:00
Gustavo Sverzut Barbieri 5ea9ceeafc eina_module must initialize eina_array as it is used.
SVN revision: 42227
2009-09-04 02:34:48 +00:00
Gustavo Sverzut Barbieri dfee09d6b0 make it easier to spot wrong users of eina_log_print()
SVN revision: 42226
2009-09-04 02:34:10 +00:00
Gustavo Sverzut Barbieri 9f8dfea129 loggify rectangle.
SVN revision: 42225
2009-09-04 02:11:44 +00:00
Gustavo Sverzut Barbieri 04489ec727 loggify stringshare, with extensive debug.
note that one can turn per module debug, for example:

   EINA_LOG_LEVEL=4 EINA_LOG_LEVELS=eina_stringshare:0 ./bla

will enable level 4 (debug) for all modules except eina_stringshare
that is forced to 0 (just critical messages).



SVN revision: 42224
2009-09-04 02:03:46 +00:00
Gustavo Sverzut Barbieri 21545b087a loggify stringshare.
SVN revision: 42223
2009-09-04 01:54:37 +00:00
Gustavo Sverzut Barbieri ecbff0cb75 loggify main.
SVN revision: 42222
2009-09-04 01:48:36 +00:00
Gustavo Sverzut Barbieri 8a2c84631c loggify list.
SVN revision: 42221
2009-09-04 01:43:50 +00:00
Gustavo Sverzut Barbieri 8ca1675c51 eina_error: deprecated old logging, move to eina_log.
SVN revision: 42220
2009-09-04 01:37:11 +00:00
Gustavo Sverzut Barbieri 2406791660 loggify benchmark.
SVN revision: 42219
2009-09-04 01:19:19 +00:00
Gustavo Sverzut Barbieri dac152772f loggify mempool.
SVN revision: 42218
2009-09-04 01:13:49 +00:00
Gustavo Sverzut Barbieri 253a9623e9 loggify eina_convert.
SVN revision: 42217
2009-09-04 01:03:27 +00:00
Gustavo Sverzut Barbieri eeb2d38d38 eina_log_vprint() for those that want to wrap it in other functions.
SVN revision: 42216
2009-09-04 00:57:09 +00:00
Gustavo Sverzut Barbieri 0dd3836c56 missing file, sorry.
SVN revision: 42215
2009-09-04 00:56:16 +00:00
Gustavo Sverzut Barbieri 07d2bde900 eina_safety_checks_init()
All these individual init functions are getting messy, some modules
lack them and it's easy to get inconsistent. Safety check needs error
and log, but these need safety checks as well, some modules (lalloc,
rbtree and others) use safety checks but provide no _init().

I want to know if we really gain something to init individual
modules. It should not be that expensive as init should not allocate
heavy resources and the recommendation is to call eina_init() so most
users will do that anyway.

If people agree I'll unmark all *_init() as EAPI and make them private
to eina lib.



SVN revision: 42214
2009-09-04 00:53:19 +00:00
Gustavo Sverzut Barbieri cee03dcb3c eina_log: CONVENTION BREAK!!!! automatically adds \n
Automatically add \n to messages. Since we use that prefix, there is
no use to allow messages without \n, it would look a mess.

Some logging systems may not require the trailing newline, for example
logging to xml or syslog, for those you don't need to ignore this char
if present.

Yes, this breaks convention, but better now than latter. And the
results are not so bad.



SVN revision: 42200
2009-09-03 01:39:45 +00:00
Gustavo Sverzut Barbieri 8024360138 eina_log: thread safe logging!
eina_log_threads_enable() and then get thread safe logging with
non-main threads being printed with special notation to easily spot
those.



SVN revision: 42199
2009-09-03 01:31:26 +00:00
Gustavo Sverzut Barbieri d8ee1b3a24 eina_log: fix error handling and handle deleted domains.
EINA_SAFETY_CHECKS will call eina_log, so calling these from inside
eina_log_print() may lead to recursion, that is really bad (although
it seems it would never lead to infinite recursion).

handle d->deleted, also showing error.



SVN revision: 42198
2009-09-03 00:17:27 +00:00
Gustavo Sverzut Barbieri 9fb9b1259d eina_log: fix stderr, improve log output.
* stderr logger was doing prefix properly but user message to stdout, fixed.
 * log is improved:
   * grep-able, it shows the 3 letter level name as prefix, unknown levels
     will have their number printed.
   * colors just on prefix, less polluted output still easy to spot.
   * function names are highlighted.



SVN revision: 42197
2009-09-03 00:07:25 +00:00
Gustavo Sverzut Barbieri 418c99a8e3 eina_log improvements: docs, micro optimizations and stderr logging by default.
* more docs.
 * do not getenv("EINA_LOG_ABORT") everytime, just at init.
 * EINA_UNLIKELY() in some critical paths (not that big impact anyway)
 * eina_log_print_cb_stderr() and use it by default.




SVN revision: 42196
2009-09-02 23:28:00 +00:00
Gustavo Sverzut Barbieri bb717a3be5 less malloc and memory fragmentation.
not that important, but an easy improvement does not hurt.



SVN revision: 42195
2009-09-02 23:11:22 +00:00
Gustavo Sverzut Barbieri 2f8ded1037 loggify eina_module, adding couple of debug info.
SVN revision: 42194
2009-09-02 23:06:55 +00:00
Gustavo Sverzut Barbieri c1e2a300e4 coding style/indent.
SVN revision: 42193
2009-09-02 22:39:41 +00:00
Cedric BAIL 49cb141f10 * eina_magic: Test suite now work when magic debug is disabled.
SVN revision: 42150
2009-09-01 12:17:13 +00:00
Vincent Torri 8f53c520a4 typo
SVN revision: 42091
2009-08-29 20:53:12 +00:00
Vincent Torri 2a5548f8e9 better fix : if HW_AVAILCPU is defined, we use it, otherwise we use HW_NCPU
SVN revision: 42090
2009-08-29 19:59:26 +00:00
Vincent Torri 841aaa8f52 typo
SVN revision: 42089
2009-08-29 19:29:30 +00:00
Vincent Torri 9f01ad25cf fix for the BSD systems
SVN revision: 42088
2009-08-29 16:39:59 +00:00
Vincent Torri 72b87160a2 * add eina_config.h in all source files. Fix linking with Visual Studio
* move eina_private.h and eina_safety_checks.h just after eina_config.h


SVN revision: 42077
2009-08-28 12:03:34 +00:00
Vincent Torri 5612cf9020 * declare variables at the beginning of the block
* strtol returns a long int

SVN revision: 42063
2009-08-28 07:21:35 +00:00
Vincent Torri bc6ee8c17a fix warning with vc++
SVN revision: 42062
2009-08-28 07:15:49 +00:00
dieb c891a34a08 Add eina_log module into the main module and global header.
SVN revision: 41985
2009-08-25 21:26:27 +00:00
Gustavo Sverzut Barbieri c8534587f2 do not check for data, eina_iterator_next/eina_accessor_data_get() does that.
SVN revision: 41984
2009-08-25 21:05:00 +00:00
dieb d7bbc05b12 Initial import of the new eina logging API.
* eina_error might be kept for error messages and codes, but it's logging API
  will be deprecated. For now, it's been kept for not breaking others code and
  for a smoother transition.
* Added test for new logging API, also demonstrates usage.


SVN revision: 41960
2009-08-24 21:43:48 +00:00
Vincent Torri 37fc8c9674 fix warning
SVN revision: 41943
2009-08-23 20:37:17 +00:00
Vincent Torri 6e7aecc7c0 * Put definition of alloca before any standard header
files according to the doc
 * define _GNU_SOURCE before the inclusion of alloca
   as features.h inclued by alloca.h, defines some
   macros according to _GNU_SOURCE.



SVN revision: 41940
2009-08-23 09:18:14 +00:00
Vincent Torri 989ade86dd fix a bit the documentation
SVN revision: 41870
2009-08-19 07:54:13 +00:00
Vincent Torri 2d97e95d2a clean a bit the hamster
SVN revision: 41869
2009-08-19 07:36:39 +00:00
Cedric BAIL 0b7407905c * eina_rectangle: Add a local cache to rectangle creation.
SVN revision: 41856
2009-08-18 13:35:33 +00:00
Gustavo Sverzut Barbieri 425ebc47f5 improve docs and simplify macro, by kubo.
Kubo just found that docs could be improved and macro could be
simplified during his learning of EFL. Big bonus he did the
improvements =)



SVN revision: 41799
2009-08-16 00:47:23 +00:00
Cedric BAIL c634e07770 * eina: Fix typo.
SVN revision: 41762
2009-08-14 14:22:25 +00:00
Carsten Haitzler 819c572d1c amazing time hamsters!
SVN revision: 41728
2009-08-13 01:26:08 +00:00
Carsten Haitzler d0c5158f5b eina hamster++
<dieb_> weird, undefined refernce to eina_cpu_count
<raster> you have no cpus!
<dieb_> dammit!
<Sachiel> try eina_hamster_count
<dieb_> lo
<raster> oh god
<raster> now u did it
<raster> i have to add that
<dieb_> heheheh



SVN revision: 41727
2009-08-13 00:47:55 +00:00
Cedric BAIL e713c62730 * eina_stringshare: We should use "unsigned char", because suncc think that char is signed.
SVN revision: 41697
2009-08-12 09:02:09 +00:00
Cedric BAIL ae1d5b38bb * eina: eina_cpu_count should be multiplatform.
SVN revision: 41689
2009-08-11 14:11:36 +00:00
Rafael Antognolli a67732bb88 Fixed check at the start of eina_list_accessor_get_at.
SVN revision: 41634
2009-08-07 20:28:05 +00:00
Gustavo Sverzut Barbieri 7526d8e309 be more clear in docs.
SVN revision: 41629
2009-08-07 01:35:16 +00:00
Gustavo Sverzut Barbieri 944be7e745 Bugfix eina_list_search_sorted_near_list() add sorted_insert.
eina_list_search_sorted_near_list() was broken and barfed at my face
during development of eina_list_sorted_insert(), so I rewrote it
following more traditional approach, also adding special cases for
head/tail remembering that random access in lists is not as fast as
array. I also simplified that code.

eina_list_sorted_insert() should be fast, O(log2 n) insert, with
special cases to insert already sorted arrays forwards or backwards,
however I believe that it's better to simply append/prepend in those
cases (if known).



SVN revision: 41625
2009-08-06 22:31:45 +00:00
Gustavo Sverzut Barbieri 4f39f6861a API BREAK: eina_list_search_sorted_near_list() gets one more parameter.
This should not impact anybody, at least in SVN I got no hits for this
function.

The new parameter contains the result of the last call to func(), so
we can know if the node is smaller, bigger or exactly the requested
value and don't need to call func() on node to know for sure.



SVN revision: 41623
2009-08-06 19:01:47 +00:00
Gustavo Sverzut Barbieri 638e79b91e smarter eina_list_merge(), more tests.
eina_list_merge() now fixes the smallest list segment, not always the
right. Before if we joined a list 1 to 1000 segments we'd fix all the
1000 instead of the single at left.

Tests to make sure both code paths are being executed.



SVN revision: 41622
2009-08-06 18:35:53 +00:00
Gustavo Sverzut Barbieri 70a599936d oops, consider fixed_bitmap if it was built statically.
SVN revision: 41621
2009-08-06 18:08:14 +00:00
Gustavo Sverzut Barbieri aeef508b8a eina list docs.
* document undocumented functions.
 * note order of magnitude of each function, try to avoid users
   falling into traps.



SVN revision: 41619
2009-08-06 15:50:19 +00:00
Cedric BAIL 2bc76eab5a * eina_rectangle: Forgot to initialise one attribute.
SVN revision: 41606
2009-08-05 14:46:21 +00:00
Cedric BAIL 5784d74daa * eina: Add eina_cpu_count.
SVN revision: 41543
2009-07-30 16:45:15 +00:00
Cedric BAIL e75b89d50c * eina: Handle NULL in eina_list_search_sorted_near_list.
SVN revision: 41467
2009-07-21 15:21:46 +00:00
Gustavo Sverzut Barbieri 14105484aa Eina rectangle missing list init.
Rectangle needs the list module for the pool_new() function. Patch
also adds a check for initialization error on the unit test.

By: Andre Dieb


SVN revision: 41460
2009-07-21 01:55:31 +00:00
Cedric BAIL b02de756a6 * eina: Rename eina_module_list_delete to eina_module_list_flush.
SVN revision: 41385
2009-07-17 11:13:38 +00:00
Gustavo Sverzut Barbieri a772d03b40 inlist: docs, docs docs
SVN revision: 41328
2009-07-14 15:32:21 +00:00
Gustavo Sverzut Barbieri 9af4d08f79 one more safety check: do not remove element if it's not in any list.
This is the best we can do, but what should be done is to check if
element is really from that list.



SVN revision: 41326
2009-07-14 14:00:59 +00:00
Cedric BAIL 729eaf324c * eina: Remove recursion from eina_rectangle.
SVN revision: 41263
2009-07-07 11:24:44 +00:00
Cedric BAIL dbaeb5eaba * eina: Partial fix for ticket #286.
SVN revision: 41241
2009-07-03 12:39:32 +00:00
Vincent Torri 7a3b2110bf * more doc
* check the returned value of eina_error_init() in eina_module_init()


SVN revision: 41218
2009-06-28 06:29:11 +00:00
Vincent Torri 4d5e99df01 add minimum supported version for Windows CE and XP
SVN revision: 41198
2009-06-25 19:55:06 +00:00
Cedric BAIL f60c798f1d * eina: Fix rectangle merge.
SVN revision: 41193
2009-06-25 10:58:16 +00:00
Vincent Torri ebc20c2236 API BREAK: fix Eina API so that it is more consistent with the other EFL
what is modified:

eina_counter_add -> eina_counter_new
eina_counter_delete -> eina_counter_free
eina_lalloc_delete -> eina_lalloc_free
eina_mempool_new -> eina_mempool_add
eina_mempool_delete -> eina_mempool_del
eina_mempool_alloc -> eina_mempool_malloc
eina_tiler_del -> eina_tiler_free

It remains some questions: have the following API a good name:

eina_module_list_delete
eina_list_free
eina_rbtree_delete

(see ticket #286)

If you find any problem, please report in that thread


SVN revision: 41187
2009-06-24 16:56:49 +00:00
Cedric BAIL 3b384b323c * eina: Faster Eina_Rectangle_Pool (should be used by OpenGL engine).
SVN revision: 41185
2009-06-24 13:38:25 +00:00
Cedric BAIL 0c9aead634 Evas_Rectangle are gone. We now use Eina_Rectangle and memory pool is
shared accross the application.


SVN revision: 41170
2009-06-23 13:57:27 +00:00
Vincent Torri 9110d8d574 fix a bit the documentation, but there are still
a lot of doc to write...


SVN revision: 41164
2009-06-22 20:03:58 +00:00
Cedric BAIL b8e164fb01 * eina_rectangle: Fix typo.
SVN revision: 41158
2009-06-22 13:46:05 +00:00
Cedric BAIL af1e7f5dc9 * eina: Fix API naming for eina_rectangle and add a global allocator.
SVN revision: 41155
2009-06-22 13:16:51 +00:00
Gustavo Sverzut Barbieri 4eb71900a2 and rename static linkage as well.
SVN revision: 41131
2009-06-20 16:31:15 +00:00
Vincent Torri 8021f6beeb formatting
SVN revision: 41120
2009-06-20 06:47:03 +00:00
Vincent Torri 8909bb6b69 * All memory pools can be enabled / disabled
* Allow to pass 'static' to configure memory pools
 * Add fixed_bitmap in the possible statically linked memory pools

For example:

./configure --enable-chained-pool=static --disable-fixed-bitmap


SVN revision: 41119
2009-06-20 06:42:32 +00:00
Cedric BAIL 7a18ab5ebc * eina: Add an eina_hash_stringshare_new.
SVN revision: 41112
2009-06-19 14:44:23 +00:00
Cedric BAIL bba26ef811 * eina: Improve eina hash manipulation for int.
- Faster int key comparison.
	- Key Length callback could now be NULL and 0 will be assumed.


SVN revision: 41100
2009-06-18 12:08:52 +00:00
Lars Munch 7bcbe02a3e Use correct module extension on cygwin
Patch from: booleanlabel at gmail dot com. Thanks.



SVN revision: 41094
2009-06-18 04:06:34 +00:00
Gustavo Sverzut Barbieri 32ff1f0aa4 better error setting and reporting in module loading.
* just set error codes if we know the error.
 * debug dlopen() error using EINA_ERROR_PDBG()



SVN revision: 41057
2009-06-16 14:59:09 +00:00
Cedric BAIL 35526933af * eina: Remove memory leak (patch from Andre Dieb).
SVN revision: 40986
2009-06-09 16:02:20 +00:00
Vincent Torri 5bd14d2a05 * modify the way eina_config.h is built (see eina_config.h.in
and configure.ac)
 * include eina_config.h explicitely in files where the macros
   of eina_config.h are used
 * define eina_magic_string_init()  and eina_magic_string_shutdown()
   even when the mugle option is set (magic disabled)
 * formatting and fix in configure.ac


SVN revision: 40962
2009-06-08 08:27:33 +00:00
Gustavo Sverzut Barbieri df58840124 do not leak module if user do not want it.
SVN revision: 40924
2009-06-06 22:53:03 +00:00
Vincent Torri 33cfc873ec Fix init error handling of array, benchmark, counter,main,
rectangle and stringshare modules. Patch by Andre Dieb, modified
by me (formatting and fix for the Windows code in eina_counter)


SVN revision: 40915
2009-06-06 04:22:21 +00:00
Cedric BAIL 5aeb9bbe82 * Fix some init/shutdown procedure.
SVN revision: 40892
2009-06-04 09:02:29 +00:00
Gustavo Sverzut Barbieri ebeabe3735 enable adding just part of a string.
this allows us to add stringshare from a larger buffer that cannot be
modified.


SVN revision: 40516
2009-05-06 04:11:01 +00:00
Carsten Haitzler ce5a59b7e5 lutin... release soname patch. verbose svn soname used right now
SVN revision: 40131
2009-04-17 10:01:45 +00:00
Viktor Kojouharov b2eeca9783 fix docu
SVN revision: 39989
2009-04-11 16:59:39 +00:00
Cedric BAIL 5016004597 * eina_rectangle: Use a mempool to reduce memory allocation.
SVN revision: 39909
2009-04-09 15:51:32 +00:00
Gustavo Sverzut Barbieri 78f4f011d0 export vargs version of eina_error_print().
SVN revision: 39879
2009-04-06 12:41:50 +00:00
Vincent Torri 46b3ef7d0c Fix llvm report in eain_tiler.
The remaining llvm reports, in eina_rbtree.c, are not correct, I think.


SVN revision: 39710
2009-03-25 12:04:21 +00:00
Vincent Torri 18258b5721 fix llvm report in eina_stringshare
SVN revision: 39707
2009-03-25 10:32:33 +00:00
Vincent Torri bda0cab9dd fix llvm reports in eina_list
SVN revision: 39706
2009-03-25 09:24:56 +00:00
Vincent Torri 309606b2dd use variadic macros, as suggested by Gustavo
SVN revision: 39663
2009-03-24 07:10:46 +00:00
Vincent Torri 7e809db9c8 fix some llvm report
SVN revision: 39657
2009-03-23 20:36:10 +00:00
Vincent Torri 2b1fe0c3b9 change the variable near to lnear, as it seems
that it's a keyword on Windows...


SVN revision: 39621
2009-03-22 12:22:39 +00:00
Cedric BAIL e027bb8a6e * eina_list: Add a eina_list_search_sorted_near_list. Usefull if you want to build
a sorted list.


SVN revision: 39550
2009-03-18 15:00:52 +00:00
Cedric BAIL 9fab9595b5 * eina_list: Add eina_list_search_sorted_list and eina_list_search_unsorted_list.
SVN revision: 39546
2009-03-18 13:29:36 +00:00
Gustavo Sverzut Barbieri 56d1e979ce fix docs and add clone and reversed iterator calls.
* docs: be clear if it's a copy or in-place.

 * clone: add some apis to create a copy while operates, sort should
   do the same.

 * reversed iterator: new call to walk the list reversed, will make
   life easier in some cases.



SVN revision: 39515
2009-03-17 12:52:38 +00:00
Gustavo Sverzut Barbieri 750bdfce3d inlist: add count.
SVN revision: 39465
2009-03-13 11:32:56 +00:00
Carsten Haitzler 739db97356 1. cygwin fixes from booleanlabel@gmail.com
2. these are just generic fixes - so also fix 1 doc example too.



SVN revision: 39464
2009-03-13 10:53:07 +00:00
Carsten Haitzler 691aa040b9 strict-aliasing is gcc 3+ - apply to CFLAGS for libeina.
SVN revision: 39462
2009-03-13 10:24:45 +00:00
Gustavo Sverzut Barbieri e3cce7b79d New macros, documentation and consistency for iterators and accessors.
EINA_ITERATOR_FOREACH() and EINA_ACCESSOR_FOREACH() are new macros to
help us forget about nasty C details (like cast to (void **)).

Document most iterators and accessors.

All iterators now set EINA_ERROR_OUT_OF_MEMORY if it's the case.



SVN revision: 39267
2009-02-27 16:32:22 +00:00
Cedric BAIL e31b5e961e * eina/src/lib/eina_list.c: Use less code.
* eina/src/lib/eina_error.c: Add a way to abord on any error message.



SVN revision: 39196
2009-02-25 10:46:14 +00:00
Cedric BAIL a98287fc07 * eina/src/lib/eina_module.c: After deleting all members, we should flush the array.
SVN revision: 39057
2009-02-17 12:58:09 +00:00
Cedric BAIL 2cad4f8082 * eina/src/lib/eina_array.c: Fix small typo.
SVN revision: 38921
2009-02-03 13:20:30 +00:00
Vincent Torri cda565a38e * more doc in the tutorial of the array data type
* minor formatting


SVN revision: 38853
2009-01-29 23:16:23 +00:00
Jorge Luis Zapata Muga 01ea61f11d + Remove unlikely macro debug
SVN revision: 38840
2009-01-29 13:06:46 +00:00
Jorge Luis Zapata Muga d508c49684 + Make the tiler functions static
+ Make the iterator actually work: keep track of current node

SVN revision: 38833
2009-01-28 20:01:42 +00:00
Vincent Torri e9908d6e42 * formatting: new lines are good for reading code
* remove comma after EINA_MAGIC (compilation with Visual Studio)


SVN revision: 38814
2009-01-27 16:44:45 +00:00
rephorm 0f053605b9 don't leak
SVN revision: 38806
2009-01-27 05:11:16 +00:00
Jorge Luis Zapata Muga e5123aac83 + Fix for 64 bit asm
+ Fix for MinGW

SVN revision: 38799
2009-01-26 19:35:12 +00:00
Jorge Luis Zapata Muga 75299a9fa3 + Add eina_cpu subsystem: just query cpu simd operations for now.
+ Add eina_tiler subsystem: initially abstraction and import of gustavo's splitter code.

SVN revision: 38793
2009-01-26 16:27:00 +00:00
Jorge Luis Zapata Muga 40d9cab09a + Fix some english typos
+ Fix some macros that need an expression and there are no attributes support, just pass the expression as is

SVN revision: 38792
2009-01-26 16:23:07 +00:00
Cedric BAIL 1caa0562ad Add new set of usefull fonctions for eina list.
SVN revision: 38791
2009-01-26 14:46:02 +00:00
Vincent Torri 8bee601e8d fix warnings with vc++
SVN revision: 38744
2009-01-23 18:24:35 +00:00
Vincent Torri 29befb161d put macro after declarations, otherwise vc++ is not happy
SVN revision: 38741
2009-01-23 16:43:14 +00:00
Vincent Torri c166854ae1 * minor formatting
* add some doc in eina_array
 * in eina_main.c, include only the necessary headers
 * fix some warnings (size_t <-> int)


SVN revision: 38740
2009-01-23 16:11:45 +00:00
Cedric BAIL f0096a167c * eina/src/include/eina_private.h: better use do {} while(0);
* eina/src/lib/eina_array.c: Use gcc attribute to shutdown llvm warning.


SVN revision: 38666
2009-01-20 16:47:19 +00:00
Vincent Torri 7554db7669 too much alloca declarations :-)
SVN revision: 38665
2009-01-20 16:14:36 +00:00
Cedric BAIL 0dda30daf6 * eina/src/include/eina_array.h,
* eina/src/include/eina_f16p16.h,
	* eina/src/include/eina_accessor.h,
	* eina/src/include/eina_list.h,
	* eina/src/include/eina_iterator.h,
	* eina/src/lib/eina_rectangle.c,
	* eina/src/lib/eina_list.c,
	* eina/src/lib/eina_array.c,
	* eina/src/lib/eina_hash.c,
	* eina/src/lib/eina_module.c,
	* eina/src/lib/eina_stringshare.c,
	* eina/src/lib/eina_benchmark.c: Fix for windows compilation.



SVN revision: 38663
2009-01-20 15:56:48 +00:00
Cedric BAIL 8a380803a7 * eina/src/include/eina_private.h,
* eina/src/lib/eina_array.c: Remove potential error detected by llvm in eina_array.


SVN revision: 38662
2009-01-20 15:44:52 +00:00
Vincent Torri 0d166092ac * fix warning (missing alloca declaration)
* formatting


SVN revision: 38657
2009-01-20 08:29:41 +00:00
tilman 4c70375594 Fixed two trivial const correctness issues.
SVN revision: 38621
2009-01-17 17:13:03 +00:00
Carsten Haitzler 430fa42aa4 naruto takahashi's fix for gcc3 patch
SVN revision: 38397
2009-01-01 03:09:48 +00:00
handyande c2bab4e388 Make eina compile on OSX
SVN revision: 38382
2008-12-31 11:51:37 +00:00
Cedric BAIL f2037c5c6f Don't generate warning in some little case.
SVN revision: 38348
2008-12-29 12:41:46 +00:00
Cedric BAIL f722173009 Don't display useless warning.
SVN revision: 38346
2008-12-29 11:49:35 +00:00
Cedric BAIL 73c686a5ea Fix a little mistake.
SVN revision: 38339
2008-12-29 08:53:19 +00:00
Cedric BAIL e537976f58 Use correct type.
SVN revision: 38338
2008-12-29 08:53:01 +00:00
Gustavo Sverzut Barbieri ab95d9183d eina safety checks.
safety checks will report null pointers and other error conditions on
public api's and can be disabled by compile time check.

note that in order to have these checks working we need to make
EINA_ARG_NONNULL() void, otherwise GCC can remove these checks since
they're known to be false.

This commit also make two minor changes:

  * list and hash accessors and iterators are created even for empty
    entities. This is correct in my point of view since NULL should
    indicate error. Having these in were an optimziation, but not
    worth it, these are not the most common case and hitting this path
    is not of much cost.

 * unmarked some parameters as nonnull, mainly on list and inlist.



SVN revision: 38327
2008-12-26 18:31:14 +00:00
Gustavo Sverzut Barbieri b0ee5696a6 eina gets lots of gcc attributes to its api.
this should help with optimizations and code correctness, please see
"info gcc" for detailed explanation on these.

if you experience some functions not working as expected, please
double check if they're not marked with EINA_PURE or EINA_CONST, maybe
I misused them. Remove the macro and try again.

brief explanation:

 * EINA_WARN_UNUSED_RESULT: if you forgot to use the return of some
   function, it will emit a warning (and -Werror will make it an
   error). This way it will be harder to miss the attribution
   "l = eina_list_append(l, v)".

 * EINA_ARG_NONNULL(index, index...): if you give it an explicit NULL
   argument, or some tool (ie: clang) finds it could get a NULL but
   this is not accepted by API, then a warning will be emitted.  This
   will help those that still use eina_hash_add() as if it is
   evas_hash_add().

 * EINA_MALLOC: any non-NULL pointer it returns cannot alias any other
   pointer valid when function returns.

 * EINA_PURE: function have no effects other than the return and this
   return just depend on parameters and/or globals. You might call
   this function in a loop a thousand times and it will return the
   same value, thus you may move this function outside the loop and
   remove it.

 * EINA_CONST: stricter version of EINA_PURE, it will not check for
   global parameters, that is, you cannot consider pointer
   arguments. Use it for math things like "int sqrt(int)".

 * EINA_PRINTF(fmt, arg): will check format parameter specified in
   position "fmt" and passed arguments starting at position "arg", it
   will check for things like giving integers where short or strings
   were expected.

 * EINA_SCANF(fmt, arg): similar to eina_printf().

 * EINA_FORMAT(fmt): for use with things like dgettext(), it will get
   a printf-like format string and modifies it.

Please review and test it with your software, make sure you make clean
before you install the new version so it has any effect.

If you find some functions are missing EINA_WARN_UNUSED_RESULT and
EINA_ARG_NONNULL or others, please add them.



SVN revision: 38323
2008-12-26 13:17:51 +00:00
Gustavo Sverzut Barbieri de8b6a7bbd fix possible errors with pointer/offset calculation.
it works on gcc, but maybe it would break in other compilers, so make
it safe.



SVN revision: 38302
2008-12-23 20:05:44 +00:00
Gustavo Sverzut Barbieri 7eb0826e29 remove dead stores and reduce some variable scope.
from clang report.


SVN revision: 38294
2008-12-23 19:17:55 +00:00
Cedric BAIL e006567cb0 Make it compile on Solaris.
SVN revision: 38290
2008-12-23 13:33:11 +00:00
Cedric BAIL 2c9ac0bd82 Remove now uneeded header.
SVN revision: 38289
2008-12-23 13:23:10 +00:00
Cedric BAIL 889d40abf8 Remove PATH_MAX use.
SVN revision: 38288
2008-12-23 13:12:06 +00:00
Cedric BAIL 6a87ca7590 Make code understandable by Visual Studio.
SVN revision: 38287
2008-12-23 10:04:46 +00:00
Cedric BAIL c8714d04cc Declaration should be done before any code.
SVN revision: 38286
2008-12-23 10:02:27 +00:00
Gustavo Sverzut Barbieri 765b770f82 oops, eina_stringshare_strlen() should never account '\0'.
SVN revision: 38260
2008-12-21 06:45:09 +00:00
Cedric BAIL c80a55ee14 Add small bucket support.
SVN revision: 38168
2008-12-16 16:49:29 +00:00
Cedric BAIL 00b5758937 Add include to remove warning.
SVN revision: 38167
2008-12-16 16:49:00 +00:00
Cedric BAIL db11d16b7f Manipulating NULL iterator should be concidered as a defined behaviour as it
give the possibility to write small code like :

it = eina_hash_iterator_tuple_new(hash);
eina_iterator_foreach(it, do_something_cb, NULL);
eina_iterator_free(it);

If hash is empty, but valid it will return a NULL iterator for this
example.


SVN revision: 38104
2008-12-11 13:54:59 +00:00
Cedric BAIL b8d721ac05 If we set the data free callback of a hash, we expect it to be called when
calling all eina_hash_del functions.


SVN revision: 38102
2008-12-11 13:47:58 +00:00
Cedric BAIL 9b9f752379 Only allocate hash bucket when needed.
Make eina_hash_del_by_key really different from eina_hash_del.


SVN revision: 38064
2008-12-09 17:39:48 +00:00
Cedric BAIL 00e8fba9ba All eina_hash_find* functions should not report problem when hash or key is NULL.
SVN revision: 38059
2008-12-09 14:59:30 +00:00
Cedric BAIL b0e1863871 eina_hash_find should not complain when hash or key is NULL.
SVN revision: 38057
2008-12-09 14:24:08 +00:00
Cedric BAIL 24c1995b68 Change eina_counter_dump to return a string so it could work easily on windows.
SVN revision: 38055
2008-12-09 13:55:10 +00:00
Cedric BAIL af30207725 eina_hash_del must honor the data parameter when the key is passed. Propagate
it correctly.


SVN revision: 38054
2008-12-09 13:52:09 +00:00
Cedric BAIL 273b7422d6 It's cleaner to first include private header as they could define macro
differently than public interface.


SVN revision: 38050
2008-12-09 13:06:17 +00:00
Cedric BAIL d19801f7c2 Prevent warning from Eina Magic when hash population is 0.
SVN revision: 38049
2008-12-09 13:05:33 +00:00
Cedric BAIL 5358b1f84f Add integer and pointer hash table helper.
SVN revision: 38026
2008-12-08 17:31:55 +00:00
Gustavo Sverzut Barbieri 8ea28f64b7 hash: better handling of NULL, add magic checking.
* evas: if we automatically destroy hash, check for NULL before
   handling it to eina api, which expect elements to be created with
   eina_hash_new() and thus will fail on NULL.
 * eina: add magic checking for eina_hash and eina_hash_iterator, this will
   help spot when NULL is used.
 * eina_hash_foreach: do not try to create the iterator if hash is NULL.



SVN revision: 37982
2008-12-07 13:28:29 +00:00
Gustavo Sverzut Barbieri b21c687f61 refactor eina_hash_del*, expose simpler functions and avoid GCC hack.
By using simpler functions for hash element deletion we can avoid the
hack to shut up GCC warking about hash_num not being used. As these
simple functions are more often needed than the catch-all, expose them
as well.



SVN revision: 37962
2008-12-06 06:58:56 +00:00
Gustavo Sverzut Barbieri 09924b54e5 Let valgrind help with EINA_MAGIC.
Keep EINA_MAGIC at the end of the structure (WHEN POSSIBLE! Watch out
flexible arrays like char str[] at the end!)

this way if parts use EINA_MAGIC and others do not, it will possible overflow and valgrind can help us.

WARNING: make uninstall before update! Then make clean and make install, check if everything is working with "make check".



SVN revision: 37961
2008-12-06 06:53:14 +00:00
Gustavo Sverzut Barbieri 5939d76d9c Fix couple of issues with MAGIC handling.
eina_magic.h MUST include eina_config.h, otherwise it will not
consider EINA_MAGIC stuff. Worse than that, some files were including
that directly and were considering EINA_MAGIC attribute even if the
file that alloc'ed the memory were not!

Also add missing EINA_MAGIC_SET() to iterators and accessors.



SVN revision: 37960
2008-12-06 06:17:11 +00:00
Gustavo Sverzut Barbieri a00eaac6a6 Make it possible to create iterators outside Eina.
Many places in EFL we just create walk something, create a list with
walked data, return, then the user walks it again and then deletes
(which will walk again). For such cases it's way better to define
iterators or accessors.

I'm not moving any EFL code to it now, but if people are interested,
things like evas_render_method_list(), evas_font_available_list(),
evas_objects_at_xy_get(), evas_objects_in_rectangle_get(),
evas_object_smart_members_get() are good candidates. If the subject is
already using Eina list, then you can just use
eina_list_iterator_new() and return it, otherwise you can define your
own iterator, which is very easy.



SVN revision: 37956
2008-12-06 03:41:03 +00:00
Gustavo Sverzut Barbieri b023145eed shut up gcc warning, with comment.
SVN revision: 37953
2008-12-06 03:02:30 +00:00
Carsten Haitzler 84f8c174bf fix list accounting on sort! bad - how did this hide for so long?
SVN revision: 37951
2008-12-06 02:51:04 +00:00
Gustavo Sverzut Barbieri f8868ffa96 Fix namespace: Eina_Foreach -> Eina_Hash_Foreach.
SVN revision: 37950
2008-12-06 02:21:17 +00:00
Cedric BAIL 9a5b397a3e Fix a little memory leak when iterating.
SVN revision: 37718
2008-11-20 13:26:18 +00:00
Cedric BAIL aa82395cc1 Fix order of free during hash free.
SVN revision: 37572
2008-11-10 14:32:14 +00:00
Vincent Torri a00a2a3636 put static functions where they belong
SVN revision: 37552
2008-11-08 16:47:52 +00:00
Sebastian Dransfeld 4173b41de5 Add missing return value.
SVN revision: 37528
2008-11-07 06:50:45 +00:00
Gustavo Sverzut Barbieri 9e80a086f6 Add and use eina_stringshare_ref().
This is a faster "add", if we know we're using a shared string we know
the node without any need to search it, just increment reference and
exit.



SVN revision: 37458
2008-11-04 16:25:12 +00:00
Cedric BAIL 437c220266 Add dladdr and env code for eina_module from Vincent Torri.
SVN revision: 37374
2008-11-01 15:39:53 +00:00
Cedric BAIL 8748f83f01 Make eina rectangle handle NULL case.
SVN revision: 37328
2008-10-30 10:54:58 +00:00
Gustavo Sverzut Barbieri c1d2134caf Pack a hole when magic is in use.
SVN revision: 37324
2008-10-29 23:50:24 +00:00
Carsten Haitzler 9f157c260c error macro.
SVN revision: 37323
2008-10-29 23:41:55 +00:00
Gustavo Sverzut Barbieri a39edb7baa Do not pad node on 64bits.
Instead of padding node we should always refer to offset of str[]
inside node, that way we save some bytes and work properly.



SVN revision: 37322
2008-10-29 23:33:24 +00:00
Carsten Haitzler b4f33c6358 add error catching and output if mempool alloc/init fails.
SVN revision: 37321
2008-10-29 23:12:56 +00:00
Gustavo Sverzut Barbieri 5e30ab4563 Remove unused attribute warnings.
SVN revision: 37307
2008-10-29 14:51:18 +00:00
Gustavo Sverzut Barbieri f22f587bab Fix stringshare on 64bits platforms.
sizeof(Eina_Stringshare_Node) is now 24 bytes on 64bits platforms, but
str[] was pointing to before that, to the 20th byte, causing out of
bounds access.

Adding the padding will cause str[] to use the correct position. It
wastes 4 more bytes, like pre-optimizations, but it's just on big
machines.



SVN revision: 37305
2008-10-29 14:18:29 +00:00
Carsten Haitzler 0e4dcecbc4 remove from list properly and don't segv!
SVN revision: 37290
2008-10-29 01:38:47 +00:00
Gustavo Sverzut Barbieri 71f9c5aab7 refactor eina_stringshare_del() to make it easier to read.
SVN revision: 37282
2008-10-28 18:12:10 +00:00
Gustavo Sverzut Barbieri 1119bfebc1 improve readability: avoid macros inside our code
mixing #ifdef'ed blocks inside code is bad, can lead to warnings if
some variables are not used and it's a pain to read.

instead, just define functions and always call them, choose their
implementation based on the ifdef macros. I opted to have 2
declarations, but one can go like other parts and #ifdef around the
function contents as well.



SVN revision: 37281
2008-10-28 17:47:59 +00:00
Gustavo Sverzut Barbieri a5db129f56 Add missing magic check for existing node.
SVN revision: 37279
2008-10-28 17:16:42 +00:00
Gustavo Sverzut Barbieri 2569094023 Code refactor and cleanup of eina_stringshare_add().
Cases are now handled in separate, doing less useless steps and easier
to understand since 3 cases are now distinct.



SVN revision: 37278
2008-10-28 17:15:07 +00:00
Cedric BAIL e243e4408a Make Eina_Rectangle_Pool more usable.
SVN revision: 37275
2008-10-28 15:28:46 +00:00
Cedric BAIL 4592044c82 Fix a little typo.
SVN revision: 37274
2008-10-28 14:45:16 +00:00
Gustavo Sverzut Barbieri 96adb8e1f0 save a byte per stringshare node.
we don't need to use 'begin' flag (that takes a byte) just to see if
we're in the same memory block as the head, just do a pointer math.



SVN revision: 37270
2008-10-28 12:34:58 +00:00
Gustavo Sverzut Barbieri 0b1e2fa0dc reduce the popuplation_group size.
we just have special case for up to 3 letters, everything else is
regular population.



SVN revision: 37269
2008-10-28 12:26:05 +00:00
Gustavo Sverzut Barbieri 3cd98b547a stringshare_del optimization.
trade off safety by speed, we will always assume str was previously
shared, like evas_stringshare_del() did and we can know with zero-cost
the number of references and can avoid strlen() too.

When references drop to zero we still have to do the hash, access the
bucket and then lookup the Red-Black tree, then walk the list of
nodes, but avoiding so would use more memory, unacceptable at this
point.



SVN revision: 37268
2008-10-28 12:23:12 +00:00
Gustavo Sverzut Barbieri 8325ae6ba3 Save 4 bytes per big string shared.
SVN revision: 37258
2008-10-28 00:42:35 +00:00
Gustavo Sverzut Barbieri 24ee564949 Cheap way to get strlen of a shared string.
it's not safe, but it's faster and can help for large strings, maximum
cost is 4 comparisons plus one pointer access.



SVN revision: 37257
2008-10-28 00:31:09 +00:00
Gustavo Sverzut Barbieri 16aed2623d define function as void as in prototype.
SVN revision: 37256
2008-10-28 00:18:31 +00:00
Gustavo Sverzut Barbieri d4ac927395 dump show percentages.
not that useful, but I like it.


SVN revision: 37253
2008-10-27 20:35:28 +00:00
Cedric BAIL 72e45419ec Add Eina_Rectangle_Pool support. Typically help for font handling in OpenGL or
any case where you need to split a rectangle in many differents small rectangle.


SVN revision: 37252
2008-10-27 20:24:12 +00:00
Gustavo Sverzut Barbieri db296d3d3c better optimize small stringshare comparison
SVN revision: 37251
2008-10-27 20:16:52 +00:00
Gustavo Sverzut Barbieri c311dd99a2 stringshare: special case for small (2-3 letters).
This should reduce overhead and give a bit speedup as well, let's test
with e17 real data and see how it goes.



SVN revision: 37250
2008-10-27 19:26:14 +00:00
Sebastian Dransfeld 0b115add8e Since CLOCK_PROCESS_CPUTIME_ID is a POSIX standard, we use it if it
exists regardles of system. Seems BSD actually is the weird case here.
Still use CLOCK_REALTIME as fallback.

SVN revision: 37249
2008-10-27 15:16:06 +00:00
Sebastian Dransfeld 23fdacaa1e Better fallback on clock as suggested by Naruto TAKAHASHI
SVN revision: 37248
2008-10-27 15:08:46 +00:00
Sebastian Dransfeld 3488ca351f Fix CLOCK as suggested by Ravenlock.
SVN revision: 37247
2008-10-27 14:19:55 +00:00