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 +