(FILECREATED "23-Jan-86 18:05:27" {ERIS}<LISPCORE>LIBRARY>CMLHASH.;6 6076
changes to: (FNS SXHASH REMHASH MAKE-HASH-TABLE CLHASH::EQLHASHBITSFN)
(MACROS SXHASH-ROT SXHASH-STRING SXHASH-LIST)
(VARS CMLHASHCOMS)
previous date: "20-Jan-86 22:16:51" {ERIS}<LISPCORE>LIBRARY>CMLHASH.;3)
(* Copyright (c) 1985, 1986 by Xerox Corporation. All rights reserved.)
(PRETTYCOMPRINT CMLHASHCOMS)
(RPAQQ CMLHASHCOMS [(* * External interface)
(PROP SETFN CL:GETHASH)
(FNS CL:MAPHASH CL:PUTHASH HASH-TABLE-COUNT HASH-TABLE-P MAKE-HASH-TABLE SXHASH)
(P (MOVD (QUOTE GETHASH)
(QUOTE CL:GETHASH)))
(* * Internal interface)
(CONSTANTS SXHASH-MAX)
(MACROS SXHASH-LIST SXHASH-ROT SXHASH-STRING)
(FNS CLHASH::EQLHASHBITSFN)
(DECLARE: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS
(ADDVARS (NLAMA)
(NLAML)
(LAMA MAKE-HASH-TABLE CL:PUTHASH])
(* * External interface)
(PUTPROPS CL:GETHASH SETFN CL:PUTHASH)
(DEFINEQ
(CL:MAPHASH
(CL:LAMBDA (FUNCTION HASH-TABLE) (* raf "17-Nov-85 02:35")
[MAPHASH HASH-TABLE (FUNCTION (LAMBDA (VALUE KEY)
(FUNCALL FUNCTION KEY VALUE]
NIL))
(CL:PUTHASH
(CL:LAMBDA (KEY HASH-TABLE VALUE &OPTIONAL DEFAULT)
(PUTHASH KEY VALUE HASH-TABLE)))
(HASH-TABLE-COUNT
(CL:LAMBDA (HASH-TABLE)
(HARRAYPROP HASH-TABLE (QUOTE NUMKEYS))))
(HASH-TABLE-P
(CL:LAMBDA (OBJECT)
(HARRAYP OBJECT)))
(MAKE-HASH-TABLE
(CL:LAMBDA (&KEY (TEST (FUNCTION EQL))
(SIZE 65)
REHASH-SIZE REHASH-THRESHOLD) (* raf
"23-Jan-86 16:53")
(*
"Creates and returns a hash table. See manual for details.")
[COND
((EQ TEST (FUNCTION EQ))
(SETQ TEST (QUOTE EQ)))
((EQ TEST (FUNCTION EQL))
(SETQ TEST (QUOTE EQL)))
((EQ TEST (FUNCTION CL:EQUAL))
(SETQ TEST (QUOTE CL:EQUAL]
(COND
((EQ TEST (QUOTE EQ))
(HASHARRAY SIZE REHASH-SIZE))
((EQ TEST (QUOTE EQL))
(HASHARRAY SIZE REHASH-SIZE (FUNCTION CLHASH::EQLHASHBITSFN)
(FUNCTION EQL)))
((EQ TEST (QUOTE EQUAL))
(HASHARRAY SIZE REHASH-SIZE (FUNCTION SXHASH)
(FUNCTION CL:EQUAL)))
(ERROR "Bad TEST for MAKE-HASH-ARRAY" TEST))))
(SXHASH
[LAMBDA (OBJECT) (* raf
"23-Jan-86 18:03")
(TYPECASE OBJECT (SIMPLE-STRING (STRINGHASHBITS OBJECT))
(SYMBOL (STRINGHASHBITS (SYMBOL-NAME OBJECT)))
(STRING (SXHASH-STRING OBJECT))
(LIST (SXHASH-LIST OBJECT))
(ARRAY (ARRAY-RANK OBJECT))
(FLOAT (LOGXOR (fetch (FLOATP HIWORD) of OBJECT)
(fetch (FLOATP LOWORD) of OBJECT)))
(INTEGER (LOGAND OBJECT 65535))
[RATIO (LOGXOR (SXHASH (NUMERATOR OBJECT))
(SXHASH (DENOMINATOR OBJECT]
[COMPLEX (LOGXOR (SXHASH (REALPART OBJECT))
(SXHASH (IMAGPART OBJECT]
(T (\EQHASHINGBITS OBJECT])
)
(MOVD (QUOTE GETHASH)
(QUOTE CL:GETHASH))
(* * Internal interface)
(DECLARE: EVAL@COMPILE
(RPAQQ SXHASH-MAX 13)
(CONSTANTS SXHASH-MAX)
)
(DECLARE: EVAL@COMPILE
[DEFMACRO SXHASH-LIST (SEQUENCE)
(BQUOTE (CL:DO ((SEQUENCE (\, SEQUENCE)
(CDR SEQUENCE))
(INDEX 0 (1+ INDEX))
(HASH 2))
((OR (ATOM SEQUENCE)
(= INDEX SXHASH-MAX))
HASH)
(DECLARE (TYPE FIXNUM HASH))
(SETQ HASH (SXHASH-ROT (LOGXOR HASH (SXHASH (CAR SEQUENCE)))
7]
[DEFMACRO SXHASH-ROT (X NUM)
"Rotates x left by num bits."
(BQUOTE (ROT (\, X)
(\, NUM)
(\, (INTEGERLENGTH MOST-POSITIVE-FIXNUM]
[DEFMACRO SXHASH-STRING (SEQUENCE)
"Returns hash value for a non-simple string."
(BQUOTE (CL:DO ((I 0 (1+ I))
(LENGTH (MAX (CL:LENGTH (\, SEQUENCE))
SXHASH-MAX))
(HASH 0))
((= I LENGTH)
HASH)
(DECLARE (TYPE FIXNUM I LENGTH HASH))
(SETQ HASH (SXHASH-ROT (LOGXOR HASH (CHAR-INT (AREF (\, SEQUENCE)
I)))
7]
)
(DEFINEQ
(CLHASH::EQLHASHBITSFN
[LAMBDA (OBJ) (* raf
"23-Jan-86 17:23")
(TYPECASE OBJECT (CHARACTER)
(INTEGER (LOGAND OBJ 65535))
(FLOAT (LOGXOR (fetch (FLOATP HIWORD) of OBJ)
(fetch (FLOATP LOWORD) of OBJ)))
[RATIO (LOGXOR (CLHASH::EQLHASHBITSFN (NUMERATOR OBJECT))
(CLHASH::EQLHASHBITSFN (DENOMINATOR OBJECT]
[COMPLEX (LOGXOR (CLHASH::EQLHASHBITSFN (REALPART OBJECT))
(CLHASH::EQLHASHBITSFN (IMAGPART OBJECT]
(T (\EQHASHINGBITS OBJECT])
)
(DECLARE: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS
(ADDTOVAR NLAMA )
(ADDTOVAR NLAML )
(ADDTOVAR LAMA MAKE-HASH-TABLE CL:PUTHASH)
)
(PUTPROPS CMLHASH COPYRIGHT ("Xerox Corporation" 1985 1986))
(DECLARE: DONTCOPY
(FILEMAP (NIL (1233 3671 (CL:MAPHASH 1243 . 1461) (CL:PUTHASH 1463 . 1573) (HASH-TABLE-COUNT 1575 .
1676) (HASH-TABLE-P 1678 . 1744) (MAKE-HASH-TABLE 1746 . 2824) (SXHASH 2826 . 3669)) (5133 5847 (
CLHASH::EQLHASHBITSFN 5143 . 5845)))))
STOP