Diff for /gforth/hash.fs between versions 1.29 and 1.38

version 1.29, 2002/11/24 19:49:45 version 1.38, 2009/12/06 23:00:03
Line 1 Line 1
 \ Hashed dictionaries                                  15jul94py  \ Hashed dictionaries                                  15jul94py
   
 \ Copyright (C) 1995,1998,2000 Free Software Foundation, Inc.  \ Copyright (C) 1995,1998,2000,2003,2006,2007 Free Software Foundation, Inc.
   
 \ This file is part of Gforth.  \ This file is part of Gforth.
   
 \ Gforth is free software; you can redistribute it and/or  \ Gforth is free software; you can redistribute it and/or
 \ modify it under the terms of the GNU General Public License  \ modify it under the terms of the GNU General Public License
 \ as published by the Free Software Foundation; either version 2  \ as published by the Free Software Foundation, either version 3
 \ of the License, or (at your option) any later version.  \ of the License, or (at your option) any later version.
   
 \ This program is distributed in the hope that it will be useful,  \ This program is distributed in the hope that it will be useful,
Line 15 Line 15
 \ GNU General Public License for more details.  \ GNU General Public License for more details.
   
 \ You should have received a copy of the GNU General Public License  \ You should have received a copy of the GNU General Public License
 \ along with this program; if not, write to the Free Software  \ along with this program. If not, see http://www.gnu.org/licenses/.
 \ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.  
   
 [IFUNDEF] erase  [IFUNDEF] erase
 : erase ( addr len -- ) 0 fill ;  : erase ( addr len -- ) 0 fill ;
Line 166  const Create (hashsearch-map) Line 165  const Create (hashsearch-map)
   [ [IFUNDEF] allocate ]    [ [IFUNDEF] allocate ]
   ABORT" no more space in hashtable"    ABORT" no more space in hashtable"
   [ [ELSE] ]    [ [ELSE] ]
   HashPop @ 1 hashbits lshift >= or    HashPop @ hashlen 2* >= or
   IF  hashdouble  THEN     IF  hashdouble  THEN 
   [ [THEN] ] ; is hash-alloc    [ [THEN] ] ; is hash-alloc
   
Line 193  has? cross 0= Line 192  has? cross 0=
 \  REPEAT  drop   \  REPEAT  drop 
 [ has? ec [IF] ] ." Done" cr [ [THEN] ] ;  [ has? ec [IF] ] ." Done" cr [ [THEN] ] ;
   
 ' hash-cold INIT8 chained  :noname ( -- )
       defers 'cold
       hash-cold
   ; is 'cold
   
 : .words  ( -- )  : .words  ( -- )
   base @ >r hex HashTable  Hashlen 0    base @ >r hex HashTable  Hashlen 0
Line 223  has? cross 0= Line 225  has? cross 0=
 \ : chisq ( -- n )  \ : chisq ( -- n )
 \     \ n should have about the same size as Hashlen  \     \ n should have about the same size as Hashlen
 \     countwl Hashlen 2 pick */ swap - ;  \     countwl Hashlen 2 pick */ swap - ;
   
   \ Create hashhist here $100 cells dup allot erase
   
   \ : .hashhist ( -- )  hashhist $100 cells erase
   \     HashTable HashLen cells bounds
   \     DO  0 I  BEGIN  @ dup  WHILE  swap 1+ swap  REPEAT  drop
   \         1 swap cells hashhist + +!
   \     cell +LOOP
   \     0 0 $100 0 DO
   \         hashhist I cells + @ dup IF
   \       cr I 0 .r ." : " dup .  THEN tuck I * + >r + r>
   \     LOOP cr ." Total: " 0 .r ." /" . cr ;

Removed from v.1.29  
changed lines
  Added in v.1.38


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>