-- SMProj.mesa
-- last edit by Satterthwaite, August 4, 1983 1:37 pm
DIRECTORY
CompilerOps: TYPE USING [Transaction],
File: TYPE USING [Capability, nullCapability],
FileSegment: TYPE USING [Span, nullSpan],
Rope: TYPE USING [Text],
TimeStamp: TYPE USING [Stamp];
SMProj: CEDAR DEFINITIONS~{
-- projection objects are centrally managed
-- do not change contents without acquiring the monitor lock of SMProjImpl
Proj: TYPE~REF ProjInfo;
ProjInfo: TYPE~RECORD[
-- the key (encodes all inputs by hashing)
stamp: TimeStamp.Stamp←, -- version stamp, not create
-- links for RedBlackTree package
rbLLink, rbRLink: Proj←NIL,
rbColor: BOOL←FALSE,
-- version map (defer until CFS?)
host: Rope.Text←NIL, -- @[host]<directory>shortname!version
directory: Rope.Text←NIL, -- in the file system
shortName: Rope.Text←NIL,
version: LONG CARDINAL←0,
-- hints
state: {empty, analyzed, opened}←$empty,
interface: BOOL←FALSE,
symbolPages: FileSegment.Span←FileSegment.nullSpan,
localName: Rope.Text←NIL, -- for the local disk
capability: File.Capability←File.nullCapability
];
Analyzed: PROC[proj: Proj] RETURNS[BOOL];
Available: PROC[proj: Proj] RETURNS[BOOL];
Erase: PROC[proj: Proj]; -- clears cache
Fill: PROC[proj: Proj, localName: Rope.Text, new: BOOL];
Find: PROC[stamp: TimeStamp.Stamp] RETURNS[Proj];
Flush: PROC;
Rename: PROC[proj: Proj, newName: Rope.Text];
Reset: PROC; -- erases local file system info
Update: PROC[proj: Proj, parms: POINTER TO READONLY CompilerOps.Transaction];
}.