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

ruby-changes:1835

From: ko1@a...
Date: 1 Sep 2007 11:14:51 +0900
Subject: [ruby-changes:1835] nobu - Ruby:r13326 (trunk): * st.c (st_numcmp, st_numhash): use st_data_t instead of long, because

nobu	2007-09-01 11:14:40 +0900 (Sat, 01 Sep 2007)

  New Revision: 13326

  Modified files:
    trunk/ChangeLog
    trunk/include/ruby/st.h
    trunk/st.c
    trunk/version.h

  Log:
    * st.c (st_numcmp, st_numhash): use st_data_t instead of long, because
      the former may be larger than the latter.
    
    * include/ruby/st.h (CHAR_BIT): get rid of magic number.
    
    * include/ruby/st.h (struct st_table): num_entries never exceed
      num_bins.


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/version.h?r1=13326&r2=13325
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/include/ruby/st.h?r1=13326&r2=13325
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=13326&r2=13325
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/st.c?r1=13326&r2=13325

Index: include/ruby/st.h
===================================================================
--- include/ruby/st.h	(revision 13325)
+++ include/ruby/st.h	(revision 13326)
@@ -17,23 +17,47 @@
 #elif SIZEOF_LONG_LONG == SIZEOF_VOIDP
 typedef unsigned LONG_LONG st_data_t;
 #else
-# error ---->> st.c requires sizeof(void*) == sizeof(long) to be compiled. <<---
--
+# error ---->> st.c requires sizeof(void*) == sizeof(long) to be compiled. <<----
 #endif
 #define ST_DATA_T_DEFINED
 
+#ifndef CHAR_BIT
+# ifdef HAVE_LIMITS_H
+#  include <limits.h>
+# else
+#  define CHAR_BIT 8
+# endif
+#endif
+#ifndef _
+# define _(args) args
+#endif
+#ifndef ANYARGS
+# ifdef __cplusplus
+#   define ANYARGS ...
+# else
+#   define ANYARGS
+# endif
+#endif
+
 typedef struct st_table st_table;
 
+typedef int st_compare_func(st_data_t, st_data_t);
+typedef int st_hash_func(st_data_t);
+
 struct st_hash_type {
-    int (*compare)();
-    int (*hash)();
+    int (*compare)(ANYARGS /*st_data_t, st_data_t*/); /* st_compare_func* */
+    int (*hash)(ANYARGS /*st_data_t*/);               /* st_hash_func* */
 };
 
+typedef unsigned int st_index_t;
+#define ST_INDEX_BITS (sizeof(st_index_t) * CHAR_BIT - 1)
+
 struct st_table {
     const struct st_hash_type *type;
     unsigned int entries_packed : 1;
-    int num_bins : sizeof(int) * 8 - 1;
-    int num_entries;
+    st_index_t num_bins : ST_INDEX_BITS;
+    unsigned int st_dummy_bit : 1;
+    st_index_t num_entries : ST_INDEX_BITS;
     struct st_table_entry **bins;
     struct st_table_entry *head;
 };
@@ -42,17 +66,6 @@
 
 enum st_retval {ST_CONTINUE, ST_STOP, ST_DELETE, ST_CHECK};
 
-#ifndef _
-# define _(args) args
-#endif
-#ifndef ANYARGS
-# ifdef __cplusplus
-#   define ANYARGS ...
-# else
-#   define ANYARGS
-# endif
-#endif
-
 st_table *st_init_table(const struct st_hash_type *);
 st_table *st_init_table_with_size(const struct st_hash_type *, int);
 st_table *st_init_numtable(void);
@@ -70,8 +83,8 @@
 void st_cleanup_safe(st_table *, st_data_t);
 void st_clear(st_table *);
 st_table *st_copy(st_table *);
-int st_numcmp(long, long);
-int st_numhash(long);
+int st_numcmp(st_data_t, st_data_t);
+int st_numhash(st_data_t);
 
 #if defined(__cplusplus)
 #if 0
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 13325)
+++ ChangeLog	(revision 13326)
@@ -1,3 +1,13 @@
+Sat Sep  1 11:14:38 2007  Nobuyoshi Nakada  <nobu@r...>
+
+	* st.c (st_numcmp, st_numhash): use st_data_t instead of long, because
+	  the former may be larger than the latter.
+
+	* include/ruby/st.h (CHAR_BIT): get rid of magic number.
+
+	* include/ruby/st.h (struct st_table): num_entries never exceed
+	  num_bins.
+
 Fri Aug 31 07:12:24 2007  NAKAMURA Usaku  <usa@r...>
 
 	* numeric.c (SQRT_LONG_MAX): use SIZEOF_LONG instead of SIZEOF_VALUE
Index: st.c
===================================================================
--- st.c	(revision 13325)
+++ st.c	(revision 13326)
@@ -815,13 +815,13 @@
 }
 
 int
-st_numcmp(long x, long y)
+st_numcmp(st_data_t x, st_data_t y)
 {
     return x != y;
 }
 
 int
-st_numhash(long n)
+st_numhash(st_data_t n)
 {
-    return n;
+    return (int)n;
 }
Index: version.h
===================================================================
--- version.h	(revision 13325)
+++ version.h	(revision 13326)
@@ -1,15 +1,15 @@
 #define RUBY_VERSION "1.9.0"
-#define RUBY_RELEASE_DATE "2007-08-31"
+#define RUBY_RELEASE_DATE "2007-09-01"
 #define RUBY_VERSION_CODE 190
-#define RUBY_RELEASE_CODE 20070831
+#define RUBY_RELEASE_CODE 20070901
 #define RUBY_PATCHLEVEL 0
 
 #define RUBY_VERSION_MAJOR 1
 #define RUBY_VERSION_MINOR 9
 #define RUBY_VERSION_TEENY 0
 #define RUBY_RELEASE_YEAR 2007
-#define RUBY_RELEASE_MONTH 8
-#define RUBY_RELEASE_DAY 31
+#define RUBY_RELEASE_MONTH 9
+#define RUBY_RELEASE_DAY 1
 
 #ifdef RUBY_EXTERN
 RUBY_EXTERN const char ruby_version[];

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

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