<> <> <> <<>> <> <<>> DIRECTORY SafeStorage, IO, Atom, Rope, Basics, Imager, MathExpr; ASStructures: CEDAR DEFINITIONS = BEGIN <> ROPE: TYPE = Rope.ROPE; STREAM: TYPE = IO.STREAM; EXPR: TYPE = MathExpr.EXPR; <> Category: TYPE ~ {set, lattice, group, ring, field, module, vectorSpace, algebra, divisionAlgebra}; <> PrintNameProc: TYPE = PROC [structure: Object] RETURNS [Rope.ROPE]; -- redundant with ToRopeOp <> StructureToExprOp: TYPE = PROC [structure: Object] RETURNS [out: EXPR]; StructureEqualityTest: TYPE = PROC [thisStructure, otherStructure: Object] RETURNS [BOOL]; <> StructureRankOp: TYPE = PROC [structure: Object] RETURNS [CARDINAL]; <> <<>> ReportOpsProc: TYPE = PROC [structure: Object] RETURNS [opNames: LIST OF Rope.ROPE, refOps: LIST OF REF]; <> <> <<>> BinaryStructureLUBOp: TYPE = PROC [firstStructure, secondStructure: Object] RETURNS [LUBStructure: Object]; <> <> StructureFromSetConstructor: TYPE = PROC [set: Object] RETURNS [structure: Object]; <> VectorStructureConstructor: TYPE = PROC [coordinateStructure: Object, dimension: NAT, row: BOOL _ TRUE] RETURNS [vectorStructure: Object]; <> SequenceStructureConstructor: TYPE = PROC [elementStructure: Object, row: BOOL _ TRUE] RETURNS [sequenceStructure: Object]; <> MatrixStructureConstructor: TYPE = PROC [elementStructure: Object, nRows, nCols: NAT] RETURNS [matrixStructure: Object]; <> PolynomialStructureConstructor: TYPE = PROC [coeffRing, variableSeq: Object] RETURNS [polynomialStructure: Object]; <> <> <> <<>> OrchardStructureConstructor: TYPE = PROC [coeffRing, labels: AlgebraClasses.Object, heapOrdered: BOOL] RETURNS [orchardStructure: Object]; <> <> NIL labels iff unlabeled; must be an ASVariableSequences.VariableSequence if non-NIL <> IsCategory: PROC [structure: Object, category: Category] RETURNS [BOOL]; HasProperty: PROC [structure: Object, property: ATOM] RETURNS [BOOL]; MakeStructure: PROC [name: Rope.ROPE, class: Object, instanceData: REF] RETURNS[structure: Object]; StructureEqual: PROC [structure1, structure2: Object] RETURNS [BOOL]; <> <<>> LookupMethodInStructure: PROC [methodSelector: ATOM, structure: Object] RETURNS[Method]; <> <<>> LookupMethodInAllStructures: PROC [methodSelector: ATOM] RETURNS[method: Method, structure: Object]; <> <> <> <<>> <> <<>> ResetStructureRegistry: PROC[]; InstallStructure: PROC[structure: Object]; <> LookupStructure: PROC[name: ROPE] RETURNS[structure: Object]; <> << returns NIL if not found>> <<>> KillStructure: PROC[name: ROPE]; <> <> LegalFirstCharOp: TYPE = PROC [char: CHAR, structure: Object] RETURNS [BOOL]; << True if char is legal first char in an external rep of a structure element.>> <<>> ReadOp: TYPE = PROC [in: IO.STREAM, structure: Object _ NIL] RETURNS [out: Object]; FromRopeOp: TYPE = PROC [in: Rope.ROPE, structure: Object _ NIL] RETURNS [out: Object]; ToRopeOp: TYPE = PROC [in: Object] RETURNS [out: Rope.ROPE]; WriteOp: TYPE = PROC [stream: IO.STREAM, in: Object]; FromExprOp: TYPE = PROC [in: EXPR, structure: Object] RETURNS [out: Object]; ToExprOp: TYPE = PROC [in: Object] RETURNS [out: EXPR]; FromBOOLOp: TYPE = PROC [in: BOOL, structure: Object _ NIL] RETURNS [out: Object]; FromINTOp: TYPE = PROC [in: INT, structure: Object _ NIL] RETURNS [out: Object]; NullaryOp: TYPE = PROC[structure: Object] RETURNS [result: Object]; <> CompareToZeroOp: TYPE = PROC [arg: Object] RETURNS [Basics.Comparison]; BinaryCompareOp: TYPE = PROC [firstArg, secondArg: Object] RETURNS [Basics.Comparison]; StructuredToGroundOp: TYPE = PROC [structuredElt: Object] RETURNS [groundElement: Object]; <> <<>> ElementRankOp: TYPE = PROC [arg: Object] RETURNS [CARDINAL]; <> <<>> <<>> Display2DOp: TYPE = PROC [object: Object, context: Imager.Context, dotWidth, segmentWidth: REAL]; <> <> Copy: UnaryOp; ElementOf: PROC [object: Object, structure: Object] RETURNS [BOOL]; << True if object is an element of structure. (check equality of its structure's name with this structure's name)>> <<>> <> UnaryImbedOp: TYPE = PROC [in: Object, structure: Object] RETURNS [out: Object]; <> <<>> BinaryImbedOp: TYPE = PROC [data1: Object, data2: REF, structure: Object] RETURNS [out: Object]; <> <> <<>> ListImbedOp: TYPE = PROC [data: LIST OF Object, structure: Object] RETURNS [out: Object]; <> <<>> MatrixImbedOp: TYPE = PROC [elements: LIST OF Object, structure: Object] RETURNS [out: Object]; <> <> Structures: AC.Object; -- public structure StructuresClass: AC.Object; -- public class; other Structure Impls will add methods to it. END.