DIRECTORY Imager USING [Context, DoSave, DoSaveAll], IP; IPPoolImpl: CEDAR PROGRAM IMPORTS Imager, IP EXPORTS IP ~ BEGIN OPEN IP; MakePool: PUBLIC PROC[v: Vector, persistent: BOOL] RETURNS[Pool] ~ { RETURN[NEW[PoolRep _ [persistent: persistent, array: ArrayFromVector[v]]]]; }; noPool: Pool ~ MakePool[v: NullVector[shape: [l: 0, n: 0]], persistent: FALSE]; NoPool: PUBLIC PROC RETURNS[Pool] ~ { RETURN[noPool] }; PoolValue: PUBLIC PROC[pool: Pool] RETURNS[Vector] ~ { RETURN[VectorFromArray[pool.array]]; }; poolClass: OperatorClass ~ NEW[OperatorClassRep _ [type: $Pool, apply: PoolApply]]; PoolApply: PROC[op: Operator, state: State] ~ { PushVector[state, PoolValue[op.pool]]; }; OperatorFromPool: PUBLIC PROC[pool: Pool] RETURNS[Operator] ~ { RETURN[NEW[OperatorRep _ [class: poolClass, data: NIL, pool: pool]]]; }; PoolFromOperator: PUBLIC PROC[op: Operator] RETURNS[Pool] ~ { IF op.pool#NIL THEN RETURN[op.pool] ELSE { MasterError[$wrongType, "Operator is not a Pool."]; ERROR Error; }; }; DoWithSaveEffect: PUBLIC PROC[self: State, action: PROC, saveEffect: SaveEffect] ~ { IF saveEffect=$nil THEN action[] ELSE { showVec: Vector ~ self.showVec; mediumSize: VEC ~ self.mediumSize; fieldMin: VEC ~ self.fieldMin; fieldMax: VEC ~ self.fieldMax; Restore: PROC ~ { self.showVec _ showVec; self.mediumSize _ mediumSize; self.fieldMin _ fieldMin; self.fieldMax _ fieldMax; }; SELECT saveEffect FROM $nil => action[]; $save => { self.imager.DoSave[action ! UNWIND => Restore[]]; Restore[] }; $saveAll => { self.imager.DoSaveAll[action ! UNWIND => Restore[]]; Restore[] }; ENDCASE => ERROR; }; }; END. ÂIPPoolImpl.mesa Copyright c 1984 Xerox Corporation. All rights reserved. Doug Wyatt, August 16, 1984 2:19:38 pm PDT Eventually, this should worry about pools other than the Imager pool ʈ˜šœ™Jšœ Ïmœ.™9Jšœ*™*—J™šÏk ˜ Jšœžœ˜*Jšžœ˜J˜—Jšœ žœž˜Jšžœ ž˜Jšžœž˜ Jšœžœžœžœ˜J˜š Ïnœžœžœžœžœ ˜DJšžœžœA˜KJ˜J˜—JšœHžœ˜OJ˜Jš Ÿœžœžœžœ žœ ˜7J˜šŸ œžœžœ žœ ˜6Jšžœ˜$J˜J˜—Jšœžœ5˜SJ˜šŸ œžœ ˜/Jšœ&˜&J˜J˜—šŸœžœžœ žœ˜?Jšžœžœ(žœ˜EJ˜J˜—šŸœžœžœžœ ˜=Jšžœ žœžœžœ ˜#šžœ˜Jšœ3˜3Jšžœ˜ J˜—J˜J˜—J˜šŸœžœžœžœ˜TJšœD™DJšžœžœ ˜ šžœ˜Jšœ˜Jšœ žœ˜"Jšœ žœ˜Jšœ žœ˜šŸœžœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜J˜—šžœ ž˜Jšœ˜Jšœ'žœ˜IJšœ-žœ˜OJšžœžœ˜—J˜—J˜J˜—J˜Jšžœ˜—…—P š