blob: c36eccf0cdfe634cd31792f69614b7142eb90466 (
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
41
42
|
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
program()
begin
seen := @jobs;
enqueue(@jobs, @f);
assert(jobs.count = 1u);
assert(jobs.head = @f);
assert(jobs.tail = @f);
assert(#size(Queue#[^File]) = #size(Pointer) * 3u)
return 0u8
end.
|