Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
83
Task/Stack/Oberon/stack-2.oberon
Normal file
83
Task/Stack/Oberon/stack-2.oberon
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
MODULE Stacks; (** AUTHOR ""; PURPOSE ""; *)
|
||||
|
||||
IMPORT
|
||||
Out := KernelLog;
|
||||
|
||||
TYPE
|
||||
Object = OBJECT
|
||||
END Object;
|
||||
|
||||
Stack* = OBJECT
|
||||
VAR
|
||||
top-,capacity-: LONGINT;
|
||||
pool: POINTER TO ARRAY OF Object;
|
||||
|
||||
PROCEDURE & InitStack*(capacity: LONGINT);
|
||||
BEGIN
|
||||
SELF.capacity := capacity;
|
||||
SELF.top := -1;
|
||||
NEW(SELF.pool,capacity)
|
||||
END InitStack;
|
||||
|
||||
PROCEDURE Push*(a:Object);
|
||||
BEGIN
|
||||
INC(SELF.top);
|
||||
ASSERT(SELF.top < SELF.capacity,100);
|
||||
SELF.pool[SELF.top] := a
|
||||
END Push;
|
||||
|
||||
PROCEDURE Pop*(): Object;
|
||||
VAR
|
||||
r: Object;
|
||||
BEGIN
|
||||
ASSERT(SELF.top >= 0);
|
||||
r := SELF.pool[SELF.top];
|
||||
DEC(SELF.top);RETURN r
|
||||
END Pop;
|
||||
|
||||
PROCEDURE Top*(): Object;
|
||||
BEGIN
|
||||
ASSERT(SELF.top >= 0);
|
||||
RETURN SELF.pool[SELF.top]
|
||||
END Top;
|
||||
|
||||
PROCEDURE IsEmpty*(): BOOLEAN;
|
||||
BEGIN
|
||||
RETURN SELF.top < 0
|
||||
END IsEmpty;
|
||||
|
||||
END Stack;
|
||||
|
||||
BoxedInt = OBJECT
|
||||
(Object)
|
||||
VAR
|
||||
val-: LONGINT;
|
||||
|
||||
PROCEDURE & InitBoxedInt*(CONST val: LONGINT);
|
||||
BEGIN
|
||||
SELF.val := val
|
||||
END InitBoxedInt;
|
||||
|
||||
END BoxedInt;
|
||||
|
||||
PROCEDURE Test*;
|
||||
VAR
|
||||
s: Stack;
|
||||
bi: BoxedInt;
|
||||
obj: Object;
|
||||
BEGIN
|
||||
NEW(s,10); (* A new stack of ten objects *)
|
||||
NEW(bi,100);s.Push(bi);
|
||||
NEW(bi,102);s.Push(bi);
|
||||
NEW(bi,104);s.Push(bi);
|
||||
Out.Ln;
|
||||
Out.String("Capacity:> ");Out.Int(s.capacity,0);Out.Ln;
|
||||
Out.String("Size:> ");Out.Int(s.top + 1,0);Out.Ln;
|
||||
obj := s.Pop(); obj := s.Pop();
|
||||
WITH obj: BoxedInt DO
|
||||
Out.String("obj:> ");Out.Int(obj.val,0);Out.Ln
|
||||
ELSE
|
||||
Out.String("Unknown object...");Out.Ln;
|
||||
END (* with *)
|
||||
END Test;
|
||||
END Stacks.
|
||||
Loading…
Add table
Add a link
Reference in a new issue