Package hash table creation is now handled from hash.d

This commit is contained in:
Juan Jose Garcia Ripoll 2010-01-20 15:15:55 +01:00
parent d1521c1bcd
commit 44efbeb285
2 changed files with 20 additions and 21 deletions

View file

@ -568,20 +568,30 @@ cl__make_hash_table(cl_object test, cl_object size, cl_object rehash_size,
int htt;
cl_index hsize;
cl_object h;
struct ecl_hashtable_entry *(*get)(cl_object, cl_object);
void (*set)(cl_object, cl_object, cl_object);
/*
* Argument checking
*/
if (test == @'eq' || test == SYM_FUN(@'eq'))
if (test == @'eq' || test == SYM_FUN(@'eq')) {
htt = htt_eq;
else if (test == @'eql' || test == SYM_FUN(@'eql'))
get = _ecl_gethash_eq;
} else if (test == @'eql' || test == SYM_FUN(@'eql')) {
htt = htt_eql;
else if (test == @'equal' || test == SYM_FUN(@'equal'))
get = _ecl_gethash_eql;
} else if (test == @'equal' || test == SYM_FUN(@'equal')) {
htt = htt_equal;
else if (test == @'equalp' || test == SYM_FUN(@'equalp'))
get = _ecl_gethash_equal;
} else if (test == @'equalp' || test == SYM_FUN(@'equalp')) {
htt = htt_equalp;
else
get = _ecl_gethash_equalp;
} else if (test == @'package') {
htt = htt_pack;
get = _ecl_gethash_pack;
} else {
FEerror("~S is an illegal hash-table test function.",
1, test);
}
hsize = ecl_fixnum_in_range(@'make-hash-table',"size",size,0,ATOTLIM);;
if (hsize < 16) {
hsize = 16;

View file

@ -113,22 +113,11 @@ symbol_add_package(cl_object s, cl_object p)
static cl_object
make_package_hashtable()
{
cl_object h;
cl_index hsize = 128;
h = ecl_alloc_object(t_hashtable);
#ifdef ECL_THREADS
h->hash.lock = Cnil;
#endif
h->hash.test = htt_pack;
h->hash.size = hsize;
h->hash.rehash_size = ecl_make_singlefloat(1.5f);
h->hash.threshold = ecl_make_singlefloat(0.75f);
h->hash.factor = 0.7;
h->hash.entries = 0;
h->hash.data = NULL; /* for GC sake */
h->hash.data = (struct ecl_hashtable_entry *)ecl_alloc(hsize * sizeof(struct ecl_hashtable_entry));
return cl_clrhash(h);
return cl__make_hash_table(@'package', /* package hash table */
MAKE_FIXNUM(128), /* initial size */
ecl_make_singlefloat(1.5f), /* rehash size */
ecl_make_singlefloat(0.75f), /* rehash threshold */
Cnil); /* lockable */
}
cl_object