[前][次][番号順一覧][スレッド一覧]

ruby-changes:23122

From: nobu <ko1@a...>
Date: Thu, 29 Mar 2012 23:51:45 +0900 (JST)
Subject: [ruby-changes:23122] nobu:r35172 (trunk): * st.c (st_update): pass pointer to key to the callback function.

nobu	2012-03-29 23:50:20 +0900 (Thu, 29 Mar 2012)

  New Revision: 35172

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=35172

  Log:
    * st.c (st_update): pass pointer to key to the callback function.

  Modified files:
    trunk/ChangeLog
    trunk/ext/-test-/st/numhash/numhash.c
    trunk/ext/-test-/st/update/update.c
    trunk/gc.c
    trunk/include/ruby/st.h
    trunk/load.c
    trunk/st.c

Index: include/ruby/st.h
===================================================================
--- include/ruby/st.h	(revision 35171)
+++ include/ruby/st.h	(revision 35172)
@@ -121,7 +121,7 @@
 int st_insert2(st_table *, st_data_t, st_data_t, st_data_t (*)(st_data_t));
 int st_lookup(st_table *, st_data_t, st_data_t *);
 int st_get_key(st_table *, st_data_t, st_data_t *);
-typedef int st_update_callback_func(st_data_t key, st_data_t *value, st_data_t arg, int existing);
+typedef int st_update_callback_func(st_data_t *key, st_data_t *value, st_data_t arg, int existing);
 int st_update(st_table *table, st_data_t key, st_update_callback_func *func, st_data_t arg);
 int st_foreach(st_table *, int (*)(ANYARGS), st_data_t);
 int st_foreach_check(st_table *, int (*)(ANYARGS), st_data_t, st_data_t);
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 35171)
+++ ChangeLog	(revision 35172)
@@ -1,3 +1,7 @@
+Thu Mar 29 23:50:15 2012  Nobuyoshi Nakada  <nobu@r...>
+
+	* st.c (st_update): pass pointer to key to the callback function.
+
 Thu Mar 29 16:36:10 2012  Nobuyoshi Nakada  <nobu@r...>
 
 	* st.c (st_update): add existing parameter to the callback function.
Index: load.c
===================================================================
--- load.c	(revision 35171)
+++ load.c	(revision 35172)
@@ -417,7 +417,7 @@
 }
 
 static int
-release_barrier(st_data_t key, st_data_t *value, st_data_t done, int existing)
+release_barrier(st_data_t *key, st_data_t *value, st_data_t done, int existing)
 {
     VALUE barrier = (VALUE)*value;
     if (!existing) return ST_STOP;
@@ -425,7 +425,7 @@
 	/* still in-use */
 	return ST_CONTINUE;
     }
-    xfree((char *)key);
+    xfree((char *)*key);
     return ST_DELETE;
 }
 
Index: st.c
===================================================================
--- st.c	(revision 35171)
+++ st.c	(revision 35172)
@@ -841,7 +841,7 @@
 	    existing = 1;
 	}
 	{
-	    retval = (*func)(key, &value, arg, existing);
+	    retval = (*func)(&key, &value, arg, existing);
 	    if (!table->entries_packed) {
 		FIND_ENTRY(table, ptr, hash_val, bin_pos);
 		goto unpacked;
@@ -869,7 +869,7 @@
 	existing = 1;
     }
     {
-	retval = (*func)(ptr->key, &value, arg, existing);
+	retval = (*func)(&key, &value, arg, existing);
       unpacked:
 	switch (retval) {
 	  case ST_CONTINUE:
Index: gc.c
===================================================================
--- gc.c	(revision 35171)
+++ gc.c	(revision 35172)
@@ -3672,10 +3672,11 @@
 }
 
 static int
-wmap_final_func(st_data_t key, st_data_t *value, st_data_t arg, int existing)
+wmap_final_func(st_data_t *key, st_data_t *value, st_data_t arg, int existing)
 {
-    VALUE obj = (VALUE)key, ary = (VALUE)*value;
+    VALUE obj, ary;
     if (!existing) return ST_STOP;
+    obj = (VALUE)*key, ary = (VALUE)*value;
     rb_ary_delete(ary, obj);
     if (!RARRAY_LEN(ary)) return ST_DELETE;
     return ST_CONTINUE;
Index: ext/-test-/st/update/update.c
===================================================================
--- ext/-test-/st/update/update.c	(revision 35171)
+++ ext/-test-/st/update/update.c	(revision 35172)
@@ -2,9 +2,9 @@
 #include <ruby/st.h>
 
 static int
-update_func(st_data_t key, st_data_t *value, st_data_t arg, int existing)
+update_func(st_data_t *key, st_data_t *value, st_data_t arg, int existing)
 {
-    VALUE ret = rb_yield_values(existing ? 2 : 1, (VALUE)key, (VALUE)*value);
+    VALUE ret = rb_yield_values(existing ? 2 : 1, (VALUE)*key, (VALUE)*value);
     switch (ret) {
       case Qfalse:
 	return ST_STOP;
Index: ext/-test-/st/numhash/numhash.c
===================================================================
--- ext/-test-/st/numhash/numhash.c	(revision 35171)
+++ ext/-test-/st/numhash/numhash.c	(revision 35172)
@@ -60,9 +60,9 @@
 }
 
 static int
-update_func(st_data_t key, st_data_t *value, st_data_t arg)
+update_func(st_data_t *key, st_data_t *value, st_data_t arg, int existing)
 {
-    VALUE ret = rb_yield_values(2, (VALUE)key, (VALUE)*value);
+    VALUE ret = rb_yield_values(existing ? 2 : 1, (VALUE)*key, (VALUE)*value);
     switch (ret) {
       case Qfalse:
 	return ST_STOP;

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]