IMPLEMENTATION MODULE RedOpsl1; FROM QueueInfo IMPORT Maxqueue,InfoTip; PROCEDURE MakeNull(VAR q : RedOpslTip); BEGIN WITH q DO Prvi := 0; Zadnji := 0 END END MakeNull; PROCEDURE Empty(VAR q : RedOpslTip) : BOOLEAN; BEGIN RETURN q.Zadnji = 0 END Empty; PROCEDURE First(VAR q : RedOpslTip; VAR x : InfoTip; VAR ok : BOOLEAN); BEGIN IF Empty(q) THEN ok := FALSE ELSE ok := TRUE; WITH q DO x := Element[Prvi] END END END First; PROCEDURE AddOne(i : CARDINAL) : CARDINAL; BEGIN IF i = Maxqueue THEN RETURN 1 ELSE RETURN i+1 END END AddOne; PROCEDURE PopFirst(VAR q : RedOpslTip; VAR ok : BOOLEAN); BEGIN IF Empty(q) THEN ok := FALSE ELSE ok := TRUE; WITH q DO IF Prvi = Zadnji THEN MakeNull(q) ELSE Prvi := AddOne(Prvi) END END END END PopFirst; PROCEDURE AddRear(VAR q : RedOpslTip; x : InfoTip; VAR ok : BOOLEAN); BEGIN WITH q DO IF AddOne(Zadnji) = Prvi THEN ok := FALSE ELSE ok := TRUE; IF Empty(q) THEN Prvi := 1; Zadnji := 1 ELSE Zadnji := AddOne(Zadnji) END; Element[Zadnji] := x END END END AddRear; END RedOpsl1.