<<[Indigo]Cache>Rosemary>Cache.df=>CacheDecoderImpl.Mesa>> <> DIRECTORY CacheDecoder, CacheMicroMachine; CacheDecoderImpl: CEDAR PROGRAM IMPORTS EXPORTS CacheDecoder, CacheMicroMachine = BEGIN OPEN CacheDecoder, CacheMicroMachine; tree: ARRAY BOOL OF ARRAY SequenceNumber OF ARRAY CycleNumber OF LIST OF ATOM; master: BOOL; sequence: SequenceNumber; SetMaster: PUBLIC PROC = {master _ TRUE}; SetSlave: PUBLIC PROC = {master _ FALSE}; Sequence: PUBLIC PROC [number: SequenceNumber] = { sequence _ number; }; Cycle: PUBLIC PROC [number: CycleNumber, decodes: LIST OF ATOM] = { tree[master][sequence][number] _ decodes; }; Decode: PUBLIC PROC[state: MCtlMachineState, decode: ATOM] RETURNS [conducts: BOOL] = { z: LIST OF ATOM _ tree[state.SeqMaster][state.Sequence][state.SeqState]; UNTIL z = NIL DO IF z.first=decode THEN RETURN[TRUE]; z _ z.rest; ENDLOOP; RETURN[FALSE]; }; END.