(FILECREATED "22-Aug-86 14:22:15" {ERIS}<LISPCORE>LIBRARY>CMLHASH.;15 6938         changes to:  (VARS CMLHASHCOMS)                   (VARIABLES SXHASH-MAX)                   (FUNCTIONS CL:MAPHASH CL:PUTHASH HASH-TABLE-COUNT HASH-TABLE-P MAKE-HASH-TABLE                           SXHASH SXHASH-STRING EQLHASHBITSFN)      previous date: " 2-Jul-86 13:44:14" {ERIS}<LISPCORE>LIBRARY>CMLHASH.;14)(* Copyright (c) 1985, 1986 by Xerox Corporation. All rights reserved.)(PRETTYCOMPRINT CMLHASHCOMS)(RPAQQ CMLHASHCOMS ((* ;; "External interface")                    (SETFS CL:GETHASH)                    (FUNCTIONS CL:MAPHASH CL:PUTHASH HASH-TABLE-COUNT HASH-TABLE-P MAKE-HASH-TABLE                            SXHASH)                    (P (MOVD (QUOTE GETHASH)                             (QUOTE CL:GETHASH)))                    (* ;; "Internal interface")                    (VARIABLES SXHASH-MAX)                    (FUNCTIONS SXHASH-LIST SXHASH-ROT SXHASH-STRING EQLHASHBITSFN \EQHASHINGBITS)                    (PROP FILETYPE CMLHASH)))(* ;; "External interface")(DEFSETF CL:GETHASH CL:PUTHASH)(DEFUN CL:MAPHASH (FUNCTION HASH-TABLE) "Call function with each key/value pair in the hash-table"   (MAPHASH HASH-TABLE (CL:FUNCTION (CL:LAMBDA (VALUE KEY)                                           (FUNCALL FUNCTION KEY VALUE))))   NIL)(DEFUN CL:PUTHASH (KEY HASH-TABLE VALUE &OPTIONAL DEFAULT) (PUTHASH KEY VALUE HASH-TABLE))(DEFUN HASH-TABLE-COUNT (HASH-TABLE) (HARRAYPROP HASH-TABLE (QUOTE NUMKEYS)))(DEFUN HASH-TABLE-P (OBJECT) (HARRAYP OBJECT))(DEFUN MAKE-HASH-TABLE (&KEY (TEST (QUOTE EQL))                             (SIZE 65)                             REHASH-SIZE REHASH-THRESHOLD)                                          "Creates and returns a hash table.  See manual for details."   (AND (NOT (SYMBOLP TEST))        (COND           ((EQP TEST (CL:FUNCTION EQ))            (SETQ TEST (QUOTE EQ)))           ((EQP TEST (CL:FUNCTION EQL))            (SETQ TEST (QUOTE EQL)))           ((EQP TEST (CL:FUNCTION CL:EQUAL))            (SETQ TEST (QUOTE CL:EQUAL)))))   (ECASE TEST (EQ (HASHARRAY SIZE REHASH-SIZE))          (EQL (HASHARRAY SIZE REHASH-SIZE (FUNCTION EQLHASHBITSFN)                      (FUNCTION EQL)))          (CL:EQUAL (HASHARRAY SIZE REHASH-SIZE (FUNCTION SXHASH)                           (FUNCTION CL:EQUAL)))))(DEFUN SXHASH (OBJECT) "Returns a fixnum equal hash for an object."   (TYPECASE 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")(DEFCONSTANT SXHASH-MAX 13)(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 (MIN (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)))))(DEFMACRO EQLHASHBITSFN (OBJ) (BQUOTE (TYPECASE (\, OBJ)                                             (CHARACTER)                                             (INTEGER (LOGAND (\, OBJ)                                                             65535))                                             (FLOAT (LOGXOR (fetch (FLOATP HIWORD)                                                                   of                                                                   (\, OBJ))                                                           (fetch (FLOATP LOWORD)                                                                  of                                                                  (\, OBJ))))                                             (RATIO (LOGXOR (EQLHASHBITSFN (NUMERATOR (\, OBJ)))                                                           (EQLHASHBITSFN (DENOMINATOR (\, OBJ)))))                                             (COMPLEX (LOGXOR (EQLHASHBITSFN (REALPART (\, OBJ)))                                                             (EQLHASHBITSFN (IMAGPART (\, OBJ)))))                                             (T (\EQHASHINGBITS (\, OBJ))))))(DEFMACRO \EQHASHINGBITS (X) (BQUOTE (LOGXOR (\HILOC (\, X))                                            (LOGXOR (LLSH (LOGAND (\LOLOC (\, X))                                                                 8191)                                                          3)                                                   (LRSH (\LOLOC (\, X))                                                         9)))))(PUTPROPS CMLHASH FILETYPE COMPILE-FILE)(PUTPROPS CMLHASH COPYRIGHT ("Xerox Corporation" 1985 1986))(DECLARE: DONTCOPY  (FILEMAP (NIL)))STOP