From 44efbeb28583c68e034094376b37272daa8837e4 Mon Sep 17 00:00:00 2001 From: Juan Jose Garcia Ripoll Date: Wed, 20 Jan 2010 15:15:55 +0100 Subject: [PATCH] Package hash table creation is now handled from hash.d --- src/c/hash.d | 20 +++++++++++++++----- src/c/package.d | 21 +++++---------------- 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/src/c/hash.d b/src/c/hash.d index 6b9502591..204a29c2c 100644 --- a/src/c/hash.d +++ b/src/c/hash.d @@ -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; diff --git a/src/c/package.d b/src/c/package.d index 4d9e82243..297cecd4b 100644 --- a/src/c/package.d +++ b/src/c/package.d @@ -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