blob: 7b371adae87a5f2fa3f953f7cb3cbac892ec5d16 (
plain)
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
|
program()
type
File = record
fd: Int
end
List#[T] = record
head: ^T;
count: Word
end
Queue#[T] = record(List#[T])
tail: ^T
end
var
jobs: Queue#[File]
seen: ^List#[File]
f: File
proc push#[T](target: ^List#[T]; value: ^T)
begin
target^.head := value;
target^.count := target^.count + 1u
return
proc enqueue#[T](target: ^Queue#[T]; value: ^T)
begin
push(target, value);
target^.tail := value
return
begin
seen := @jobs;
enqueue(@jobs, @f);
assert(jobs.count = 1u);
assert(jobs.head = @f);
assert(jobs.tail = @f);
assert(#size(Queue#[File]) = #size(^Word8) * 3u)
end.
|