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
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
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
Cedric BAIL
45273db267
Correctly put condition around the code.
...
SVN revision: 37244
2008-10-27 14:05:09 +00:00
Cedric BAIL
d46f7e583e
* Optimize case for string length == 0 and 1.
...
* Add more debug information when using --enable-stringshare-usage.
SVN revision: 37239
2008-10-27 13:23:52 +00:00
Sebastian Dransfeld
b6ddfb54cf
Mark unused parameter with __UNUSED__
...
SVN revision: 37214
2008-10-27 09:49:13 +00:00
Carsten Haitzler
089b8ac181
add a stringshare dumper so we can examine what's in there and improve usage.
...
SVN revision: 37186
2008-10-27 00:36:22 +00:00
Vincent Torri
84dcc24d09
Fix compilation and warnings on Windows:
...
* include Evil.h for getenv on mingw32ce
* include config.h in benchmark.c so that EAPI is correctly defined
* minor fixes in configure.ac
SVN revision: 36729
2008-10-16 21:31:51 +00:00
Cedric BAIL
d905ee9bda
Add option to report stringshare usage (E17 use around 10000 differents strings).
...
SVN revision: 36658
2008-10-14 15:32:57 +00:00
Cedric BAIL
ed012620d1
Fix stringshare bug with same length.
...
SVN revision: 36657
2008-10-14 15:31:45 +00:00
Cedric BAIL
0bc2413113
Fix prev pointer during stringshare_del.
...
SVN revision: 36319
2008-09-29 17:07:50 +00:00
Cedric BAIL
040e5573d9
Patch from Arnaud de Turckheim "quarium" <quarium@gmail.com>.
...
Use magic inside stringshare without slowdown of benchmark.
Fix magic when not in DEBUG mode.
SVN revision: 36246
2008-09-25 09:02:41 +00:00
Cedric BAIL
550ebc9ab1
Add hash and rbtree delete callback, cleanup the code and improve performance (hash as a new internal structure).
...
We still need a hash function for removing a node from the hash and destroying it at the same time.
SVN revision: 36222
2008-09-24 17:14:29 +00:00
Cedric BAIL
b00e9e5c64
Use rbtree helper.
...
SVN revision: 36208
2008-09-24 12:57:26 +00:00
Cedric BAIL
8acad8a50e
Add rbtree destructor without tree reorder and use it.
...
SVN revision: 36188
2008-09-23 16:07:48 +00:00
Cedric BAIL
f656fabac1
Make magical mask easily testable.
...
SVN revision: 36171
2008-09-22 14:45:57 +00:00
Cedric BAIL
d0871d7d7d
Eina stringshare now beat evas and ecore with this last change.
...
Benchmarking with enlightenment real data (25000 string add, 20 000 del) :
- eina: 4151399
- evas: 4286973
- ecore: 7753004
SVN revision: 36166
2008-09-22 13:11:08 +00:00
Cedric BAIL
d3e0b59223
Reduce number of malloc/free by automatically created one stringshare
...
per tree node.
SVN revision: 36165
2008-09-22 13:06:29 +00:00
Cedric BAIL
1726e80939
Use define.
...
SVN revision: 36159
2008-09-22 10:08:44 +00:00
Vincent Torri
f50feadeae
* add benchmark and file documentation
...
* reorganize a bit more. it's not finished
* fix spellingg and formatting
* gnuplot file names generated by our bechmarks tests have an
absolute time description and not H:M:S description, as this
breaks the check out of the repo on Windows.
SVN revision: 36090
2008-09-19 05:22:43 +00:00
Vincent Torri
54de28cc68
* add doc for counter and convert modules
...
* minor spelling, formatting and doxygen fixes
SVN revision: 36057
2008-09-17 18:55:54 +00:00
Vincent Torri
7fd7cc717c
* update the doc of stringshre
...
* fix minor warnings from doxygen
SVN revision: 36004
2008-09-15 19:58:36 +00:00
Cedric BAIL
e3e2afca18
Don't compute string length when not really needed.
...
SVN revision: 36001
2008-09-15 13:38:42 +00:00
Cedric BAIL
1582d52c3c
New stringshare implementation.
...
We use 256 buckets with a rbtree per bucket. The key of rbtree is the hash
on 12bits and each node of the rbtree have a list of string.
Thanks to Gustavo and Vincent for their help.
SVN revision: 36000
2008-09-15 12:54:54 +00:00
Cedric BAIL
9638ded27f
Fix initialisation logic.
...
SVN revision: 35806
2008-09-03 12:06:50 +00:00
Cedric BAIL
1f6ad61f54
Use memcmp as we know the size of both string.
...
SVN revision: 35740
2008-08-29 16:09:39 +00:00
Cedric BAIL
6bbb9bf821
Remove useless indirection and useless tests.
...
SVN revision: 35733
2008-08-29 13:52:16 +00:00
Cedric BAIL
67f3ddfb7a
Move private function in the right part of the file.
...
SVN revision: 35729
2008-08-29 09:34:39 +00:00
Cedric BAIL
3e562ccfc2
Add a context to the callback.
...
SVN revision: 35719
2008-08-28 16:33:40 +00:00
Cedric BAIL
3a10b7f782
Use rbtree instead of inlist. It's way faster.
...
SVN revision: 35715
2008-08-28 14:27:43 +00:00
Vincent Torri
dafd079639
* move standard header files from eina_private.h to source files
...
* minor formatting
SVN revision: 35705
2008-08-28 07:46:42 +00:00
doursse
bbf9b05530
fix doxy doc
...
SVN revision: 35416
2008-08-09 05:47:15 +00:00
Cedric BAIL
44e3c73e19
After benchmarking, the superfast hash function does impact performance
...
as it better spread data in the hash table.
SVN revision: 35412
2008-08-08 16:07:32 +00:00
Cedric BAIL
ddaa7d4d8f
License changes (BSD -> LGPL)
...
SVN revision: 35360
2008-08-06 18:15:24 +00:00
Cedric BAIL
d8ee8aee6c
Fix eina_stringshare_shutdown to return value like all eine shutdown funtion.
...
Cleanup hash function call.
SVN revision: 35352
2008-08-06 15:49:50 +00:00
Cedric BAIL
2098318e35
As we use eina_error, we should init/shutdown it properly.
...
SVN revision: 35297
2008-08-01 14:23:54 +00:00
Cedric BAIL
67d2b46784
Fix and improvement for stringshare and array, thanks to the tests suite.
...
SVN revision: 35288
2008-08-01 12:26:35 +00:00
Sebastian Dransfeld
fa1cf1962c
typo
...
SVN revision: 35259
2008-07-30 17:29:11 +00:00
Peter Wehrfritz
0eefad12bd
- add init() and shutdown() functions
...
- add doxy
SVN revision: 35256
2008-07-30 14:42:37 +00:00
Cedric BAIL
6e74d01030
Adding stringshare from evas inside eina.
...
SVN revision: 35249
2008-07-30 13:05:13 +00:00