CDAtomicObjects.mesa        (part of ChipNDale)
Copyright © 1985 by Xerox Corporation.  All rights reserved.
by Christian Jacobi,  March 13, 1985 9:49:28 am PST 
last edited by Christian Jacobi,  May 29, 1985 11:38:08 am PDT
 
DIRECTORY
CD USING [combined, Position, Rect, highLightError, Layer, ObjectClass, Object, Technology],
Rope USING [ROPE];
 
CDAtomicObjects: CEDAR DEFINITIONS =
BEGIN
--This module helps the implementation of a wide class of atomic ChipNDale
--objects, which do not have children and are shared between designs.  Despite
--its name this are not the only atomic object classes. 
IsAtomicOb: 
PROC [ob: 
CD.Object] 
RETURNS [
BOOL] = 
INLINE {
RETURN [ISTYPE[ob.specificRef, AtomicObsPtr]]
};
 
Create
AtomicOb: 
PROC [classKey: 
ATOM, size: 
CD.Position, tech: 
CD.Technology, lev: 
CD.Layer←
CD.combined] 
RETURNS [
CD.Object];
--NIL if not done
--Reuses objects in cache if possible
 
DrawRec: TYPE = RECORD [r: CD.Rect, lev: CD.Layer ← CD.highLightError];
DrawList: TYPE = LIST OF DrawRec;
AtomicObsPtr: TYPE = REF AtomicObsRec;
AtomicObsRec: 
TYPE = 
RECORD [  
--do not change directly
rList: DrawList←NIL,
ir: CD.Rect
];
FillObjectProc: 
TYPE = 
PROC [ob: 
CD.Object] 
RETURNS [mustFail: 
BOOL ← 
FALSE];
--read (and even rewrite) size, layer
--calls IncorporateRect
--do not read or write AtomicObsRec directly
--rList will be initialized to NIL
 
RegisterAtomicObClass: 
PROC [classKey: 
ATOM, 
fillProc: FillObjectProc, 
description: Rope.ROPE←NIL,
tech: CD.Technology←NIL] RETURNS [type: REF CD.ObjectClass];
--drawMe, quickDrawMe are considered variables and should not 
--be changed by class implementor.
 
Incorporate: PROC [ob: CD.Object, r: CD.Rect, lev: CD.Layer, inside: BOOL ← TRUE];
END.