DIRECTORY Imager USING [Context, DoSave, DoSaveAll], IP USING [Array, ArrayFromVector, Integer, MasterError, NullVector, Operator, OperatorRep, Pool, PoolRep, PopBool, PopVector, PushOperator, PushVector, SaveEffect, State, Vector, VectorFromArray], IPBase USING []; IPPoolImpl: CEDAR PROGRAM IMPORTS Imager, IP EXPORTS IP, IPBase ~ BEGIN OPEN IP; MakePool: PUBLIC PROC[v: Vector, persistent: BOOL] RETURNS[Pool] ~ { RETURN[NEW[PoolRep _ [persistent: persistent, array: ArrayFromVector[v]]]]; }; emptyVector: Vector ~ NullVector[shape: [l: 0, n: 0]]; noPool: Pool ~ MakePool[v: emptyVector, persistent: FALSE]; NoPool: PUBLIC PROC RETURNS[Pool] ~ { RETURN[noPool] }; CurrentPool: PUBLIC PROC[pool: Pool] RETURNS[Vector] ~ { RETURN[VectorFromArray[pool.array]]; }; PoolDo: PROC[self: State, data: REF] ~ { pool: Pool ~ NARROW[data]; PushVector[self, CurrentPool[pool]]; }; OperatorFromPool: PUBLIC PROC[pool: Pool] RETURNS[Operator] ~ { RETURN[NEW[OperatorRep _ [class: $Pool, do: PoolDo, data: pool]]]; }; PoolFromOperator: PUBLIC PROC[op: Operator] RETURNS[Pool] ~ { IF op.class#$Pool THEN MasterError[$wrongType, "Operator is not a Pool."]; WITH op.data SELECT FROM pool: Pool => RETURN[pool]; ENDCASE; MasterError[$bug, "Pool operator data is wrong type or NIL."]; RETURN[NIL]; }; DoWithSaveEffect: PUBLIC PROC[self: State, action: PROC, saveEffect: SaveEffect] ~ { imager: Imager.Context ~ self.imager; SELECT saveEffect FROM $nil => action[]; $save => imager.DoSave[action]; $saveAll => imager.DoSaveAll[action]; ENDCASE => ERROR; }; ApplyMAKEPOOL: PUBLIC PROC[self: State] ~ { persistent: BOOL ~ PopBool[self]; v: Vector ~ PopVector[self]; pool: Pool ~ MakePool[v, persistent]; PushOperator[self, OperatorFromPool[pool]]; }; ApplyNOPOOL: PUBLIC PROC[self: State] ~ { PushOperator[self, OperatorFromPool[noPool]]; }; END. šIPPoolImpl.mesa Last edited by: Doug Wyatt, February 28, 1984 5:09:55 pm PST Eventually, this should worry about other pools than the Imager pool Ê_˜Jšœ™J™šœ™Jšœ,™,J™—šÏk ˜ Jšœœ˜*Jšœœ¼˜ÄJšœœ˜J˜—Jšœ œ˜Jšœ ˜Jšœœ˜Jšœœœœ˜J˜š Ïnœœœœœ ˜DJšœœA˜KJ˜J˜—J˜6Jšœ4œ˜;J˜Jš žœœœœ œ ˜7J˜šž œœœ œ ˜8Jšœ˜$J˜J˜—J˜šžœœœ˜(Jšœ œ˜J˜$J˜J˜—šžœœœ œ˜?Jšœœ8˜BJ˜J˜—šžœœœœ ˜=Jšœœ4˜JJš œ œœœœ˜=Jšœ?œœ˜KJ˜J˜—J˜šžœœœœ˜TJ˜%JšœD™Dšœ ˜J˜J˜J˜%Jšœœ˜—J˜J˜—J˜šž œœœ˜+Jšœ œ˜!J˜J˜%J˜+J˜—šž œœœ˜)J˜-J˜—J˜Jšœ˜—…—2 +