Граф коммитов

23 Коммитов

Автор SHA1 Сообщение Дата
ko1 4c2d014e92 swithc id_table data structure.
* id_table.c: swtich to "simple open addressing with quadratic probing"
  by Yura Sokolov.  For more detail measurements, see [Feature #12180]
* id_table.c: remove other algorithms to simplify the source code.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57416 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-01-25 03:03:52 +00:00
nobu 00ed779cb0 id_table.c: fix typo
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57369 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-01-19 05:24:34 +00:00
nobu dfe1d4fda6 id_table.c: extend, don't shrink
* id_table.c (hash_table_extend): should not shrink the table than
  the previous capacity.  [ruby-core:76534] [Bug #12614]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55896 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-08-14 13:35:42 +00:00
nobu a62dcd947c id_table.h: dummy sentinel
* id_table.h (rb_id_table_iterator_result): add dummy sentinel
  member because C standard prohibits a trailing comma.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55821 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-08-06 00:35:33 +00:00
ngoto 02cafdf491 capa should be even number on 64-bit SPARC for 8-byte word alignment
* id_table.c (list_id_table_init): When unaligned word access is
  prohibited and sizeof(VALUE) is 8 (64-bit machines),
  capa should always be even number for 8-byte word alignment
  of the values of a table. This code assumes that sizeof(ID) is 4,
  sizeof(VALUE) is 8, and xmalloc() returns 8-byte aligned memory.
  This fixes bus error on 64-bit SPARC Solaris 10.
  [Bug #12406][ruby-dev:49631]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55086 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-05-20 14:55:23 +00:00
nobu 439224a590 RUBY_ASSERT
* error.c (rb_assert_failure): assertion with stack dump.
* ruby_assert.h (RUBY_ASSERT): new header for the assertion.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53615 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-01-22 08:33:55 +00:00
normal b147b5a3b8 id_table: const correctness for _size and _memsize
This allows us to swap in rb_id_table_memsize for st_memsize
(which takes a "const st_table *") more easily.

It also makes sense to do the same for rb_id_table_size,
too; as the table cannot be altered when accessing size.

* id_table.h (rb_id_table_size): const arg
  (rb_id_table_memsize): ditto
* id_table.c (st_id_table_size): ditto
  (st_id_table_memsize): ditto
  (list_id_table_size): ditto
  (list_id_table_memsize): ditto
  (hash_id_table_size): ditto
  (hash_id_table_memsize): ditto
  (mix_id_table_size): ditto
  (mix_id_table_memsize): ditto

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52428 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-02 22:18:32 +00:00
ko1 840e6b6307 * id_table.c (mix_id_table_insert): do not touch list during
list->hash transition because GC can run during transition.




git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52421 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-01 08:17:25 +00:00
nobu 7f13f878cf id_table.c: fix prototype names
* id_table.c: fix prototype names, missing underscore prefixes.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51950 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-09-27 00:23:18 +00:00
nobu 33ed298379 id_table.c: fix prototype names
* id_table.c: fix prototype names, missing underscore prefixes.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51949 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-09-27 00:17:53 +00:00
nobu 6b64ffd225 id_table.c: suppress warnings
* id_table.c (UNUSED): mark implementation functions maybe-unused
  to suppress warnings by old gcc.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51948 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-09-27 00:10:47 +00:00
hsbt 1bbe442f80 * id_table.c: fix typo. [ci skip][fix GH-1031] Patch @davydovanton
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51932 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-09-25 00:47:17 +00:00
nobu 80e386e92c id_table.c: fix types
* id_table.c (insert_into_chain, insert_into_main): fix argument
  types in prototype declarations.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51884 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-09-17 01:01:39 +00:00
nobu a3b9b9870e id_table.c: aliases
* id_table.c (IMPL_TYPE, IMPL_VOID): make aliases if supported on
  the platform.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51683 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-08-26 01:20:31 +00:00
nobu 38cfb957dd id_table.h: callback function types
* id_table.h (rb_id_table_foreach_func_t): define callback
  function type for rb_id_table_foreach().

* id_table.h (rb_id_table_foreach_values_func_t): ditto for
  rb_id_table_foreach_values().

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51682 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-08-26 00:47:10 +00:00
nobu 86fd28d11e id_table.c: adjust indent
* id_table.c (list_table_extend, fix_empty): adjust indent.
  (hash_id_table_foreach_values): ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51681 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-08-26 00:46:58 +00:00
nobu f92ed1943c id_table.c: constify
* id_table.c (find_empty): constify static data.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51680 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-08-26 00:46:34 +00:00
nobu 341c84ed22 id_table.c: fix for C89 compilers
* id_table.c (list_table_extend, hash_table_extend): remove C99
  features.  [ruby-dev:49239] [Bug #11487]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51678 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-08-26 00:26:02 +00:00
nobu 235e7738d6 id_table.c: TOKEN_PASTE
* id_table.c (IMPL1): use TOKEN_PASTE, and prevent `op' from
  expansion.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51562 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-08-13 04:41:54 +00:00
nobu 2c3b813bd3 id_table.c: prefix first
* id_table.c (IMPL): prepend id_table to the argument before its
  expansion.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51550 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-08-12 13:20:21 +00:00
ko1 1761312577 * id_table.c: IMPL() macro accept op as _opname instead of opname
because jemalloc seems to replace the word `free' to `je_free'.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51549 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-08-12 12:59:29 +00:00
ko1 e514914919 * id_table.c (mix_id_table_insert): fix memory leak.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51548 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-08-12 12:51:56 +00:00
ko1 c35ff11ae5 * id_table.h: introduce ID key table.
[Feature #11420]
  This table only manage ID->VALUE table to reduce overhead of st.
  Some functions prefixed rb_id_table_* are provided.
* id_table.c: implement rb_id_table_*.
  There are several algorithms to implement it.
  Now, there are roughly 4 types:
    * st
    * array
    * hash (implemented by  Yura Sokolov)
    * mix of array and hash
  The macro ID_TABLE_IMPL can choose implementation.
  You can see detailes about them at the head of id_table.c.
  At the default, I choose 34 (mix of list and hash).
  This is not final decision.
  Please report your suitable parameters or
  your data structure.
  * symbol.c: introduce rb_id_serial_t and rb_id_to_serial()
    to represent ID by serial number.
  * internal.h: use id_table for method tables.
  * class.c, gc.c, marshal.c, vm.c, vm_method.c: ditto.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51541 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-08-12 08:43:55 +00:00