(FILECREATED " 4-Nov-85 11:03:50" {MCS:MCS:STANFORD}<LANE>HASHBUFFER.LSP;6
previous date: "25-Oct-85 08:30:07"
{MCS:MCS:STANFORD}<LANE>HASHBUFFER.LSP;5)
(PRETTYCOMPRINT HASHBUFFERCOMS)
(RPAQQ HASHBUFFERCOMS ((FNS CREATEHASHBUFFER OPENHASHBUFFER CLOSEHASHBUFFER
GETHASHBUFFER PUTHASHBUFFER)
(INITVARS (EMPTYHASHENTRYMARKER '**EMPTYHASHENTRY**))
(GLOBALVARS EMPTYHASHENTRYMARKER)
(FNS HASHARRAY.TO.HASHFILE HASHFILE.TO.HASHARRAY)
(DECLARE: DONTCOPY (RECORDS HASHBUFFER))))
(DEFINEQ
(CREATEHASHBUFFER
[LAMBDA (FILE VALUETYPE ITEMLENGTH #ENTRIES)
(* cdl "24-Oct-85 08:25")
(DECLARE (GLOBALVARS HASHFILEDEFAULTSIZE))
(PROG [(HASHBUFFER (create HASHBUFFER
HASHFILE ←(CREATEHASHFILE FILE VALUETYPE
ITEMLENGTH #ENTRIES)
HASHARRAY ←(HASHARRAY (OR #ENTRIES
HASHFILEDEFAULTSIZE]
(replace (HASHBUFFER ACCESS) of HASHBUFFER
with (GETFILEINFO (with HashFile (with HASHBUFFER HASHBUFFER
HASHFILE)
Stream)
'ACCESS))
(RETURN HASHBUFFER])
(OPENHASHBUFFER
[LAMBDA (FILE ACCESS #ENTRIES) (* cdl " 4-Nov-85 11:03")
(PROG [(HASHBUFFER (create HASHBUFFER
HASHFILE ←(OPENHASHFILE FILE ACCESS]
[replace (HASHBUFFER HASHARRAY) of HASHBUFFER
with (HASHARRAY (OR #ENTRIES (with HashFile
(with HASHBUFFER HASHBUFFER
HASHFILE)
#Entries]
(replace (HASHBUFFER ACCESS) of HASHBUFFER
with (GETFILEINFO (with HashFile (with HASHBUFFER HASHBUFFER
HASHFILE)
Stream)
'ACCESS))
(RETURN HASHBUFFER])
(CLOSEHASHBUFFER
[LAMBDA (HASHBUFFER FILEONLY?) (* cdl "24-Oct-85 08:20")
(with HASHBUFFER HASHBUFFER (CLOSEHASHFILE HASHFILE)
(if (NOT FILEONLY?)
then (SETQ HASHARRAY NIL))
(HASHFILEPROP HASHFILE 'NAME])
(GETHASHBUFFER
[LAMBDA (KEY HASHBUFFER) (* cdl "24-Oct-85 08:37")
(PROG (VALUE)
(with HASHBUFFER HASHBUFFER (if (EQ EMPTYHASHENTRYMARKER
(SETQ VALUE (GETHASH KEY
HASHARRAY)))
then (RETURN)
elseif VALUE
then (RETURN VALUE)
elseif (SETQ VALUE (GETHASHFILE
KEY HASHFILE))
then (PUTHASH KEY VALUE HASHARRAY)
(RETURN VALUE)
else (PUTHASH KEY
EMPTYHASHENTRYMARKER
HASHARRAY])
(PUTHASHBUFFER
[LAMBDA (KEY VALUE HASHBUFFER) (* cdl "24-Oct-85 08:26")
(with HASHBUFFER HASHBUFFER (if (NEQ ACCESS 'INPUT)
then (PUTHASHFILE KEY VALUE HASHFILE))
(PUTHASH KEY VALUE HASHARRAY])
)
(RPAQ? EMPTYHASHENTRYMARKER '**EMPTYHASHENTRY**)
(DECLARE: DOEVAL@COMPILE DONTCOPY
(GLOBALVARS EMPTYHASHENTRYMARKER)
)
(DEFINEQ
(HASHARRAY.TO.HASHFILE
[LAMBDA (HASHARRAY HASHFILE TESTFN) (* cdl "25-Oct-85 08:25")
(DECLARE (SPECVARS HASHARRAY HASHFILE TESTFN))
(LET (REOPEN)
(DECLARE (SPECVARS REOPEN))
[if (HASHFILEP HASHFILE)
then (SETQ REOPEN T)
else (SETQ HASHFILE (CREATEHASHFILE HASHFILE NIL NIL
(HARRAYPROP HASHARRAY
'NUMKEYS]
[RESETLST (RESETSAVE NIL (BQUOTE (CLOSEHASHFILE , HASHFILE , REOPEN)))
(MAPHASH HASHARRAY
(FUNCTION (LAMBDA (VALUE KEY)
(if (OR (NULL TESTFN)
(APPLY* TESTFN KEY VALUE HASHARRAY
HASHFILE))
then (PUTHASHFILE KEY VALUE HASHFILE]
(if REOPEN
then HASHFILE
else (with HashFile HASHFILE File])
(HASHFILE.TO.HASHARRAY
[LAMBDA (HASHFILE HASHARRAY TESTFN) (* cdl "25-Oct-85 08:29")
(DECLARE (SPECVARS HASHFILE HASHARRAY TESTFN))
(LET (REOPEN)
(DECLARE (SPECVARS REOPEN))
[if (HASHFILEP HASHFILE)
then (SETQ REOPEN T)
else (SETQ HASHFILE (OPENHASHFILE HASHFILE 'INPUT]
[if (NULL HASHARRAY)
then (SETQ HASHARRAY (with HashFile HASHFILE (HASHARRAY #Entries]
[RESETLST (RESETSAVE NIL (BQUOTE (CLOSEHASHFILE , HASHFILE , REOPEN)))
(MAPHASHFILE HASHFILE
(FUNCTION (LAMBDA (KEY VALUE)
(if (OR (NULL TESTFN)
(APPLY* TESTFN KEY VALUE HASHFILE
HASHARRAY))
then (PUTHASH KEY VALUE HASHARRAY]
HASHARRAY])
)
(DECLARE: DONTCOPY
[DECLARE: EVAL@COMPILE
(RECORD HASHBUFFER (HASHARRAY HASHFILE ACCESS))
]
)
STOP