(DEFINE-FILE-INFO READTABLE "XCL" PACKAGE "LISP")(IL:FILECREATED "16-May-90 13:25:03" IL:|{DSK}<usr>local>lde>lispcore>sources>CMLHASH.;2| 8265         IL:|changes| IL:|to:|  (IL:VARS IL:CMLHASHCOMS)      IL:|previous| IL:|date:| " 8-Jun-89 17:15:50" IL:|{DSK}<usr>local>lde>lispcore>sources>CMLHASH.;1|); Copyright (c) 1985, 1986, 1987, 1989, 1990 by Venue & Xerox Corporation.  All rights reserved.(IL:PRETTYCOMPRINT IL:CMLHASHCOMS)(IL:RPAQQ IL:CMLHASHCOMS          (           (IL:* IL:|;;| "External interface")           (IL:FUNCTIONS MAKE-HASH-TABLE GETHASH MAPHASH HASH-TABLE-COUNT HASH-TABLE-P SXHASH)           (XCL:OPTIMIZERS GETHASH HASH-TABLE-COUNT HASH-TABLE-P)           (IL:SETFS GETHASH)                      (IL:* IL:|;;| "Internal interface")           (IL:FUNCTIONS EQLHASHBITSFN SXHASH-PATHNAME)           (IL:DECLARE\: IL:DONTCOPY IL:DOEVAL@COMPILE (IL:VARIABLES SXHASH-MAX)                  (IL:FUNCTIONS SXHASH-LIST SXHASH-STRING SXHASH-BIT-VECTOR SXHASH-ROT))                      (IL:* IL:|;;| "UFN for the SXHASH opcode (a MISCN)")           (IL:FNS SXHASH-UFN EQLHASHBITSFN-UFN %SXHASH)           (XCL:OPTIMIZERS SXHASH EQLHASHBITSFN)           (XCL:OPTIMIZERS IL:STRINGHASHBITS IL:STRING-EQUAL-HASHBITS)           (IL:PROP (IL:FILETYPE IL:MAKEFILE-ENVIRONMENT)                  IL:CMLHASH)))(IL:* IL:|;;| "External interface")(DEFUN MAKE-HASH-TABLE (&KEY (TEST 'EQL)                                 (SIZE 65)                                 REHASH-SIZE REHASH-THRESHOLD)   (IL:* IL:|;;| "Creates and returns a hash table.  See manual for details.")   (IF (NOT (SYMBOLP TEST))       (COND          ((%EQCODEP TEST 'EQ)           (SETQ TEST 'EQ))          ((%EQCODEP TEST 'EQL)           (SETQ TEST 'EQL))          ((%EQCODEP TEST 'EQUAL)           (SETQ TEST 'EQUAL))))   (ECASE TEST       (EQ (IL:HASHARRAY SIZE REHASH-SIZE))       (EQL (IL:HASHARRAY SIZE REHASH-SIZE 'EQLHASHBITSFN 'EQL))       (EQUAL (IL:HASHARRAY SIZE REHASH-SIZE 'SXHASH 'EQUAL))))(DEFUN GETHASH (KEY HASHTABLE &OPTIONAL DEFAULT)   (IL:GETHASH KEY HASHTABLE DEFAULT T))(DEFUN MAPHASH (FN HASH-TABLE)   "Call function with each key/value pair in the hash-table"   (IL:MAPHASH HASH-TABLE #'(LAMBDA (VALUE KEY)                                   (FUNCALL FN KEY VALUE)))   NIL)(DEFUN HASH-TABLE-COUNT (HASH-TABLE)   (IL:HARRAYPROP HASH-TABLE 'IL:NUMKEYS))(DEFUN HASH-TABLE-P (OBJECT)   (IL:TYPENAMEP OBJECT 'IL:HARRAYP))(DEFUN SXHASH (OBJECT)   (IL:MISCN SXHASH OBJECT))(XCL:DEFOPTIMIZER GETHASH (KEY HASHTABLE &OPTIONAL DEFAULT XCL:&CONTEXT CONTEXT)                              (IF (EQ 1 (COMPILER:CONTEXT-VALUES-USED CONTEXT))                                  (IF DEFAULT                                      `(IL:GETHASH ,KEY ,HASHTABLE ,DEFAULT)                                      `(IL:GETHASH ,KEY ,HASHTABLE))                                  'COMPILER:PASS))(XCL:DEFOPTIMIZER HASH-TABLE-COUNT (HASH-TABLE)                                       `(IL:HARRAYPROP ,HASH-TABLE 'IL:NUMKEYS))(XCL:DEFOPTIMIZER HASH-TABLE-P (OBJECT)                                   `(IL:TYPENAMEP ,OBJECT 'IL:HARRAYP))(DEFSETF GETHASH PUTHASH)(IL:* IL:|;;| "Internal interface")(DEFUN EQLHASHBITSFN (OBJ)   (IL:MISCN EQLHASHBITSFN OBJ))(DEFUN SXHASH-PATHNAME (PATHNAME)   (LET ((HASH (SXHASH-ROT (LOGXOR (%SXHASH (IL:%PATHNAME-HOST PATHNAME))                                  (%SXHASH (IL:%PATHNAME-DEVICE PATHNAME))))))        (SETQ HASH (SXHASH-ROT (LOGXOR HASH (%SXHASH (IL:%PATHNAME-TYPE PATHNAME)))))        (SETQ HASH (SXHASH-ROT (LOGXOR HASH (%SXHASH (IL:%PATHNAME-VERSION PATHNAME)))))        (SETQ HASH (SXHASH-ROT (LOGXOR HASH (%SXHASH (IL:%PATHNAME-DIRECTORY PATHNAME)))))        (SETQ HASH (SXHASH-ROT (LOGXOR HASH (%SXHASH (IL:%PATHNAME-NAME PATHNAME)))))))(IL:DECLARE\: IL:DONTCOPY IL:DOEVAL@COMPILE (DEFCONSTANT SXHASH-MAX 13)(DEFMACRO SXHASH-LIST (LIST)   `(DO ((LIST ,LIST (CDR LIST))         (INDEX 0 (1+ INDEX))         (HASH 0))        ((OR (NOT (CONSP LIST))             (EQ INDEX SXHASH-MAX))         HASH)      (SETQ HASH (SXHASH-ROT (LOGXOR HASH (%SXHASH (CAR LIST)))))))(DEFMACRO SXHASH-STRING (STRING)                         (IL:* IL:\;                                                          "Returns hash value for a general string.")   `(DO ((I 0 (1+ I))         (LENGTH (MIN (LENGTH ,STRING)                      SXHASH-MAX))         (HASH 0))        ((EQ I LENGTH)         HASH)      (IL:* IL:|;;| "the spice code had a fairly general \"rotate X within integerlength of most-positive-fixnum bits, but (a) it was slow and (b) it was buggy anyway, since it assumed that most-positive-fixnum was 1 less than a power of two.")      (SETQ HASH (SXHASH-ROT (LOGXOR HASH (CHAR-INT (AREF ,STRING I)))))))(DEFMACRO SXHASH-BIT-VECTOR (BIT-VECTOR)   `(DO ((I 0 (1+ I))         (LENGTH (MIN (LENGTH ,BIT-VECTOR)                      16))         (HASH 0))        ((EQ I LENGTH)         HASH)      (SETQ HASH (+ (ASH HASH 1)                    (AREF ,BIT-VECTOR I)))))(DEFMACRO SXHASH-ROT (X)   `(LET ((X ,X))         (DPB X (BYTE 9 7)              (LDB (BYTE 7 9)                   X)))))(IL:* IL:|;;| "UFN for the SXHASH opcode (a MISCN)")(IL:DEFINEQ(SXHASH-UFN  (IL:LAMBDA (IL:INDEX IL:ARGCOUNT IL:ARG-PTR)      (IL:* IL:\; "Edited 23-Feb-89 19:45 by jds")    (IL:* IL:|;;|   "This is the UFN for the CL:SXHASH MISCN sub-opcode.  That MISCN is being implemented on Suns.")    (%SXHASH (IL:\\GETBASEPTR IL:ARG-PTR 0))))(EQLHASHBITSFN-UFN  (IL:LAMBDA (IL:INDEX IL:ARGCOUNT IL:ARG-PTR)      (IL:* IL:\; "Edited 23-Feb-89 18:10 by jds")    (LET ((OBJ (IL:\\GETBASEPTR IL:ARG-PTR 0)))         (TYPECASE OBJ             (CHARACTER (CHAR-INT OBJ))             (INTEGER (LOGAND OBJ 65535))             (FLOAT (LOGXOR (IL:|fetch| (IL:FLOATP IL:HIWORD) IL:|of| OBJ)                           (IL:|fetch| (IL:FLOATP IL:LOWORD) IL:|of| OBJ)))             (RATIO (LOGXOR (EQLHASHBITSFN (NUMERATOR OBJ))                           (EQLHASHBITSFN (DENOMINATOR OBJ))))             (COMPLEX (LOGXOR (EQLHASHBITSFN (REALPART OBJ))                             (EQLHASHBITSFN (IMAGPART OBJ))))             (T (IL:\\EQHASHINGBITS OBJ))))))(%SXHASH  (IL:LAMBDA (OBJECT)                               (IL:* IL:\; "Edited 23-Feb-89 19:42 by jds")    (COND       ((SYMBOLP OBJECT)        (IL:\\EQHASHINGBITS OBJECT))       ((LISTP OBJECT)        (SXHASH-LIST OBJECT))       ((NUMBERP OBJECT)        (TYPECASE OBJECT            (INTEGER (LOGAND OBJECT MOST-POSITIVE-FIXNUM))            (FLOAT (LOGXOR (IL:|fetch| (IL:FLOATP IL:HIWORD) IL:|of| OBJECT)                          (IL:|fetch| (IL:FLOATP IL:LOWORD) IL:|of| OBJECT)))            (RATIO (LOGXOR (%SXHASH (NUMERATOR OBJECT))                          (%SXHASH (DENOMINATOR OBJECT))))            (COMPLEX (LOGXOR (%SXHASH (REALPART OBJECT))                            (%SXHASH (IMAGPART OBJECT))))))       ((STRINGP OBJECT)        (SXHASH-STRING OBJECT))       ((BIT-VECTOR-P OBJECT)        (SXHASH-BIT-VECTOR OBJECT))       ((PATHNAMEP OBJECT)        (SXHASH-PATHNAME OBJECT))       (T (IL:\\EQHASHINGBITS OBJECT))))))(XCL:DEFOPTIMIZER SXHASH (OBJECT)                             `(IL:MISCN SXHASH ,OBJECT))(XCL:DEFOPTIMIZER EQLHASHBITSFN (OBJECT)                                    `(IL:MISCN EQLHASHBITSFN ,OBJECT))(XCL:DEFOPTIMIZER IL:STRINGHASHBITS (STRING)                                        `(IL:MISCN IL:STRINGHASHBITS ,STRING))(XCL:DEFOPTIMIZER IL:STRING-EQUAL-HASHBITS (STRING)                                               `(IL:MISCN IL:STRING-EQUAL-HASHBITS ,STRING))(IL:PUTPROPS IL:CMLHASH IL:FILETYPE COMPILE-FILE)(IL:PUTPROPS IL:CMLHASH IL:MAKEFILE-ENVIRONMENT (:READTABLE "XCL" :PACKAGE "LISP"))(IL:PUTPROPS IL:CMLHASH IL:COPYRIGHT ("Venue & Xerox Corporation" 1985 1986 1987 1989 1990))(IL:DECLARE\: IL:DONTCOPY  (IL:FILEMAP (NIL (5446 7499 (SXHASH-UFN 5459 . 5758) (EQLHASHBITSFN-UFN 5760 . 6499) (%SXHASH 6501 . 7497)))))IL:STOP