<> <> <> <> <> <> DIRECTORY Basics, IO, RefTab, Rope, SafeStorage; Pipal: CEDAR DEFINITIONS = BEGIN <> <> <> ROPE: TYPE = Rope.ROPE; <> Error: SIGNAL [reason: ATOM _ $Client, message: ROPE _ NIL, data: REF ANY _ NIL]; <> <> Class: TYPE = SafeStorage.Type; <> <<>> Method: TYPE = NAT; <> <<>> RegisterClass: PROC [name: ROPE, type: SafeStorage.Type] RETURNS [class: Class]; <> <> <> <<- same name, same type or not: legal, but any data attached to old registration is lost; a message is issued in the terminal>> <<- different name, same type: crash>> <<>> RegisterMethod: PROC [name: ROPE] RETURNS [method: Method]; <> <> <<>> ClassName: PROC [class: Class] RETURNS [name: ROPE _ NIL]; <> MethodName: PROC [method: Method] RETURNS [name: ROPE _ NIL]; <> PutClassMethod: PROC [class: Class, method: Method, data: REF]; <> <<>> GetClassMethod: PROC [class: Class, method: Method] RETURNS [data: REF _ NIL]; <> <> Object: TYPE = REF; Objects: TYPE = LIST OF Object; ObjectClass: PROC [object: Object] RETURNS [class: Class]; <> <<>> ObjectMethod: PROC [object: Object, method: Method] RETURNS [data: REF _ NIL]; <> <> <> overlayClass: Class; OverlayIndex: TYPE = NAT; Overlay: TYPE = REF OverlayRec; OverlayRec: TYPE = RECORD [children: SEQUENCE size: OverlayIndex OF Object]; void: READONLY Overlay; <> CreateOverlay: PROC [children: Objects] RETURNS [overlay: Overlay]; <> <> <<>> CreateOv: PROC [children: Objects] RETURNS [Object]; <> <<>> ExpandOverlay: PROC [object: Pipal.Object] RETURNS [children: Objects _ NIL]; <> <> iconClass: Class; Icon: TYPE = REF IconRec; IconRec: TYPE = RECORD [ reference: Object, -- the appearance (painted) referent: Object]; -- the guts CreateIcon: PROC [reference: Object, referent: Object] RETURNS [icon: Icon]; <> <> <<>> annotationClass: Class; Annotation: TYPE = REF AnnotationRec; AnnotationRec: TYPE = RECORD [ child: Object, key: ATOM, value: REF ]; CreateAnnotation: PROC [child: Object, key: ATOM, value: REF] RETURNS [annotation: Annotation]; <> <<>> nameProp: ATOM; <> <> <> <> <<>> hashMethod: Method; HashProc: TYPE = PROC [object: Object] RETURNS [hash: CARD]; Hash: HashProc; < HashObjectClass[object>]".>> HashObjectClass: HashProc; <> HashClass: PROC [class: Class] RETURNS [hash: CARD]; <> <> <> <> <<- maximum sharing by avoiding creation of duplicate objects;>> <<- successive unpickling produce identical objects ...>> <<- therefore allowing for a simple saving of caches;>> <<- possibility to implement utilities such as diff.>> <<>> equalMethod: Method; EqualProc: TYPE = PROC [object1, object2: Object] RETURNS [equal: BOOL _ FALSE]; < Class[object1]=Class[object2] and Hash[object1]=Hash[object2].>> <> <<>> Equal: EqualProc; <> <> <> <> <> <<>> describeMethod: Method; DescribeProc: TYPE = PROC [out: IO.STREAM, object: Object, indent: NAT _ 0, level: NAT _ 2, cr: BOOL _ TRUE]; Describe: DescribeProc; < " object".>> <> DescribeToRope: PROC [object: Object, indent: NAT _ 0, level: NAT _ 1, cr: BOOL _ FALSE] RETURNS [ROPE]; <> <<>> PutIndent: PROC [out: IO.STREAM, indent: NAT, cr: BOOL _ TRUE]; <> <<>> <> <> <> ObjectCache: TYPE = RefTab.Ref; CreateObjectCache: PROC RETURNS [ObjectCache]; <> <<>> FlushObjectCaches: PROC [object: Object]; <> <> Reverse: PROC [objects: Objects] RETURNS [Objects]; <> Add: PROC [objects: Objects, candidate: Object] RETURNS [Objects]; <> Delete: PROC [objects: Objects, candidate: Object] RETURNS [Objects]; <> Member: PROC [objects: Objects, candidate: Object] RETURNS [BOOL]; <> Length: PROC [objects: Objects] RETURNS [INT]; <> CompareProc: TYPE = PROC [object1, object2: Object] RETURNS [Basics.Comparison]; Sort: PROC [objects: Objects, compare: CompareProc] RETURNS [Objects]; <> <> AlwaysTrue: PROC [Object] RETURNS [BOOL]; AlwaysFalse: PROC [Object] RETURNS [BOOL]; <> <> <<>> ClassTable: TYPE = REF ClassTableRec; ClassTableRec: PRIVATE TYPE = ARRAY SafeStorage.TypeIndex OF REF; <> CreateClassTable: PROC RETURNS [table: ClassTable]; StoreInClassTable: PROC [table: ClassTable, class: Class, value: REF]; FetchFromClassTable: PROC [table: ClassTable, class: Class] RETURNS [value: REF _ NIL]; END.