File: simset.sim

package info (click to toggle)
cim 3.36-4
  • links: PTS
  • area: main
  • in suites: woody
  • size: 2,964 kB
  • ctags: 2,750
  • sloc: ansic: 25,286; sh: 7,612; yacc: 873; perl: 781; makefile: 155
file content (123 lines) | stat: -rw-r--r-- 2,965 bytes parent folder | download
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