From d4cbf950029c99d37ad2f4369d1782f3a9a3dc98 Mon Sep 17 00:00:00 2001 From: nobu Date: Sat, 1 Sep 2007 02:14:40 +0000 Subject: [PATCH] * 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. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13326 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 10 ++++++++ include/ruby/st.h | 61 ++++++++++++++++++++++++++++------------------- st.c | 6 ++--- version.h | 8 +++---- 4 files changed, 54 insertions(+), 31 deletions(-) diff --git a/ChangeLog b/ChangeLog index 59309c73b6..88de32cd48 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +Sat Sep 1 11:14:38 2007 Nobuyoshi Nakada + + * 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 * numeric.c (SQRT_LONG_MAX): use SIZEOF_LONG instead of SIZEOF_VALUE diff --git a/include/ruby/st.h b/include/ruby/st.h index 728159121e..7702c7a8e9 100644 --- a/include/ruby/st.h +++ b/include/ruby/st.h @@ -17,31 +17,17 @@ typedef unsigned long st_data_t; #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 -typedef struct st_table st_table; - -struct st_hash_type { - int (*compare)(); - int (*hash)(); -}; - -struct st_table { - const struct st_hash_type *type; - unsigned int entries_packed : 1; - int num_bins : sizeof(int) * 8 - 1; - int num_entries; - struct st_table_entry **bins; - struct st_table_entry *head; -}; - -#define st_is_member(table,key) st_lookup(table,key,(st_data_t *)0) - -enum st_retval {ST_CONTINUE, ST_STOP, ST_DELETE, ST_CHECK}; - +#ifndef CHAR_BIT +# ifdef HAVE_LIMITS_H +# include +# else +# define CHAR_BIT 8 +# endif +#endif #ifndef _ # define _(args) args #endif @@ -53,6 +39,33 @@ enum st_retval {ST_CONTINUE, ST_STOP, ST_DELETE, ST_CHECK}; # 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)(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; + 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; +}; + +#define st_is_member(table,key) st_lookup(table,key,(st_data_t *)0) + +enum st_retval {ST_CONTINUE, ST_STOP, ST_DELETE, ST_CHECK}; + 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_free_table(st_table *); 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 diff --git a/st.c b/st.c index 9cf6ba204f..4c5d87a173 100644 --- a/st.c +++ b/st.c @@ -815,13 +815,13 @@ strhash(register const char *string) } 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; } diff --git a/version.h b/version.h index 4c0c84ea8b..00d997831c 100644 --- a/version.h +++ b/version.h @@ -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[];