DIRECTORY FitStateUtils, FitBasic USING [Handle, SampleHandle, LinkHandle, SListHandle, TrajHandle, Contour]; FitStateUtilsImpl: CEDAR PROGRAM EXPORTS FitStateUtils = BEGIN OPEN FitBasic, FitStateUtils; ForAllSamples: PUBLIC PROC [slist: SListHandle, do: SampleProc] = { IF slist#NIL AND (slist.first=NIL OR slist.last=NIL) THEN FOR s: SampleHandle _ slist.header.next, s.next WHILE s#slist.header DO IF do[s] THEN EXIT; ENDLOOP; IF slist#NIL AND slist.first#NIL AND slist.last#NIL THEN FOR s: SampleHandle _ slist.first, s.next UNTIL s=slist.last.next DO IF s#slist.header THEN IF do[s] THEN EXIT; ENDLOOP; }; AtEnd: PUBLIC SIGNAL = CODE; NextSa: PUBLIC PROC [slist: SListHandle, s: SampleHandle, closed: BOOLEAN] RETURNS [SampleHandle] = { ret: SampleHandle _ s.next; IF ret=slist.header THEN ret _ ret.next; IF s=slist.last AND NOT closed THEN SIGNAL AtEnd; RETURN[ret]; }; PrevSa: PUBLIC PROC [slist: SListHandle, s: SampleHandle, closed: BOOLEAN] RETURNS [SampleHandle] = { ret: SampleHandle _ s.prev; IF ret=slist.header THEN ret _ ret.prev; IF s=slist.first AND NOT closed THEN SIGNAL AtEnd; RETURN[ret]; }; ForAllLinks: PUBLIC PROC [traj: TrajHandle, do: LinkProc] = { FOR l: LinkHandle _ traj.links, l.next UNTIL l=NIL DO IF do[l] THEN EXIT; ENDLOOP; }; ForAllSLists: PUBLIC PROC [handle: Handle, do: SListProc] = { --all samples in handle IF handle.slist=NIL THEN ForAllOtherSLists[handle,do] ELSE IF ~do[handle.slist] THEN ForAllOtherSLists[handle,do]; }; ForAllTrajs: PUBLIC PROC [handle: Handle, do: TrajProc] = { --all links in handle IF handle.traj=NIL THEN ForAllOtherTrajs[handle,do] ELSE IF ~do[handle.traj] THEN ForAllOtherTrajs[handle,do]; }; ForAllOtherSLists: PUBLIC PROC [handle: Handle, do: SListProc] = { IF handle.otherContours#NIL THEN FOR ts: LIST OF Contour _ handle.otherContours, ts.rest UNTIL ts=NIL DO IF do[ts.first.slist] THEN EXIT; ENDLOOP; }; ForAllOtherTrajs: PUBLIC PROC [handle: Handle, do: TrajProc] = { --all links in handle.otherContours IF handle.otherContours#NIL THEN FOR ts: LIST OF Contour _ handle.otherContours, ts.rest UNTIL ts=NIL DO IF do[ts.first.traj] THEN EXIT; ENDLOOP; }; END. ‚FitStateUtilsImpl.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Maureen Stone November 28, 1984 4:55:35 pm PST Doug Wyatt, September 5, 1985 1:59:41 pm PDT SampleProc: TYPE = PROC[s: SampleHandle] RETURNS [done: BOOLEAN]; LinkProc: TYPE =PROC[l: LinkHandle] RETURNS [done: BOOLEAN]; SListProc: TYPE =PROC[slist: SListHandle] RETURNS [done: BOOLEAN]; TrajProc: TYPE =PROC[traj: TrajHandle] RETURNS [done: BOOLEAN]; SLists have a header and samples are circularly linked If the sample list is closed these will wrap around. Otherwise they signal AtEnd Links do not have headers all samples in handle.otherContours Κ₯˜codešœ™Kšœ Οmœ1™