Ecore_hash is an ancestor of eina_hash and not used anywhere anymore.
We simply forgot to remove it from our benchmark utility.
Together with ecore_hash we are removing ecore_strings, which uses it,
and the corresponding benchmark files.
Signed-off-by: Stefan Schmidt <s.schmidt@samsung.com>
Reviewed-by: Marcel Hollerbach <mail@marcel-hollerbach.de>
Differential Revision: https://phab.enlightenment.org/D12042
src/lib/elementary/efl_ui_widget.c
src/lib/elementary/efl_ui_win.c
src/lib/elementary/els_box.c
-src/lib/elementary/els_cursor.c
-src/lib/elementary/els_tooltip.c
-src/lib/elementary/elu_ews_wm.c
-src/modules/elementary/test_entry/mod.c
-src/modules/elementary/test_map/mod.c
+src/lib/elementary/elm_list.c
+src/lib/elementary/elm_widget_item_container_eo.c
+src/lib/elementary/elm_conformant_eo.c
+src/lib/elementary/efl_ui_flip_eo.legacy.c
+src/lib/elementary/elm_multibuttonentry_item_eo.legacy.c
+src/lib/elementary/elm_widget_item_static_focus_eo.c
+src/lib/elementary/efl_ui_format.c
+src/lib/elementary/elm_hover_eo.c
+src/lib/elementary/elm_popup_eo.legacy.c
+src/lib/elementary/elm_route.c
+src/lib/elementary/elm_ctxpopup_item_eo.legacy.c
+src/lib/elementary/efl_ui_win_legacy_eo.c
+src/lib/elementary/elm_hoversel_eo.c
+src/lib/elementary/efl_ui_spotlight_scroll_manager.c
+src/lib/elementary/elm_access_eo.c
+src/lib/elementary/efl_ui_navigation_layout.c
+src/lib/elementary/elm_separator_eo.legacy.c
+src/lib/elementary/elm_photo_eo.c
+src/lib/ecore_drm2/ecore_drm2_fb.c
+src/lib/ecore_drm2/ecore_drm2.c
+src/lib/ecore_drm2/ecore_drm2_plane.c
+src/lib/ecore_drm2/ecore_drm2_outputs.c
+src/lib/ecore_drm2/ecore_drm2_device.c
+src/lib/ecore_imf_evas/ecore_imf_evas.c
+src/lib/ecore_buffer/shared_buffer.c
+src/lib/ecore_buffer/ecore_buffer.c
+src/lib/ecore_buffer/ecore_buffer_consumer.c
+src/lib/ecore_buffer/buffer_queue.c
+src/lib/ecore_buffer/ecore_buffer_con.c
+src/lib/ecore_buffer/ecore_buffer_provider.c
+src/lib/ecore_buffer/bq_mgr_protocol.c
+src/lib/ecore_buffer/ecore_buffer_queue_main.c
+src/lib/eeze/eeze_disk_udev.c
+src/lib/eeze/eeze_disk_libmount_new.c
+src/lib/eeze/eeze_sensor.c
+src/lib/eeze/eeze_net.c
+src/lib/eeze/eeze_udev_find.c
+src/lib/eeze/eeze_disk_libmount.c
+src/lib/eeze/eeze_udev_walk.c
+src/lib/eeze/eeze_disk_mount.c
+src/lib/eeze/eeze_disk_libmount_old.c
+src/lib/eeze/eeze_udev_private.c
+src/lib/eeze/eeze_udev_syspath.c
+src/lib/eeze/eeze_disk_dummy.c
+src/lib/eeze/eeze_main.c
+src/lib/eeze/eeze_disk.c
+src/lib/eeze/eeze_udev_watch.c
+src/lib/ector/ector_main.c
+src/lib/ector/ector_renderer_gradient_radial.c
+src/lib/ector/ector_renderer_shape.c
+src/lib/ector/gl/ector_gl_surface.c
+src/lib/ector/gl/ector_gl_shader.c
+src/lib/ector/gl/ector_gl_buffer.c
+src/lib/ector/gl/ector_renderer_gl_shape.c
+src/lib/ector/gl/ector_renderer_gl.c
+src/lib/ector/gl/ector_renderer_gl_gradient_radial.c
+src/lib/ector/gl/ector_renderer_gl_gradient_linear.c
+src/lib/ector/ector_renderer.c
+src/lib/ector/ector_buffer.c
+src/lib/ector/ector_renderer_gradient.c
+src/lib/ector/software/ector_software_gradient_sse3.c
+src/lib/ector/software/ector_renderer_software_gradient_radial.c
+src/lib/ector/software/ector_software_rasterizer.c
+src/lib/ector/software/ector_software_buffer.c
+src/lib/ector/software/ector_software_surface.c
+src/lib/ector/software/ector_software_gradient.c
+src/lib/ector/software/ector_renderer_software_image.c
+src/lib/ector/software/ector_renderer_software_gradient_linear.c
+src/lib/ector/software/ector_renderer_software_shape.c
+src/lib/ector/ector_renderer_gradient_linear.c
+src/lib/ector/ector_renderer_image.c
+src/lib/ethumb_client/ethumb_client.c
+src/lib/ecore_fb/ecore_fb.c
+src/lib/ecore_fb/ecore_fb_ts.c
+src/lib/ecore_fb/ecore_fb_vt.c
+src/lib/ecore_fb/ecore_fb_li.c
+src/lib/elua/io.c
+src/lib/elua/elua.c
+src/lib/elua/cache.c
+src/lib/ethumb/ethumb.c
+src/lib/ethumb/md5.c
+src/lib/ecore_input_evas/ecore_input_evas.c
+src/lib/eina/eina_abi.c
+src/lib/eina/eina_safepointer.c
+src/lib/eina/eina_mmap.c
+src/lib/eina/eina_bezier.c
+src/lib/eina/eina_binbuf.c
+src/lib/eina/eina_vpath_xdg.c
+src/lib/eina/eina_tmpstr.c
+src/lib/eina/eina_hamster.c
+src/lib/eina/eina_quaternion.c
+src/lib/eina/eina_unicode.c
+src/lib/eina/eina_value.c
+src/lib/eina/eina_matrix.c
+src/lib/eina/eina_thread_queue.c
+src/lib/eina/eina_debug_cpu.c
+src/lib/eina/eina_file_common.c
+src/lib/eina/eina_hash.c
+src/lib/eina/eina_freeq.c
+src/lib/eina/eina_debug_chunk.c
+src/lib/eina/eina_crc.c
+src/lib/eina/eina_strbuf.c
+src/lib/eina/eina_cpu.c
+src/lib/eina/eina_quad.c
+src/lib/eina/eina_tiler.c
+src/lib/eina/eina_debug_thread.c
+src/lib/eina/eina_debug_bt_file.c
+src/lib/eina/eina_inlist.c
+src/lib/eina/eina_evlog.c
+src/lib/eina/eina_strbuf_common.c
+src/lib/eina/eina_safety_checks.c
+src/lib/eina/eina_cow.c
+src/lib/eina/eina_error.c
+src/lib/eina/eina_debug_bt.c
+src/lib/eina/eina_ustrbuf.c
+src/lib/eina/eina_debug_timer.c
+src/lib/eina/eina_benchmark.c
+src/lib/eina/eina_accessor.c
+src/lib/eina/eina_magic.c
+src/lib/eina/eina_sched.c
+src/lib/eina/eina_vpath.c
+src/lib/eina/eina_fp.c
+src/lib/eina/eina_convert.c
+src/lib/eina/eina_str.c
+src/lib/eina/eina_iterator.c
+src/lib/eina/eina_list.c
+src/lib/eina/eina_matrixsparse.c
+src/lib/eina/eina_rbtree.c
+src/lib/eina/eina_counter.c
+src/lib/eina/eina_main.c
+src/lib/eina/eina_module.c
+src/lib/eina/eina_binshare.c
+src/lib/eina/eina_debug.c
+src/lib/eina/eina_value_util.c
+src/lib/eina/eina_inarray.c
+src/lib/eina/eina_thread.c
+src/lib/eina/eina_mempool.c
+src/lib/eina/eina_slstr.c
+src/lib/eina/eina_promise.c
+src/lib/eina/eina_lock.c
+src/lib/eina/eina_xattr.c
+src/lib/eina/eina_simple_xml_parser.c
+src/lib/eina/eina_array.c
+src/lib/eina/eina_lalloc.c
+src/lib/eina/eina_file.c
+src/lib/eina/eina_rectangle.c
+src/lib/eina/eina_util.c
+src/lib/eina/eina_file_win32.c
+src/lib/eina/eina_share_common.c
+src/lib/eina/eina_prefix.c
+src/lib/eina/eina_log.c
+src/lib/eina/eina_ustringshare.c
+src/lib/eina/eina_quadtree.c
+src/lib/eina/eina_stringshare.c
+src/lib/eina/eina_abstract_content.c
+src/lib/efl_canvas_wl/dmabuf.c
+src/lib/efl_canvas_wl/efl_canvas_wl.c
+src/lib/evil/evil_dlfcn.c
+src/lib/evil/evil_locale.c
+src/lib/evil/evil_unistd.c
+src/lib/evil/evil_time.c
+src/lib/evil/evil_langinfo.c
+src/lib/evil/evil_string.c
+src/lib/evil/evil_fcntl.c
+src/lib/evil/evil_main.c
+src/lib/evil/evil_util.c
+src/lib/evil/evil_mman.c
+src/lib/evil/evil_stdlib.c
+src/lib/evil/evil_stdio.c
+src/lib/efl/interfaces/efl_model_provider.c
+src/lib/efl/interfaces/efl_io_sizer.c
+src/lib/efl/interfaces/efl_io_closer.c
+src/lib/efl/interfaces/efl_text_markup_util.c
+src/lib/efl/interfaces/efl_gfx_color.c
+src/lib/efl/interfaces/efl_io_writer.c
+src/lib/efl/interfaces/efl_io_buffer.c
+src/lib/efl/interfaces/efl_mvvm_common.c
+src/lib/efl/interfaces/efl_io_queue.c
+src/lib/efl/interfaces/efl_file.c
+src/lib/efl/interfaces/efl_interfaces_main.c
+src/lib/efl/interfaces/efl_ui_layout_orientable_readonly.c
+src/lib/efl/interfaces/efl_io_reader.c
+src/lib/efl/interfaces/efl_gfx_shape.c
+src/lib/efl/interfaces/efl_io_positioner.c
+src/lib/efl/interfaces/efl_observer.c
+src/lib/efl/interfaces/efl_gfx_path.c
+src/lib/eio/eio_monitor.c
+src/lib/eio/efl_io_model.c
+src/lib/eio/eio_file.c
+src/lib/eio/eio_main.c
+src/lib/eio/eio_monitor_win32.c
+src/lib/eio/efl_io_manager.c
+src/lib/eio/eio_eet.c
+src/lib/eio/eio_dir.c
+src/lib/eio/eio_single.c
+src/lib/eio/eio_monitor_poll.c
+src/lib/eio/eio_sentry.c
+src/lib/eio/eio_monitor_inotify.c
+src/lib/eio/eio_monitor_cocoa.c
+src/lib/eio/eio_map.c
+src/lib/eio/eio_xattr.c
+src/lib/eio/eio_monitor_kevent.c
+src/lib/ecore_imf/ecore_imf_module.c
+src/lib/ecore_imf/ecore_imf.c
+src/lib/ecore_imf/ecore_imf_context.c
+src/lib/embryo/embryo_float.c
+src/lib/embryo/embryo_str.c
+src/lib/embryo/embryo_rand.c
+src/lib/embryo/embryo_main.c
+src/lib/embryo/embryo_amx.c
+src/lib/embryo/embryo_time.c
+src/lib/embryo/embryo_args.c
+src/lib/ecore_input/ecore_input_compose.c
+src/lib/ecore_input/ecore_input_joystick.c
+src/lib/ecore_input/ecore_input.c
+src/lib/emile/emile_main.c
+src/lib/emile/emile_base64.c
+src/lib/emile/emile_cipher.c
+src/lib/emile/emile_compress.c
+src/lib/emile/emile_cipher_openssl.c
+src/lib/emile/emile_image.c
+src/lib/emile/emile_cipher_gnutls.c
+src/lib/ecore_x/ecore_x_dnd.c
+src/lib/ecore_x/ecore_x_dpms.c
+src/lib/ecore_x/ecore_x_e.c
+src/lib/ecore_x/ecore_x.c
+src/lib/ecore_x/ecore_x_xinerama.c
+src/lib/ecore_x/ecore_x_sync.c
+src/lib/ecore_x/ecore_x_xi2.c
+src/lib/ecore_x/ecore_x_mwm.c
+src/lib/ecore_x/ecore_x_image.c
+src/lib/ecore_x/ecore_x_selection.c
+src/lib/ecore_x/ecore_x_test.c
+src/lib/ecore_x/ecore_x_events.c
+src/lib/ecore_x/ecore_x_composite.c
+src/lib/ecore_x/ecore_x_randr.c
+src/lib/ecore_x/ecore_x_region.c
+src/lib/ecore_x/ecore_x_error.c
+src/lib/ecore_x/ecore_x_fixes.c
+src/lib/ecore_x/ecore_x_gesture.c
+src/lib/ecore_x/ecore_x_atoms.c
+src/lib/ecore_x/ecore_x_keygrab.c
+src/lib/ecore_x/ecore_x_damage.c
+src/lib/ecore_x/ecore_x_gc.c
+src/lib/ecore_x/ecore_x_cursor.c
+src/lib/ecore_x/ecore_x_drawable.c
+src/lib/ecore_x/ecore_x_window.c
+src/lib/ecore_x/ecore_x_vsync.c
+src/lib/ecore_x/ecore_x_icccm.c
+src/lib/ecore_x/ecore_x_screensaver.c
+src/lib/ecore_x/ecore_x_pixmap.c
+src/lib/ecore_x/ecore_x_present.c
+src/lib/ecore_x/ecore_x_window_shape.c
+src/lib/ecore_x/ecore_x_window_prop.c
+src/lib/ecore_x/ecore_x_netwm.c
+src/lib/ecore_win32/ecore_win32_cursor.c
+src/lib/ecore_win32/ecore_win32_monitor.c
+src/lib/ecore_win32/ecore_win32_window.c
+src/lib/ecore_win32/ecore_win32.c
+src/lib/ecore_win32/ecore_win32_dnd.c
+src/lib/ecore_win32/ecore_win32_event.c
+src/lib/ecore_win32/ecore_win32_clipboard.c
+src/lib/ecore_wl2/ecore_wl2_dnd.c
+src/lib/ecore_wl2/ecore_wl2_window.c
+src/lib/ecore_wl2/ecore_wl2.c
+src/lib/ecore_wl2/ecore_wl2_output.c
+src/lib/ecore_wl2/ecore_wl2_surface.c
+src/lib/ecore_wl2/ecore_wl2_display.c
+src/lib/ecore_wl2/ecore_wl2_buffer.c
+src/lib/ecore_wl2/ecore_wl2_input.c
+src/lib/ecore_wl2/ecore_wl2_subsurf.c
+src/lib/ecore_wayland/xdg-shell-protocol.c
+src/lib/ecore_wayland/ecore_wl_input.c
+src/lib/ecore_wayland/ecore_wl_window.c
+src/lib/ecore_wayland/subsurface-protocol.c
+src/lib/ecore_wayland/ecore_wl_dnd.c
+src/lib/ecore_wayland/ecore_wl_output.c
+src/lib/ecore_wayland/session-recovery-protocol.c
+src/lib/ecore_wayland/ecore_wl.c
+src/lib/ecore_wayland/ecore_wl_subsurf.c
+src/lib/ecore_wayland/ivi-application-protocol.c
+src/lib/eldbus/eldbus_model_object.c
+src/lib/eldbus/eldbus_freedesktop.c
+src/lib/eldbus/eldbus_model_connection.c
+src/lib/eldbus/eldbus_introspection.c
+src/lib/eldbus/eldbus_model_signal.c
+src/lib/eldbus/eldbus_model_proxy.c
+src/lib/eldbus/eldbus_signal_handler.c
+src/lib/eldbus/eldbus_message.c
+src/lib/eldbus/eldbus_message_from_eina_value.c
+src/lib/eldbus/eldbus_core.c
+src/lib/eldbus/eldbus_model_method.c
+src/lib/eldbus/eldbus_message_to_eina_value.c
+src/lib/eldbus/eldbus_object.c
+src/lib/eldbus/eldbus_message_helper.c
+src/lib/eldbus/eldbus_pending.c
+src/lib/eldbus/eldbus_model.c
+src/lib/eldbus/eldbus_proxy.c
+src/lib/eldbus/eldbus_model_arguments.c
+src/lib/eldbus/eldbus_service.c
+src/lib/ecore_evas/ecore_evas_ews.c
+src/lib/ecore_evas/ecore_evas_util.c
+src/lib/ecore_evas/ecore_evas_buffer.c
+src/lib/ecore_evas/ecore_evas.c
+src/lib/ecore_evas/ecore_evas_deprecated.c
+src/lib/ecore_evas/ecore_evas_extn.c
+src/lib/ecore_evas/ecore_evas_module.c
+src/lib/ecore_evas/ecore_evas_fallback_selection.c
+src/generic/evas/common/shmfile.c
+src/generic/evas/common/timeout.c
+src/generic/evas/rsvg/main.c
+src/generic/evas/gst/main.c
+src/generic/evas/raw/main.c
+src/generic/evas/xcf/main.c
+src/generic/evas/xcf/pixelfuncs.c
+src/generic/evas/ps/main.c
+src/bin/exactness/exactness.c
+src/bin/exactness/common.c
+src/bin/exactness/recorder.c
+src/bin/exactness/injector.c
+src/bin/exactness/inspect.c
+src/bin/exactness/player.c
+src/bin/ecore_con/efl_net_proxy_helper.c
+src/bin/edje/edje_data_convert.c
+src/bin/edje/edje_cc_handlers.c
+src/bin/edje/edje_cc_parse.c
+src/bin/edje/edje_inspector.c
+src/bin/edje/edje_cc_script.c
+src/bin/edje/edje_player.c
+src/bin/edje/edje_multisense_convert.c
+src/bin/edje/edje_decc.c
+src/bin/edje/edje_codegen.c
+src/bin/edje/edje_external_inspector.c
+src/bin/edje/edje_cc.c
+src/bin/edje/edje_pick.c
+src/bin/edje/edje_convert_main.c
+src/bin/edje/edje_watch.c
+src/bin/edje/edje_cc_out.c
+src/bin/edje/edje_convert.c
+src/bin/edje/epp/cpperror.c
+src/bin/edje/epp/cpphash.c
+src/bin/edje/epp/cppalloc.c
+src/bin/edje/epp/cppmain.c
+src/bin/edje/epp/cppexp.c
+src/bin/edje/epp/cpplib.c
+src/bin/edje/edje_cc_sources.c
+src/bin/edje/edje_cc_mem.c
+src/bin/eolian/main.c
+src/bin/eolian/sources.c
+src/bin/eolian/docs.c
+src/bin/eolian/headers.c
+src/bin/eolian/types.c
+src/bin/eet/eet_main.c
+src/bin/efreet/efreet_mime_cache_create.c
+src/bin/efreet/efreet_icon_cache_create.c
+src/bin/efreet/efreetd_ipc.c
+src/bin/efreet/efreet_desktop_cache_create.c
+src/bin/efreet/efreetd_cache.c
+src/bin/efreet/efreetd.c
+src/bin/elementary/test_win_wm_rotation.c
+src/bin/elementary/test_calendar.c
+src/bin/elementary/test_efl_anim_group_sequential.c
+src/bin/elementary/test_efl_anim_start_delay.c
+src/bin/elementary/test_ctxpopup.c
+src/bin/elementary/test_genlist.c
+src/bin/elementary/test_part_bg.c
+src/bin/elementary/test_image.c
+src/bin/elementary/test_conform.c
+src/bin/elementary/test_ui_stack.c
+src/bin/elementary/test_efl_anim_translate.c
+src/bin/elementary/test_events.c
+src/bin/elementary/perf_test_02.c
+src/bin/elementary/test_glview.c
+src/bin/elementary/test_flip.c
+src/bin/elementary/test_ui_slider_interval.c
+src/bin/elementary/test_fileselector_button.c
+src/bin/elementary/test_scaling.c
+src/bin/elementary/test_fileselector.c
+src/bin/elementary/test_win_socket.c
+src/bin/elementary/test_access.c
+src/bin/elementary/test_dnd.c
+src/bin/elementary/test_ui_collection_view.c
+src/bin/elementary/test_config.c
+src/bin/elementary/test_focus_policy.c
+src/bin/elementary/test_ui_scroller.c
+src/bin/elementary/test_ui_datepicker.c
+src/bin/elementary/test_separator.c
+src/bin/elementary/test_ui_collection.c
+src/bin/elementary/test_gfx_filters.c
+src/bin/elementary/test_evas_map.c
+src/bin/elementary/elm_prefs_cc_out.c
+src/bin/elementary/test_win_modal.c
+src/bin/elementary/test_focus_style.c
+src/bin/elementary/test_ui_panel.c
+src/bin/elementary/test_efl_anim_rotate.c
+src/bin/elementary/test_multibuttonentry.c
+src/bin/elementary/test_entry_anchor.c
+src/bin/elementary/test_efl_gfx_mapping.c
+src/bin/elementary/test_efl_anim_repeat.c
+src/bin/elementary/test_icon_animated.c
+src/bin/elementary/test_3d.c
+src/bin/elementary/test_evas_snapshot.c
+src/bin/elementary/test_diskselector.c
+src/bin/elementary/test_ui_pager.c
+src/bin/elementary/test_button.c
+src/bin/elementary/test_efl_anim_interpolator.c
+src/bin/elementary/config.c
+src/bin/elementary/test_eio.c
+src/bin/elementary/test_weather.c
+src/bin/elementary/test_ui_clock.c
+src/bin/elementary/test_notify.c
+src/bin/elementary/test_ui_panes.c
+src/bin/elementary/test_ui_textpath.c
+src/bin/elementary/test_transit_bezier.c
+src/bin/elementary/test_segment_control.c
+src/bin/elementary/test_entry_anchor2.c
+src/bin/elementary/test_photo.c
+src/bin/elementary/perf_test_05.c
+src/bin/elementary/test_spinner.c
+src/bin/elementary/test_web.c
+src/bin/elementary/test_disable.c
+src/bin/elementary/test_prefs.c
+src/bin/elementary/test_ui_tab_pager.c
+src/bin/elementary/test_canvas_textblock.c
+src/bin/elementary/test_anim.c
+src/bin/elementary/test_ui_table.c
+src/bin/elementary/test_ui_spotlight.c
+src/bin/elementary/test_efl_anim_alpha.c
+src/bin/elementary/test_map.c
+src/bin/elementary/test_efl_ui_vg_animation.c
+src/bin/elementary/test_flipselector.c
+src/bin/elementary/test_icon_desktops.c
+src/bin/elementary/perf_test_06.c
+src/bin/elementary/test_ui_image.c
+src/bin/elementary/test_actionslider.c
+src/bin/elementary/test_win_plug.c
+src/bin/elementary/test_ui_table_static.c
+src/bin/elementary/test_win_dialog.c
+src/bin/elementary/test_panes.c
+src/bin/elementary/test_bubble.c
+src/bin/elementary/test_cnp.c
+src/bin/elementary/test_ui_tags.c
+src/bin/elementary/test_gengrid.c
+src/bin/elementary/test_box.c
+src/bin/elementary/test_evas_mask.c
+src/bin/elementary/test_win_indicator.c
+src/bin/elementary/test_ui_progressbar.c
+src/bin/elementary/test_sys_notify.c
+src/bin/elementary/elementary_codegen.c
+src/bin/elementary/test_ui_frame.c
+src/bin/elementary/test_transit.c
+src/bin/elementary/test_hoversel.c
+src/bin/elementary/test_gesture_framework.c
+src/bin/elementary/test_tooltip.c
+src/bin/elementary/perf_test_04.c
+src/bin/elementary/test_explode.c
+src/bin/elementary/test_toolbar.c
+src/bin/elementary/test_bg.c
+src/bin/elementary/test_ui_relative_container.c
+src/bin/elementary/test_clock.c
+src/bin/elementary/test_entry.c
+src/bin/elementary/test_ui_separator.c
+src/bin/elementary/test_efl_anim_pause.c
+src/bin/elementary/perf_test_03.c
+src/bin/elementary/test_flip_page.c
+src/bin/elementary/test_win_state.c
+src/bin/elementary/test_systray.c
+src/bin/elementary/quicklaunch.c
+src/bin/elementary/test_dayselector.c
+src/bin/elementary/test.c
+src/bin/elementary/test_factory.c
+src/bin/elementary/perf_test_01.c
+src/bin/elementary/test_gesture_layer2.c
+src/bin/elementary/test_cursor.c
+src/bin/elementary/test_progressbar.c
+src/bin/elementary/test_efl_anim_group_parallel.c
+src/bin/elementary/test_index.c
+src/bin/elementary/test_ui_popup.c
+src/bin/elementary/test_photocam.c
+src/bin/elementary/elm_prefs_cc_mem.c
+src/bin/elementary/test_naviframe.c
+src/bin/elementary/test_grid.c
+src/bin/elementary/test_main_menu.c
+src/bin/elementary/perf_rnd.c
+src/bin/elementary/test_check.c
+src/bin/elementary/test_popup.c
+src/bin/elementary/test_ui_spin.c
+src/bin/elementary/test_inwin.c
+src/bin/elementary/test_ui_slider.c
+src/bin/elementary/test_flip_page_eo.c
+src/bin/elementary/test_slideshow.c
+src/bin/elementary/test_ui_spin_button.c
+src/bin/elementary/test_label.c
+src/bin/elementary/test_colorclass.c
+src/bin/elementary/test_table.c
+src/bin/elementary/test_focus_custom_chain.c
+src/bin/elementary/test_code.c
+src/bin/elementary/test_datetime.c
+src/bin/elementary/test_glview_manygears.c
+src/bin/elementary/test_glview_simple.c
+src/bin/elementary/test_ui_timepicker.c
+src/bin/elementary/test_icon.c
+src/bin/elementary/test_conform_indicator.c
+src/bin/elementary/test_win_stack.c
+src/bin/elementary/test_colorselector.c
+src/bin/elementary/test_panel.c
+src/bin/elementary/elm_prefs_cc_handlers.c
+src/bin/elementary/test_launcher.c
+src/bin/elementary/test_thumb.c
+src/bin/elementary/test_list.c
+src/bin/elementary/test_efl_anim_scale.c
+src/bin/elementary/test_ui_pager_scroll.c
+src/bin/elementary/test_win_inline.c
+src/bin/elementary/test_radio.c
+src/bin/elementary/test_part_shadow.c
+src/bin/elementary/test_floating.c
+src/bin/elementary/test_ui_items.c
+src/bin/elementary/test_hover.c
+src/bin/elementary/test_gesture_layer3.c
+src/bin/elementary/test_fileselector_entry.c
+src/bin/elementary/elm_prefs_cc_parse.c
+src/bin/elementary/test_store.c
+src/bin/elementary/test_multi.c
+src/bin/elementary/test_naviframe_complex.c
+src/bin/elementary/run.c
+src/bin/elementary/test_scroller.c
+src/bin/elementary/test_focus.c
+src/bin/elementary/test_gesture_layer.c
+src/bin/elementary/test_win_keygrab.c
+src/bin/elementary/test_slider.c
+src/bin/elementary/test_layout.c
+src/bin/elementary/perf.c
+src/bin/elementary/test_menu.c
+src/bin/elementary/test_ui_radio.c
+src/bin/elementary/test_ui_button.c
+src/bin/elementary/elm_prefs_cc.c
+src/bin/elementary/test_efl_gfx_vg_value_provider.c
+src/bin/elementary/test_combobox.c
+src/bin/elementary/test_ui_box.c
+src/bin/elementary/test_external.c
+src/bin/elementary/perf_list.c
+src/bin/elementary/test_video.c
+src/bin/elementary/test_ui_box_stack.c
+src/bin/elementary/test_efl_ui_text.c
+src/bin/ecore_buffer/bq_mgr.c
+src/bin/ecore_buffer/bq_mgr_protocol.c
+src/bin/eeze/eeze_sensor_test/eeze_sensor_test.c
+src/bin/eeze/eeze_umount/eeze_umount.c
+src/bin/eeze/eeze_udev_test/eeze_udev_test.c
+src/bin/eeze/eeze_mount/eeze_mount.c
+src/bin/eeze/eeze_scanner/eeze_scanner.c
+src/bin/eeze/eeze_scanner_monitor/eeze_scanner_monitor.c
+src/bin/eeze/eeze_disk_ls/eeze_disk_ls.c
+src/bin/ethumb_client/ethumbd_slave.c
+src/bin/ethumb_client/ethumbd_client.c
+src/bin/ethumb_client/ethumbd.c
+src/bin/elua/main.c
+src/bin/ethumb/ethumb.c
+src/bin/eina/eina_btlog/eina_btlog.c
+src/bin/eina/eina_modinfo/eina_modinfo.c
+src/bin/efl_canvas_wl/efl_canvas_wl_test.c
+src/bin/efl_canvas_wl/efl_canvas_wl_test_stack.c
+src/bin/efl/efl_debugd.c
+src/bin/efl/efl_debug.c
+src/bin/embryo/embryo_cc_sclist.c
+src/bin/embryo/embryo_cc_sc6.c
+src/bin/embryo/embryo_cc_sc3.c
+src/bin/embryo/embryo_cc_sc1.c
+src/bin/embryo/embryo_cc_scexpand.c
+src/bin/embryo/embryo_cc_sc5.c
+src/bin/embryo/embryo_cc_sc2.c
+src/bin/embryo/embryo_cc_sc7.c
+src/bin/embryo/embryo_cc_sc4.c
+src/bin/embryo/embryo_cc_prefix.c
+src/bin/embryo/embryo_cc_scvars.c
+src/bin/eldbus/dbus.c
+src/bin/eldbus/source_client.c
+src/bin/eldbus/parser.c
+src/bin/eldbus/utils.c
+src/bin/eldbus/client.c
+src/bin/ecore_evas/eetpack.c
+src/bin/ecore_evas/ecore_evas_convert.c
+src/benchmarks/eo/eo_bench_callbacks.c
+src/benchmarks/eo/eo_bench_eo_do.c
+src/benchmarks/eo/eo_bench.c
+src/benchmarks/eo/eo_bench_eo_add.c
+src/benchmarks/eo/class_simple.c
+src/benchmarks/evas/evas_bench.c
+src/benchmarks/evas/evas_bench_saver.c
+src/benchmarks/evas/evas_bench_loader.c
+src/benchmarks/elementary/collection.c
+src/benchmarks/elementary/focus_widget_tree.c
+src/benchmarks/eina/eina_bench_convert.c
+src/benchmarks/eina/eina_bench_mempool.c
+src/benchmarks/eina/eina_bench_stringshare.c
+src/benchmarks/eina/eina_bench_crc_hash.c
+src/benchmarks/eina/evas_object_list.c
+src/benchmarks/eina/eina_bench.c
+src/benchmarks/eina/evas_hash.c
+src/benchmarks/eina/eina_bench_rectangle_pool.c
+src/benchmarks/eina/eina_bench_quad.c
+src/benchmarks/eina/evas_mempool.c
+src/benchmarks/eina/eina_bench_array.c
+src/benchmarks/eina/eina_bench_sort.c
+src/benchmarks/eina/ecore_list.c
+src/benchmarks/eina/evas_stringshare.c
+src/benchmarks/eina/ecore_sheap.c
+src/benchmarks/eina/evas_list.c
Ecore_Free_Cb free_func);
-
-/*
- * Hash Table Implementation:
- *
- * Traditional hash table implementation. I had tried a list of tables
- * approach to save on the realloc's but it ended up being much slower than
- * the traditional approach.
- */
-
-typedef struct _ecore_hash_node Ecore_Hash_Node;
-# define ECORE_HASH_NODE(hash) ((Ecore_Hash_Node *)hash)
-
-struct _ecore_hash_node
-{
- Ecore_Hash_Node *next; /* Pointer to the next node in the bucket list */
- void *key; /* The key for the data node */
- void *value; /* The value associated with this node */
-};
-
-typedef struct _ecore_hash Ecore_Hash;
-# define ECORE_HASH(hash) ((Ecore_Hash *)hash)
-
-struct _ecore_hash
-{
- Ecore_Hash_Node **buckets;
- int size; /* An index into the table of primes to
- determine size */
- int nodes; /* The number of nodes currently in the hash */
-
- int index; /* The current index into the bucket table */
-
- Ecore_Compare_Cb compare; /* The function used to compare node values */
- Ecore_Hash_Cb hash_func; /* The callback function to determine hash */
-
- Ecore_Free_Cb free_key; /* The callback function to free key */
- Ecore_Free_Cb free_value; /* The callback function to free value */
-};
-
-/* Create and initialize a hash */
-EAPI Ecore_Hash *ecore_hash_new(Ecore_Hash_Cb hash_func,
- Ecore_Compare_Cb compare);
-EAPI int ecore_hash_init(Ecore_Hash *hash,
- Ecore_Hash_Cb hash_func,
- Ecore_Compare_Cb compare);
-
-/* Functions related to freeing the data in the hash table */
-EAPI int ecore_hash_free_key_cb_set(Ecore_Hash *hash,
- Ecore_Free_Cb function);
-EAPI int ecore_hash_free_value_cb_set(Ecore_Hash *hash,
- Ecore_Free_Cb function);
-EAPI void ecore_hash_destroy(Ecore_Hash *hash);
-
-EAPI int ecore_hash_count(Ecore_Hash *hash);
-EAPI int ecore_hash_for_each_node(Ecore_Hash *hash,
- Ecore_For_Each for_each_func,
- void *user_data);
-EAPI Ecore_List *ecore_hash_keys(Ecore_Hash *hash);
-
-/* Retrieve and store data into the hash */
-EAPI void * ecore_hash_get(Ecore_Hash *hash, const void *key);
-EAPI int ecore_hash_set(Ecore_Hash *hash, void *key, void *value);
-EAPI int ecore_hash_hash_set(Ecore_Hash *hash, Ecore_Hash *set);
-EAPI void * ecore_hash_remove(Ecore_Hash *hash, const void *key);
-EAPI void * ecore_hash_find(Ecore_Hash *hash,
- Ecore_Compare_Cb compare,
- const void *value);
-EAPI void ecore_hash_dump_graph(Ecore_Hash *hash);
-EAPI void ecore_hash_dump_stats(Ecore_Hash *hash);
-
-
typedef struct _ecore_heap Ecore_Sheap;
# define ECORE_HEAP(heap) ((Ecore_Sheap *)heap)
int references;
};
-EAPI int ecore_string_init();
-EAPI int ecore_string_shutdown();
-EAPI const char *ecore_string_instance(const char *string);
-EAPI void ecore_string_release(const char *string);
-
typedef struct _Ecore_Tree_Node Ecore_Tree_Node;
# define ECORE_TREE_NODE(object) ((Ecore_Tree_Node *)object)
struct _Ecore_Tree_Node
+++ /dev/null
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "Ecore_Data.h"
-
-#define PRIME_TABLE_MAX 21
-#define PRIME_MIN 17
-#define PRIME_MAX 16777213
-
-#define ECORE_HASH_CHAIN_MAX 3
-
-#define ECORE_COMPUTE_HASH(hash, key) hash->hash_func(key) % \
- ecore_prime_table[hash->size];
-
-#define ECORE_HASH_INCREASE(hash) ((hash && ecore_prime_table[hash->size] < \
- PRIME_MAX) ? \
- (hash->nodes / \
- ecore_prime_table[hash->size]) > \
- ECORE_HASH_CHAIN_MAX : FALSE)
-#define ECORE_HASH_REDUCE(hash) ((hash && ecore_prime_table[hash->size] > \
- PRIME_MIN) ? \
- (double)hash->nodes / \
- (double)ecore_prime_table[hash->size - 1] \
- < ((double)ECORE_HASH_CHAIN_MAX * \
- 0.375) : FALSE)
-
-
-static const unsigned int ecore_prime_table[] =
-{
- 17, 31, 61, 127, 257, 509, 1021,
- 2053, 4093, 8191, 16381, 32771, 65537, 131071, 262147, 524287, 1048573,
- 2097143, 4194301, 8388617, 16777213
-};
-
-
-/* Private hash manipulation functions */
-static int _ecore_hash_node_add(Ecore_Hash *hash,
- Ecore_Hash_Node *node);
-static Ecore_Hash_Node * _ecore_hash_node_get(Ecore_Hash *hash,
- const void *key);
-static int _ecore_hash_increase(Ecore_Hash *hash);
-static int _ecore_hash_decrease(Ecore_Hash *hash);
-static inline int _ecore_hash_rehash(Ecore_Hash *hash,
- Ecore_Hash_Node **old_table,
- int old_size);
-static int _ecore_hash_bucket_destroy(Ecore_Hash_Node *list,
- Ecore_Free_Cb keyd,
- Ecore_Free_Cb valued);
-static inline Ecore_Hash_Node *_ecore_hash_bucket_get(Ecore_Hash *hash,
- Ecore_Hash_Node *bucket,
- const void *key);
-
-static Ecore_Hash_Node * _ecore_hash_node_new(void *key, void *value);
-static int _ecore_hash_node_init(Ecore_Hash_Node *node,
- void *key,
- void *value);
-static int _ecore_hash_node_destroy(Ecore_Hash_Node *node,
- Ecore_Free_Cb keyd,
- Ecore_Free_Cb valued);
-
-/**
- * @defgroup Ecore_Data_Hash_ADT_Creation_Group Hash Creation Functions
- *
- * Functions that create hash tables.
- */
-
-/**
- * Creates and initializes a new hash
- * @param hash_func The function for determining hash position.
- * @param compare The function for comparing node keys.
- * @return @c NULL on error, a new hash on success.
- * @ingroup Ecore_Data_Hash_ADT_Creation_Group
- */
-EAPI Ecore_Hash *
-ecore_hash_new(Ecore_Hash_Cb hash_func, Ecore_Compare_Cb compare)
-{
- Ecore_Hash *new_hash = (Ecore_Hash *)malloc(sizeof(Ecore_Hash));
- if (!new_hash)
- return NULL;
-
- if (!ecore_hash_init(new_hash, hash_func, compare))
- {
- FREE(new_hash);
- return NULL;
- }
-
- return new_hash;
-}
-
-/**
- * Initializes the given hash.
- * @param hash The given hash.
- * @param hash_func The function used for hashing node keys.
- * @param compare The function used for comparing node keys.
- * @return @c TRUE on success, @c FALSE on an error.
- * @ingroup Ecore_Data_Hash_ADT_Creation_Group
- */
-EAPI int
-ecore_hash_init(Ecore_Hash *hash,
- Ecore_Hash_Cb hash_func,
- Ecore_Compare_Cb compare)
-{
- CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE);
-
- memset(hash, 0, sizeof(Ecore_Hash));
-
- hash->hash_func = hash_func;
- hash->compare = compare;
-
- hash->buckets = (Ecore_Hash_Node **)calloc(ecore_prime_table[0],
- sizeof(Ecore_Hash_Node *));
-
- return TRUE;
-}
-
-/**
- * @defgroup Ecore_Data_Hash_ADT_Destruction_Group Hash Destruction Functions
- *
- * Functions that destroy hash tables and their contents.
- */
-
-/**
- * Sets the function to destroy the keys of the given hash.
- * @param hash The given hash.
- * @param function The function used to free the node keys. NULL is a
- * valid value and means that no function will be called.
- * @return @c TRUE on success, @c FALSE on error.
- * @ingroup Ecore_Data_Hash_ADT_Destruction_Group
- */
-EAPI int
-ecore_hash_free_key_cb_set(Ecore_Hash *hash, Ecore_Free_Cb function)
-{
- CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE);
-
- hash->free_key = function;
-
- return TRUE;
-}
-
-/**
- * Sets the function to destroy the values in the given hash.
- * @param hash The given hash.
- * @param function The function that will free the node values. NULL is a
- * valid value and means that no function will be called.
- * @return @c TRUE on success, @c FALSE on error
- * @ingroup Ecore_Data_Hash_ADT_Destruction_Group
- */
-EAPI int
-ecore_hash_free_value_cb_set(Ecore_Hash *hash, Ecore_Free_Cb function)
-{
- CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE);
-
- hash->free_value = function;
-
- return TRUE;
-}
-
-/**
- * @defgroup Ecore_Data_Hash_ADT_Data_Group Hash Data Functions
- *
- * Functions that set, access and delete values from the hash tables.
- */
-
-/**
- * Sets a key-value pair in the given hash table.
- * @param hash The given hash table.
- * @param key The key.
- * @param value The value.
- * @return @c TRUE if successful, @c FALSE if not.
- * @ingroup Ecore_Data_Hash_ADT_Data_Group
- */
-EAPI int
-ecore_hash_set(Ecore_Hash *hash, void *key, void *value)
-{
- int ret = FALSE;
- Ecore_Hash_Node *node;
-
- CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE);
-
- node = _ecore_hash_node_get(hash, key);
- if (node)
- {
- if (hash->free_key)
- hash->free_key(key);
-
- if (node->value && hash->free_value)
- hash->free_value(node->value);
-
- node->value = value;
- ret = TRUE;
- }
- else
- {
- node = _ecore_hash_node_new(key, value);
- if (node)
- ret = _ecore_hash_node_add(hash, node);
- }
-
- return ret;
-}
-
-/**
- * Sets all key-value pairs from set in the given hash table.
- * @param hash The given hash table.
- * @param set The hash table to import.
- * @return @c TRUE if successful, @c FALSE if not.
- * @ingroup Ecore_Data_Hash_ADT_Data_Group
- */
-EAPI int
-ecore_hash_hash_set(Ecore_Hash *hash, Ecore_Hash *set)
-{
- unsigned int i;
- Ecore_Hash_Node *node, *old;
-
- CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE);
- CHECK_PARAM_POINTER_RETURN("set", set, FALSE);
-
- for (i = 0; i < ecore_prime_table[set->size]; i++)
- {
- /* Hash into a new list to avoid loops of rehashing the same nodes */
- while ((old = set->buckets[i]))
- {
- set->buckets[i] = old->next;
- old->next = NULL;
- node = _ecore_hash_node_get(hash, old->key);
- if (node)
- {
- /* This key already exists. Delete the old and add the new
- * value */
- if (hash->free_key)
- hash->free_key(node->key);
-
- if (hash->free_value)
- hash->free_value(node->value);
-
- node->key = old->key;
- node->value = old->value;
- free(old);
- }
- else
- _ecore_hash_node_add(hash, old);
- }
- }
- FREE(set->buckets);
- ecore_hash_init(set, set->hash_func, set->compare);
- return TRUE;
-}
-
-/**
- * @brief Frees the hash table and the data contained inside it.
- * @param hash: The hash table to destroy.
- * @ingroup Ecore_Data_Hash_ADT_Destruction_Group
- */
-EAPI void
-ecore_hash_destroy(Ecore_Hash *hash)
-{
- unsigned int i = 0;
-
- CHECK_PARAM_POINTER("hash", hash);
-
- if (hash->buckets)
- {
- while (i < ecore_prime_table[hash->size])
- {
- if (hash->buckets[i])
- {
- Ecore_Hash_Node *bucket;
-
- /*
- * Remove the bucket list to avoid possible recursion
- * on the free callbacks.
- */
- bucket = hash->buckets[i];
- hash->buckets[i] = NULL;
- _ecore_hash_bucket_destroy(bucket,
- hash->free_key,
- hash->free_value);
- }
-
- i++;
- }
-
- FREE(hash->buckets);
- }
-
- FREE(hash);
-
- return;
-}
-
-/**
- * @defgroup Ecore_Data_Hash_ADT_Traverse_Group Hash Traverse Functions
- *
- * Functions that iterate through hash tables.
- */
-
-/**
- * Counts the number of nodes in a hash table.
- * @param hash The hash table to count current nodes.
- * @return The number of nodes in the hash.
- * @ingroup Ecore_Data_Hash_ADT_Destruction_Group
- */
-EAPI int
-ecore_hash_count(Ecore_Hash *hash)
-{
- CHECK_PARAM_POINTER_RETURN("hash", hash, 0);
-
- return hash->nodes;
-}
-
-/**
- * Runs the @p for_each_func function on each entry in the given hash.
- * @param hash The given hash.
- * @param for_each_func The function that each entry is passed to.
- * @param user_data a pointer passed to calls of for_each_func
- * @return TRUE on success, FALSE otherwise.
- * @ingroup Ecore_Data_Hash_ADT_Traverse_Group
- */
-EAPI int
-ecore_hash_for_each_node(Ecore_Hash *hash,
- Ecore_For_Each for_each_func,
- void *user_data)
-{
- unsigned int i = 0;
-
- CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE);
- CHECK_PARAM_POINTER_RETURN("for_each_func", for_each_func, FALSE);
-
- while (i < ecore_prime_table[hash->size])
- {
- if (hash->buckets[i])
- {
- Ecore_Hash_Node *node;
-
- for (node = hash->buckets[i]; node; node = node->next)
- {
- for_each_func(node, user_data);
- }
- }
-
- i++;
- }
-
- return TRUE;
-}
-
-/**
- * Retrieves an ecore_list of all keys in the given hash.
- * @param hash The given hash.
- * @return new ecore_list on success, NULL otherwise
- * @ingroup Ecore_Data_Hash_ADT_Traverse_Group
- */
-EAPI Ecore_List *
-ecore_hash_keys(Ecore_Hash *hash)
-{
- unsigned int i = 0;
- Ecore_List *keys;
-
- CHECK_PARAM_POINTER_RETURN("hash", hash, NULL);
-
- keys = ecore_list_new();
- while (i < ecore_prime_table[hash->size])
- {
- if (hash->buckets[i])
- {
- Ecore_Hash_Node *node;
-
- for (node = hash->buckets[i]; node; node = node->next)
- {
- ecore_list_append(keys, node->key);
- }
- }
-
- i++;
- }
- ecore_list_first_goto(keys);
-
- return keys;
-}
-
-/**
- * Prints the distribution of the given hash table for graphing.
- * @param hash The given hash table.
- */
-EAPI void
-ecore_hash_dump_graph(Ecore_Hash *hash)
-{
- unsigned int i;
-
- for (i = 0; i < ecore_prime_table[hash->size]; i++)
- if (hash->buckets[i])
- {
- unsigned int n = 0;
- Ecore_Hash_Node *node;
- for (node = hash->buckets[i]; node; node = node->next)
- n++;
- printf("%u\t%u", i, n);
- }
- else
- printf("%u\t0", i);
-
-}
-
-/**
- * Prints the distribution of the given hash table for graphing.
- * @param hash The given hash table.
- */
-EAPI void
-ecore_hash_dump_stats(Ecore_Hash *hash)
-{
- unsigned int i;
- double variance, sum_n_2 = 0, sum_n = 0;
-
- if (!hash->size) return;
- for (i = 0; i < ecore_prime_table[hash->size]; i++)
- {
- if (hash->buckets[i])
- {
- int n = 0;
- Ecore_Hash_Node *node;
- for (node = hash->buckets[i]; node; node = node->next)
- n++;
- sum_n_2 += ((double)n * (double)n);
- sum_n += (double)n;
- }
- }
- if (i)
- {
- variance = (sum_n_2 - ((sum_n * sum_n) / (double)i)) / (double)i;
- printf("Average length: %f\n\tvariance^2: %f", (sum_n / (double)i),
- variance);
- }
-}
-
-static int
-_ecore_hash_bucket_destroy(Ecore_Hash_Node *list,
- Ecore_Free_Cb keyd,
- Ecore_Free_Cb valued)
-{
- Ecore_Hash_Node *node;
-
- CHECK_PARAM_POINTER_RETURN("list", list, FALSE);
-
- for (node = list; node; node = list)
- {
- list = list->next;
- _ecore_hash_node_destroy(node, keyd, valued);
- }
-
- return TRUE;
-}
-
-/*
- * @brief Add the node to the hash table
- * @param hash: the hash table to add the key
- * @param node: the node to add to the hash table
- * @return Returns FALSE on error, TRUE on success
- */
-static int
-_ecore_hash_node_add(Ecore_Hash *hash, Ecore_Hash_Node *node)
-{
- size_t hash_val;
-
- CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE);
- CHECK_PARAM_POINTER_RETURN("node", node, FALSE);
-
- /* Check to see if the hash needs to be resized */
- if (ECORE_HASH_INCREASE(hash))
- _ecore_hash_increase(hash);
-
- /* Compute the position in the table */
- if (!hash->hash_func)
- hash_val = (size_t)node->key % ecore_prime_table[hash->size];
- else
- hash_val = ECORE_COMPUTE_HASH(hash, node->key);
-
- /* Prepend the node to the list at the index position */
- node->next = hash->buckets[hash_val];
- hash->buckets[hash_val] = node;
- hash->nodes++;
-
- return TRUE;
-}
-
-/**
- * Retrieves the value associated with the given key from the given hash
- * table.
- * @param hash The given hash table.
- * @param key The key to search for.
- * @return The value corresponding to key on success, @c NULL otherwise.
- * @ingroup Ecore_Data_Hash_ADT_Data_Group
- */
-EAPI void *
-ecore_hash_get(Ecore_Hash *hash, const void *key)
-{
- void *data;
- Ecore_Hash_Node *node;
-
- CHECK_PARAM_POINTER_RETURN("hash", hash, NULL);
-
- node = _ecore_hash_node_get(hash, key);
- if (!node)
- return NULL;
-
- data = node->value;
-
- return data;
-}
-
-/**
- * Removes the value associated with the given key in the given hash
- * table.
- * @param hash The given hash table.
- * @param key The key to search for.
- * @return The value corresponding to the key on success. @c NULL is
- * returned if there is an error.
- * @ingroup Ecore_Data_Hash_ADT_Data_Group
- */
-EAPI void *
-ecore_hash_remove(Ecore_Hash *hash, const void *key)
-{
- Ecore_Hash_Node *node = NULL;
- Ecore_Hash_Node *list;
- size_t hash_val;
- void *ret = NULL;
-
- CHECK_PARAM_POINTER_RETURN("hash", hash, NULL);
-
- /* Compute the position in the table */
- if (!hash->hash_func)
- hash_val = (size_t)key % ecore_prime_table[hash->size];
- else
- hash_val = ECORE_COMPUTE_HASH(hash, key);
-
- /*
- * If their is a list that could possibly hold the key/value pair
- * traverse it and remove the hash node.
- */
- if (hash->buckets[hash_val])
- {
- list = hash->buckets[hash_val];
-
- /*
- * Traverse the list to find the specified key
- */
- node = list;
- if (hash->compare)
- while ((node) && (hash->compare(node->key, key) != 0))
- {
- list = node;
- node = node->next;
- }
- else
- while ((node) && (node->key != key))
- {
- list = node;
- node = node->next;
- }
-
- /*
- * Remove the node with the matching key and free it's memory
- */
- if (node)
- {
- if (list == node)
- hash->buckets[hash_val] = node->next;
- else
- list->next = node->next;
-
- ret = node->value;
- node->value = NULL;
- _ecore_hash_node_destroy(node, hash->free_key, NULL);
- hash->nodes--;
- }
- }
-
- if (ECORE_HASH_REDUCE(hash))
- _ecore_hash_decrease(hash);
-
- return ret;
-}
-
-/**
- * Retrieves the first value that matches
- * table.
- * @param hash The given hash table.
- * @param key The key to search for.
- * @return The value corresponding to key on success, @c NULL otherwise.
- * @ingroup Ecore_Data_Hash_ADT_Data_Group
- */
-EAPI void *
-ecore_hash_find(Ecore_Hash *hash, Ecore_Compare_Cb compare, const void *value)
-{
- unsigned int i = 0;
-
- CHECK_PARAM_POINTER_RETURN("hash", hash, NULL);
- CHECK_PARAM_POINTER_RETURN("compare", compare, NULL);
- CHECK_PARAM_POINTER_RETURN("value", value, NULL);
-
- while (i < ecore_prime_table[hash->size])
- {
- if (hash->buckets[i])
- {
- Ecore_Hash_Node *node;
-
- for (node = hash->buckets[i]; node; node = node->next)
- {
- if (!compare(node->value, value))
- return node->value;
- }
- }
-
- i++;
- }
-
- return NULL;
-}
-
-/*
- * @brief Retrieve the node associated with key
- * @param hash: the hash table to search for the key
- * @param key: the key to search for in the hash table
- * @return Returns NULL on error, node corresponding to key on success
- */
-static Ecore_Hash_Node *
-_ecore_hash_node_get(Ecore_Hash *hash, const void *key)
-{
- size_t hash_val;
- Ecore_Hash_Node *node = NULL;
-
- CHECK_PARAM_POINTER_RETURN("hash", hash, NULL);
-
- if (!hash->buckets)
- return NULL;
-
- /* Compute the position in the table */
- if (!hash->hash_func)
- hash_val = (size_t)key % ecore_prime_table[hash->size];
- else
- hash_val = ECORE_COMPUTE_HASH(hash, key);
-
- /* Grab the bucket at the specified position */
- if (hash->buckets[hash_val])
- {
- node = _ecore_hash_bucket_get(hash, hash->buckets[hash_val], key);
- /*
- * Move matched node to the front of the list as it's likely
- * to be searched for again soon.
- */
- if (node && node != hash->buckets[hash_val])
- {
- node->next = hash->buckets[hash_val];
- hash->buckets[hash_val] = node;
- }
- }
-
- return node;
-}
-
-/*
- * @brief Search the hash bucket for a specified key
- * @param hash: the hash table to retrieve the comparison function
- * @param bucket: the list to search for the key
- * @param key: the key to search for in the list
- * @return Returns NULL on error or not found, the found node on success
- */
-static inline Ecore_Hash_Node *
-_ecore_hash_bucket_get(Ecore_Hash *hash,
- Ecore_Hash_Node *bucket,
- const void *key)
-{
- Ecore_Hash_Node *prev = NULL;
- Ecore_Hash_Node *node = NULL;
-
- /*
- * Traverse the list to find the desired node, if the node is in the
- * list, then return the node.
- */
- if (hash->compare)
- for (node = bucket; node; node = node->next)
- {
- if (hash->compare(node->key, key) == 0)
- break;
-
- prev = node;
- }
- else
- for (node = bucket; node; node = node->next)
- {
- if (node->key == key)
- break;
-
- prev = node;
- }
-
- /*
- * Remove node from the list to replace it at the beginning.
- */
- if (node && prev)
- {
- prev->next = node->next;
- node->next = NULL;
- }
-
- return node;
-}
-
-/*
- * @brief Increase the size of the hash table by approx. 2 * current size
- * @param hash: the hash table to increase the size of
- * @return Returns TRUE on success, FALSE on error
- */
-static int
-_ecore_hash_increase(Ecore_Hash *hash)
-{
- void *old;
-
- CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE);
-
- /* Max size reached so return FALSE */
- if ((ecore_prime_table[hash->size] == PRIME_MAX) ||
- (hash->size == PRIME_TABLE_MAX))
- return FALSE;
-
- /*
- * Increase the size of the hash and save a pointer to the old data
- */
- hash->size++;
- old = hash->buckets;
-
- /*
- * Allocate a new bucket area, of the new larger size
- */
- hash->buckets =
- calloc(ecore_prime_table[hash->size], sizeof(Ecore_Hash_Node *));
-
- /*
- * Make sure the allocation succeeded, if not replace the old data and
- * return a failure.
- */
- if (!hash->buckets)
- {
- hash->buckets = old;
- hash->size--;
- return FALSE;
- }
-
- hash->nodes = 0;
-
- /*
- * Now move all of the old data into the new bucket area
- */
- if (_ecore_hash_rehash(hash, old, hash->size - 1))
- {
- FREE(old);
- return TRUE;
- }
-
- /*
- * Free the old buckets regardless of success.
- */
- FREE(old);
-
- return FALSE;
-}
-
-/*
- * @brief Decrease the size of the hash table by < 1/2 * current size
- * @param hash: the hash table to decrease the size of
- * @return Returns TRUE on success, FALSE on error
- */
-static int
-_ecore_hash_decrease(Ecore_Hash *hash)
-{
- Ecore_Hash_Node **old;
-
- CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE);
-
- if (ecore_prime_table[hash->size] == PRIME_MIN)
- return FALSE;
-
- /*
- * Decrease the hash size and store a pointer to the old data
- */
- hash->size--;
- old = hash->buckets;
-
- /*
- * Allocate a new area to store the data
- */
- hash->buckets = (Ecore_Hash_Node **)calloc(ecore_prime_table[hash->size],
- sizeof(Ecore_Hash_Node *));
-
- /*
- * Make sure allocation succeeded otherwise rreturn to the previous
- * state
- */
- if (!hash->buckets)
- {
- hash->buckets = old;
- hash->size++;
- return FALSE;
- }
-
- hash->nodes = 0;
-
- if (_ecore_hash_rehash(hash, old, hash->size + 1))
- {
- FREE(old);
- return TRUE;
- }
-
- return FALSE;
-}
-
-/*
- * @brief Rehash the nodes of a table into the hash table
- * @param hash: the hash to place the nodes of the table
- * @param table: the table to remove the nodes from and place in hash
- * @return Returns TRUE on success, FALSE on error
- */
-static inline int
-_ecore_hash_rehash(Ecore_Hash *hash, Ecore_Hash_Node **old_table, int old_size)
-{
- unsigned int i;
- Ecore_Hash_Node *old;
-
- CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE);
- CHECK_PARAM_POINTER_RETURN("old_table", old_table, FALSE);
-
- for (i = 0; i < ecore_prime_table[old_size]; i++)
- {
- /* Hash into a new list to avoid loops of rehashing the same nodes */
- while ((old = old_table[i]))
- {
- old_table[i] = old->next;
- old->next = NULL;
- _ecore_hash_node_add(hash, old);
- }
- }
-
- return TRUE;
-}
-
-/*
- * @brief Create a new hash node for key and value storage
- * @param key: the key for this node
- * @param value: the value that the key references
- * @return Returns NULL on error, a new hash node on success
- */
-static Ecore_Hash_Node *
-_ecore_hash_node_new(void *key, void *value)
-{
- Ecore_Hash_Node *node;
-
- node = (Ecore_Hash_Node *)malloc(sizeof(Ecore_Hash_Node));
- if (!node)
- return NULL;
-
- if (!_ecore_hash_node_init(node, key, value))
- {
- FREE(node);
- return NULL;
- }
-
- return node;
-}
-
-/*
- * @brief Initialize a hash node to some sane default values
- * @param node: the node to set the values
- * @param key: the key to reference this node
- * @param value: the value that key refers to
- * @return Returns TRUE on success, FALSE on error
- */
-static int
-_ecore_hash_node_init(Ecore_Hash_Node *node, void *key, void *value)
-{
- CHECK_PARAM_POINTER_RETURN("node", node, FALSE);
-
- node->key = key;
- node->value = value;
-
- return TRUE;
-}
-
-/*
- * @brief Destroy a node and call the specified callbacks to free data
- * @param node: the node to be destroyed
- * @param keyd: the function to free the key
- * @param valued: the function to free the value
- * @return Returns TRUE on success, FALSE on error
- */
-static int
-_ecore_hash_node_destroy(Ecore_Hash_Node *node,
- Ecore_Free_Cb keyd,
- Ecore_Free_Cb valued)
-{
- CHECK_PARAM_POINTER_RETURN("node", node, FALSE);
-
- if (keyd)
- keyd(node->key);
-
- if (valued)
- valued(node->value);
-
- FREE(node);
-
- return TRUE;
-}
-
-int
-ecore_str_compare(const void *key1, const void *key2)
-{
- const char *k1, *k2;
-
- if (!key1 || !key2)
- return ecore_direct_compare(key1, key2);
- else if (key1 == key2)
- return 0;
-
- k1 = key1;
- k2 = key2;
-
- return strcmp(k1, k2);
-}
-
-unsigned int
-ecore_str_hash(const void *key)
-{
- int i;
- unsigned int mask;
- unsigned int value = 0;
- const char *k = key;
-
- if (!k)
- return 0;
-
- mask = (sizeof(unsigned int) * 8) - 1;
-
- for (i = 0; k[i] != '\0'; i++)
- {
- value ^= ((unsigned int)k[i] << ((i * 5) & mask));
- }
-
- return value;
-}
+++ /dev/null
-#include <stdlib.h>
-#include <string.h>
-
-#include "Ecore_Data.h"
-
-static void ecore_string_free_cb(void *data);
-
-static Ecore_Hash *ecore_strings = NULL;
-static int ecore_string_init_count = 0;
-
-/**
- * @defgroup Ecore_String_Group String Instance Functions
- *
- * These functions allow you to store one copy of a string, and use it
- * throughout your program.
- *
- * This is a method to reduce the number of duplicated strings kept in
- * memory. It's pretty common for the same strings to be dynamically
- * allocated repeatedly between applications and libraries, especially in
- * circumstances where you could have multiple copies of a structure that
- * allocates the string. So rather than duplicating and freeing these
- * strings, you request a read-only pointer to an existing string and
- * only incur the overhead of a hash lookup.
- *
- * It sounds like micro-optimizing, but profiling has shown this can have
- * a significant impact as you scale the number of copies up. It improves
- * string creation/destruction speed, reduces memory use and decreases
- * memory fragmentation, so a win all-around.
- */
-
-/**
- * Initialize the ecore string internal structure.
- * @return Zero on failure, non-zero on successful initialization.
- */
-EAPI int
-ecore_string_init(void)
-{
- /*
- * No strings have been loaded at this point, so create the hash
- * table for storing string info for later.
- */
- if (!ecore_string_init_count)
- {
- ecore_strings = ecore_hash_new(ecore_str_hash, ecore_str_compare);
- if (!ecore_strings)
- return 0;
-
- ecore_hash_free_value_cb_set(ecore_strings, ecore_string_free_cb);
- }
-
- ecore_string_init_count++;
-
- return 1;
-}
-
-/**
- * Retrieves an instance of a string for use in an ecore program.
- * @param string The string to retrieve an instance of.
- * @return A pointer to an instance of the string on success.
- * @c NULL on failure.
- * @ingroup Ecore_String_Group
- */
-EAPI const char *
-ecore_string_instance(const char *string)
-{
- Ecore_String *str;
-
- CHECK_PARAM_POINTER_RETURN("string", string, NULL);
-
- /*
- * Check for a previous instance of the string, if not found, create
- * it.
- */
- str = ecore_hash_get(ecore_strings, string);
- if (!str)
- {
- int length;
-
- /*
- * Allocate and initialize a new string reference.
- */
- length = strlen(string) + 1;
-
- str =
- (Ecore_String *)malloc(sizeof(Ecore_String) + length * sizeof(char));
- if (!str) return NULL;
-
- str->string = (char *)(str + 1);
- str->references = 0;
-
- memcpy(str->string, string, length);
-
- ecore_hash_set(ecore_strings, str->string, str);
- }
-
- str->references++;
-
- return str->string;
-}
-
-/**
- * Notes that the given string has lost an instance.
- *
- * It will free the string if no other instances are left.
- *
- * @param string The given string.
- * @ingroup Ecore_String_Group
- */
-EAPI void
-ecore_string_release(const char *string)
-{
- Ecore_String *str;
-
- CHECK_PARAM_POINTER("string", string);
-
- str = ecore_hash_get(ecore_strings, (char *)string);
- if (!str)
- return;
-
- str->references--;
- if (str->references < 1)
- {
- ecore_hash_remove(ecore_strings, (char *)string);
- FREE(str);
- }
-}
-
-EAPI void
-ecore_string_hash_dump_graph(void)
-{
- ecore_hash_dump_graph(ecore_strings);
-}
-
-EAPI void
-ecore_string_hash_dump_stats(void)
-{
- ecore_hash_dump_stats(ecore_strings);
-}
-
-/**
- * Shutdown the ecore string internal structures
- * @return 0 when the module is completely shut down, 1 or
- * greater otherwise.
- */
-EAPI int
-ecore_string_shutdown(void)
-{
- --ecore_string_init_count;
- if (!ecore_string_init_count)
- {
- ecore_hash_destroy(ecore_strings);
- ecore_strings = NULL;
- }
- return ecore_string_init_count;
-}
-
-static void
-ecore_string_free_cb(void *data)
-{
- Ecore_String *str;
-
- str = data;
- FREE(str);
-}
};
static const Eina_Benchmark_Case etc[] = {
- { "Hash", eina_bench_hash, EINA_TRUE },
{ "Hash_Short_Key", eina_bench_crc_hash_short, EINA_TRUE },
{ "Hash_Medium_Key", eina_bench_crc_hash_medium, EINA_TRUE },
{ "Hash_Large_key", eina_bench_crc_hash_large, EINA_TRUE },
break;
}
- eina_bench_e17();
-
eina_shutdown();
_mempool_shutdown();
void eina_bench_quadtree(Eina_Benchmark *bench);
void eina_bench_promise(Eina_Benchmark *bench);
-/* Specific benchmark. */
-void eina_bench_e17(void);
-
#endif
+++ /dev/null
-/* EINA - EFL data type library
- * Copyright (C) 2008 Cedric Bail
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library;
- * if not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <time.h>
-
-#ifdef EINA_BENCH_HAVE_GLIB
-# include <glib.h>
-#endif
-
-#include "Evas_Data.h"
-#include "Ecore_Data.h"
-
-#include "eina_hash.h"
-#include "eina_array.h"
-#include "eina_bench.h"
-#include "eina_rbtree.h"
-#include "eina_convert.h"
-
-#ifdef CITYHASH_BENCH
-// Hash function for a byte array.
-uint64_t CityHash64(const char *buf, size_t len);
-
-static int
-city_hash(const char *buf, int len)
-{
- return (int)CityHash64(buf, len);
-}
-
-static unsigned int
-_eina_string_key_length(const char *key)
-{
- if (!key)
- return 0;
-
- return (int)strlen(key) + 1;
-}
-
-static int
-_eina_string_key_cmp(const char *key1, EINA_UNUSED int key1_length,
- const char *key2, EINA_UNUSED int key2_length)
-{
- return strcmp(key1, key2);
-}
-#endif
-
-
-typedef struct _Eina_Bench_Rbtree Eina_Bench_Rbtree;
-struct _Eina_Bench_Rbtree
-{
- Eina_Rbtree node;
- char key[10];
- int value;
-};
-
-static Eina_Rbtree_Direction
-_eina_bench_rbtree_cmp(const Eina_Bench_Rbtree *left,
- const Eina_Bench_Rbtree *right,
- EINA_UNUSED void *data)
-{
- if (!left)
- return EINA_RBTREE_RIGHT;
-
- if (!right)
- return EINA_RBTREE_LEFT;
-
- return strcmp(left->key,
- right->key) < 0 ? EINA_RBTREE_LEFT : EINA_RBTREE_RIGHT;
-}
-
-static inline int
-_eina_bench_rbtree_key(const Eina_Bench_Rbtree *node,
- const char *key,
- int length,
- EINA_UNUSED void *data)
-{
- return strncmp(node->key, key, length);
-}
-
-static void
-_eina_bench_rbtree_free(Eina_Rbtree *node, EINA_UNUSED void *data)
-{
- free(node);
-}
-
-static void
-eina_bench_lookup_rbtree(int request)
-{
- Eina_Rbtree *root = NULL;
- int i;
- int j;
-
- for (i = 0; i < request; ++i)
- {
- Eina_Bench_Rbtree *tmp;
-
- tmp = malloc(sizeof (Eina_Bench_Rbtree));
- if (!tmp)
- continue;
-
- tmp->value = i;
- eina_convert_itoa(i, tmp->key);
-
- root = eina_rbtree_inline_insert(root,
- &tmp->node,
- EINA_RBTREE_CMP_NODE_CB(
- _eina_bench_rbtree_cmp),
- NULL);
- }
-
- srand(time(NULL));
-
- for (j = 0; j < 200; ++j)
- for (i = 0; i < request; ++i)
- {
- Eina_Rbtree *tmp;
- char tmp_key[10];
-
- eina_convert_itoa(rand() % request, tmp_key);
-
- tmp = eina_rbtree_inline_lookup(root,
- tmp_key,
- 10,
- EINA_RBTREE_CMP_KEY_CB(
- _eina_bench_rbtree_key),
- NULL);
- /* Suppress warnings as we really don't want to do anything. */
- (void) tmp;
- }
-
- eina_rbtree_delete(root, EINA_RBTREE_FREE_CB(_eina_bench_rbtree_free), NULL);
-}
-
-static void
-eina_bench_lookup_murmur(int request)
-{
- Eina_Hash *hash = NULL;
- int *tmp_val;
- unsigned int i;
- unsigned int j;
-
- hash = eina_hash_new(EINA_KEY_LENGTH(_eina_string_key_length),
- EINA_KEY_CMP(_eina_string_key_cmp),
- EINA_KEY_HASH(eina_hash_murmur3),
- free,
- 8);
-
- for (i = 0; i < (unsigned int)request; ++i)
- {
- char tmp_key[10];
-
- tmp_val = malloc(sizeof (int));
-
- if (!tmp_val)
- continue;
-
- eina_convert_itoa(i, tmp_key);
- *tmp_val = i;
-
- eina_hash_add(hash, tmp_key, tmp_val);
- }
-
- srand(time(NULL));
-
- for (j = 0; j < 200; ++j)
- for (i = 0; i < (unsigned int)request; ++i)
- {
- char tmp_key[10];
-
- eina_convert_itoa(rand() % request, tmp_key);
- tmp_val = eina_hash_find(hash, tmp_key);
- }
-
- eina_hash_free(hash);
-}
-
-#ifdef CITYHASH_BENCH
-static void
-eina_bench_lookup_cityhash(int request)
-{
- Eina_Hash *hash = NULL;
- int *tmp_val;
- unsigned int i;
- unsigned int j;
-
- hash = eina_hash_new(EINA_KEY_LENGTH(_eina_string_key_length),
- EINA_KEY_CMP(_eina_string_key_cmp),
- EINA_KEY_HASH(city_hash),
- free,
- 8);
-
- for (i = 0; i < (unsigned int)request; ++i)
- {
- char tmp_key[10];
-
- tmp_val = malloc(sizeof (int));
-
- if (!tmp_val)
- continue;
-
- eina_convert_itoa(i, tmp_key);
- *tmp_val = i;
-
- eina_hash_add(hash, tmp_key, tmp_val);
- }
-
- srand(time(NULL));
-
- for (j = 0; j < 200; ++j)
- for (i = 0; i < (unsigned int)request; ++i)
- {
- char tmp_key[10];
-
- eina_convert_itoa(rand() % request, tmp_key);
- tmp_val = eina_hash_find(hash, tmp_key);
- }
-
- eina_hash_free(hash);
-}
-#endif
-
-static void
-eina_bench_lookup_superfast(int request)
-{
- Eina_Hash *hash = NULL;
- int *tmp_val;
- unsigned int i;
- unsigned int j;
-
- hash = eina_hash_string_superfast_new(free);
-
- for (i = 0; i < (unsigned int)request; ++i)
- {
- char tmp_key[10];
-
- tmp_val = malloc(sizeof (int));
-
- if (!tmp_val)
- continue;
-
- eina_convert_itoa(i, tmp_key);
- *tmp_val = i;
-
- eina_hash_add(hash, tmp_key, tmp_val);
- }
-
- srand(time(NULL));
-
- for (j = 0; j < 200; ++j)
- for (i = 0; i < (unsigned int)request; ++i)
- {
- char tmp_key[10];
-
- eina_convert_itoa(rand() % request, tmp_key);
- tmp_val = eina_hash_find(hash, tmp_key);
- }
-
- eina_hash_free(hash);
-}
-
-static void
-eina_bench_lookup_djb2(int request)
-{
- Eina_Hash *hash = NULL;
- int *tmp_val;
- unsigned int i;
- unsigned int j;
-
- hash = eina_hash_string_djb2_new(free);
-
- for (i = 0; i < (unsigned int)request; ++i)
- {
- char tmp_key[10];
-
- tmp_val = malloc(sizeof (int));
-
- if (!tmp_val)
- continue;
-
- eina_convert_itoa(i, tmp_key);
- *tmp_val = i;
-
- eina_hash_add(hash, tmp_key, tmp_val);
- }
-
- srand(time(NULL));
-
- for (j = 0; j < 200; ++j)
- for (i = 0; i < (unsigned int)request; ++i)
- {
- char tmp_key[10];
-
- eina_convert_itoa(rand() % request, tmp_key);
-
- tmp_val = eina_hash_find(hash, tmp_key);
- }
-
- eina_hash_free(hash);
-}
-
-typedef struct _Eina_Bench_DJB2 Eina_Bench_DJB2;
-struct _Eina_Bench_DJB2
-{
- char *key;
- int value;
-};
-
-static void
-eina_bench_lookup_djb2_inline(int request)
-{
- Eina_Hash *hash = NULL;
- Eina_Bench_DJB2 *elm;
- unsigned int i;
- unsigned int j;
-
- hash = eina_hash_string_djb2_new(free);
-
- for (i = 0; i < (unsigned int)request; ++i)
- {
- int length;
-
- elm = malloc(sizeof (Eina_Bench_DJB2) + 10);
- if (!elm)
- continue;
-
- elm->key = (char *)(elm + 1);
-
- length = eina_convert_itoa(i, elm->key) + 1;
- elm->value = i;
-
- eina_hash_direct_add_by_hash(hash, elm->key, length,
- eina_hash_djb2(elm->key, length), elm);
- }
-
- srand(time(NULL));
-
- for (j = 0; j < 200; ++j)
- for (i = 0; i < (unsigned int)request; ++i)
- {
- char tmp_key[10];
- int length = eina_convert_itoa(rand() % request, tmp_key) + 1;
-
- elm =
- eina_hash_find_by_hash(hash, tmp_key, length,
- eina_hash_djb2(tmp_key, length));
- }
-
- eina_hash_free(hash);
-}
-
-#ifdef EINA_BENCH_HAVE_GLIB
-typedef struct _Eina_Bench_Glib Eina_Bench_Glib;
-struct _Eina_Bench_Glib
-{
- char *key;
- int value;
-};
-
-static void
-eina_bench_lookup_ghash(int request)
-{
- Eina_Bench_Glib *elm;
- GHashTable *hash;
- unsigned int i;
- unsigned int j;
-
- hash = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, free);
-
- for (i = 0; i < (unsigned int)request; ++i)
- {
- elm = malloc(sizeof (Eina_Bench_Glib) + 10);
- if (!elm)
- continue;
-
- elm->key = (char *)(elm + 1);
-
- eina_convert_itoa(i, elm->key);
- elm->value = i;
-
- g_hash_table_insert(hash, elm->key, elm);
- }
-
- srand(time(NULL));
-
- for (j = 0; j < 200; ++j)
- for (i = 0; i < (unsigned int)request; ++i)
- {
- char tmp_key[10];
-
- eina_convert_itoa(rand() % request, tmp_key);
-
- elm = g_hash_table_lookup(hash, tmp_key);
- }
-
- g_hash_table_destroy(hash);
-}
-#endif
-
-static void
-eina_bench_lookup_evas(int request)
-{
- Evas_Hash *hash = NULL;
- Eina_Array *array = NULL;
- int *tmp_val;
- Eina_Array_Iterator it;
- unsigned int i;
- unsigned int j;
-
- array = eina_array_new(10000);
-
- for (i = 0; i < (unsigned int)request; ++i)
- {
- char tmp_key[10];
-
- tmp_val = malloc(sizeof (int));
-
- if (!tmp_val)
- continue;
-
- eina_convert_itoa(i, tmp_key);
- *tmp_val = i;
-
- hash = evas_hash_add(hash, tmp_key, tmp_val);
-
- eina_array_push(array, tmp_val);
- }
-
- srand(time(NULL));
-
- for (j = 0; j < 200; ++j)
- for (i = 0; i < (unsigned int)request; ++i)
- {
- char tmp_key[10];
-
- eina_convert_itoa(rand() % request, tmp_key);
-
- tmp_val = evas_hash_find(hash, tmp_key);
- }
-
- evas_hash_free(hash);
-
- EINA_ARRAY_ITER_NEXT(array, i, tmp_val, it)
- free(tmp_val);
-
- eina_array_free(array);
-}
-
-typedef struct _Eina_Bench_Ecore Eina_Bench_Ecore;
-struct _Eina_Bench_Ecore
-{
- char *key;
- int value;
-};
-
-static void
-eina_bench_lookup_ecore(int request)
-{
- Ecore_Hash *hash = NULL;
- Eina_Bench_Ecore *elm;
- unsigned int i;
- unsigned int j;
-
- hash = ecore_hash_new(ecore_str_hash, ecore_str_compare);
-
- ecore_hash_free_key_cb_set(hash, NULL);
- ecore_hash_free_value_cb_set(hash, free);
-
- for (i = 0; i < (unsigned int)request; ++i)
- {
- elm = malloc(sizeof (Eina_Bench_Ecore) + 10);
- if (!elm)
- continue;
-
- elm->key = (char *)(elm + 1);
- eina_convert_itoa(i, elm->key);
- elm->value = i;
-
- ecore_hash_set(hash, elm->key, elm);
- }
-
- srand(time(NULL));
-
- for (j = 0; j < 200; ++j)
- for (i = 0; i < (unsigned int)request; ++i)
- {
- char tmp_key[10];
-
- eina_convert_itoa(rand() % request, tmp_key);
-
- elm = ecore_hash_get(hash, tmp_key);
- }
-
- ecore_hash_destroy(hash);
-}
-
-void eina_bench_hash(Eina_Benchmark *bench)
-{
- eina_benchmark_register(bench, "superfast-lookup",
- EINA_BENCHMARK(
- eina_bench_lookup_superfast), 10, 10000, 10);
- eina_benchmark_register(bench, "djb2-lookup",
- EINA_BENCHMARK(
- eina_bench_lookup_djb2), 10, 10000, 10);
- eina_benchmark_register(bench, "djb2-lookup-inline",
- EINA_BENCHMARK(
- eina_bench_lookup_djb2_inline), 10, 10000, 10);
- eina_benchmark_register(bench, "murmur",
- EINA_BENCHMARK(
- eina_bench_lookup_murmur), 10, 10000, 10);
-#ifdef CITYHASH_BENCH
- eina_benchmark_register(bench, "cityhash",
- EINA_BENCHMARK(
- eina_bench_lookup_cityhash), 10, 10000, 10);
-#endif
- eina_benchmark_register(bench, "rbtree",
- EINA_BENCHMARK(
- eina_bench_lookup_rbtree), 10, 10000, 10);
-#ifdef EINA_BENCH_HAVE_GLIB
- eina_benchmark_register(bench, "ghash-lookup",
- EINA_BENCHMARK(
- eina_bench_lookup_ghash), 10, 10000, 10);
-#endif
- eina_benchmark_register(bench, "evas-lookup",
- EINA_BENCHMARK(
- eina_bench_lookup_evas), 10, 10000, 10);
- eina_benchmark_register(bench, "ecore-lookup",
- EINA_BENCHMARK(
- eina_bench_lookup_ecore), 10, 10000, 10);
-
-}
unsigned int j;
int i;
- ecore_string_init();
+ //ecore_string_init();
for (i = 0; i < request; ++i)
{
char build[64] = "string_";
eina_convert_xtoa(i, build + 7);
- tmp = ecore_string_instance(build);
+ //tmp = ecore_string_instance(build);
}
srand(time(NULL));
char build[64] = "string_";
eina_convert_xtoa(rand() % request, build + 7);
- tmp = ecore_string_instance(build);
+ //tmp = ecore_string_instance(build);
}
/* Suppress warnings as we really don't want to do anything. */
(void) tmp;
- ecore_string_shutdown();
+ //ecore_string_shutdown();
}
void eina_bench_stringshare(Eina_Benchmark *bench)
+++ /dev/null
-/* EINA - EFL data type library
- * Copyright (C) 2008 Cedric Bail
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library;
- * if not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <time.h>
-
-#ifdef EINA_BENCH_HAVE_GLIB
-# include <glib.h>
-#endif
-
-#include "Evas_Data.h"
-#include "Ecore_Data.h"
-
-#include "Eina.h"
-
-#if EINA_ENABLE_BENCH_E17
-
-typedef struct _Eina_Stringshare_Test Eina_Stringshare_Test;
-struct _Eina_Stringshare_Test
-{
- const char *name;
-
- int (*init)(void);
- const char *(*add)(const char *str);
- void (*del)(const char *str);
- int (*shutdown)(void);
-};
-
-static Eina_Stringshare_Test eina_str = {
- "eina",
- eina_init,
- eina_stringshare_add,
- eina_stringshare_del,
- eina_shutdown
-};
-
-static Eina_Stringshare_Test evas_str = {
- "evas",
- NULL,
- evas_stringshare_add,
- evas_stringshare_del,
- NULL
-};
-
-static Eina_Stringshare_Test ecore_str = {
- "ecore",
- ecore_string_init,
- ecore_string_instance,
- ecore_string_release,
- ecore_string_shutdown
-};
-
-static Eina_Stringshare_Test *tests[] = {
- &eina_str,
- &evas_str,
- &ecore_str,
- NULL
-};
-
-static void
-eina_bench_e17_stringshare(Eina_Stringshare_Test *str)
-{
- Eina_Counter *cnt;
- char *result;
-
- cnt = eina_counter_new(str->name);
-
- eina_counter_start(cnt);
-
- if (str->init)
- str->init();
-
-//#include "strlog"
-
- if (str->shutdown)
- str->shutdown();
-
- eina_counter_stop(cnt, 1);
-
- result = eina_counter_dump(cnt);
- fprintf(stderr, "For `%s`:\n%s\n", str->name, result);
- free(result);
-
- eina_counter_free(cnt);
-}
-#endif
-
-void
-eina_bench_e17(void)
-{
-#if EINA_ENABLE_BENCH_E17
- int i;
-
- eina_init();
-
- for (i = 0; tests[i]; ++i)
- eina_bench_e17_stringshare(tests[i]);
-
- eina_shutdown();
-#endif
-}
eina_bench_src = files(
'eina_bench.c',
'eina_bench_sort.c',
-'eina_bench_hash.c',
'eina_bench_crc_hash.c',
'eina_bench_stringshare.c',
'eina_bench_convert.c',
'eina_bench_mempool.c',
-'eina_bench_stringshare_e17.c',
'eina_bench_array.c',
'eina_bench_rectangle_pool.c',
'ecore_list.c',
-'ecore_strings.c',
-'ecore_hash.c',
'ecore_sheap.c',
'evas_hash.c',
'evas_list.c',