1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
% $Id: simset.sim,v 1.3 1997/02/14 16:33:02 cim Exp $
% Copyright (C) 1994 Sverre Hvammen Johansen,
% Department of Informatics, University of Oslo.
%
% This program is free software; you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation; version 2.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this program; if not, write to the Free Software
% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
%ifdef included
%else
%timestamp simset
%endif
%nonetest off
%casesensitive on
CLASS SIMSET;
BEGIN
CLASS LINKAGE;
BEGIN REF(LINKAGE)zzsuc,zzpred;
REF(LINK) PROCEDURE SUC;
SUC:- IF zzsuc IN LINK THEN zzsuc ELSE NONE;
REF(LINK) PROCEDURE PRED;
PRED:- IF zzpred IN LINK THEN zzpred ELSE NONE;
REF(LINKAGE) PROCEDURE PREV; PREV:-zzpred;
END LINKAGE;
LINKAGE CLASS LINK;
BEGIN
PROCEDURE OUT;
IF zzsuc=/=NONE THEN BEGIN
zzsuc.zzpred:-zzpred;
zzpred.zzsuc:-zzsuc;
zzsuc:-zzpred:-NONE;
END OUT;
PROCEDURE FOLLOW(PTR); REF(LINKAGE)PTR;
BEGIN OUT;
IF PTR=/=NONE AND THEN PTR.zzsuc=/=NONE THEN BEGIN
zzpred:-PTR;
zzsuc:-PTR.zzsuc;
zzsuc.zzpred:-PTR.zzsuc:-THIS LINKAGE END
END FOLLOW;
PROCEDURE PRECEDE(PTR); REF(LINKAGE)PTR;
BEGIN OUT;
IF PTR=/=NONE AND THEN PTR.zzpred=/=NONE THEN BEGIN
zzsuc:-PTR;
zzpred:-PTR.zzpred;
zzpred.zzsuc:-PTR.zzpred:-THIS LINKAGE END
END PRECEDE;
PROCEDURE INTO(S); REF(HEAD)S; PRECEDE(S);
END LINK;
LINKAGE CLASS HEAD;
BEGIN
REF(LINK) PROCEDURE FIRST;
!FIRST:-SUC;
FIRST:- IF zzsuc IN LINK THEN zzsuc ELSE NONE;
REF(LINK) PROCEDURE LAST;
!LAST:-PRED;
LAST:- IF zzpred IN LINK THEN zzpred ELSE NONE;
BOOLEAN PROCEDURE EMPTY; EMPTY:= zzsuc==THIS LINKAGE;
INTEGER PROCEDURE CARDINAL;
BEGIN INTEGER I;
REF(LINKAGE) PTR;
% PTR:-FIRST;
% WHILE PTR =/= NONE DO BEGIN
% I:=I+1;
% PTR:-PTR.SUC;
% END WHILE;
PTR:-zzsuc;
WHILE PTR =/= THIS LINKAGE DO BEGIN
I:=I+1;
PTR:-PTR.zzsuc;
END WHILE;
CARDINAL:=I
END CARDINAL;
% PROCEDURE CLEAR; WHILE FIRST=/= NONE DO FIRST.OUT;
PROCEDURE CLEAR;
BEGIN
REF(LINKAGE) PTR,PTRSUC;
PTR:-zzsuc;
WHILE PTR =/= THIS LINKAGE DO
BEGIN
PTRSUC:-PTR.zzsuc;
PTR.zzsuc:-PTR.zzpred:-NONE;
PTR:-PTRSUC;
END;
zzsuc:-zzpred:-THIS LINKAGE
END;
zzsuc:-zzpred:-THIS LINKAGE
END HEAD;
END SIMSET;
%CASESENSITIVE OFF
%eof
|