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