blob: 3de8ac311eb35619e80cd15eaff6b707712cecdc (
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
43
44
45
46
47
48
|
TEMPLATE <T>
FUNCTION Identity(Value : T) RETURNS T
IF Value < Value THEN
RETURN (T)Value
ENDIF
RETURN Value
ENDFUNCTION
TEMPLATE <T, Rest...>
OVERLOAD PROCEDURE Visit(First : T, Others : Rest...)
OUTPUT Identity<T>(First)
CALL Visit<Rest...>(Others...)
Visit<Box<Pair<INTEGER,REAL>>>(Others...)
ENDPROCEDURE
TEMPLATE <T>
CLASS Box
PRIVATE Value : T
PUBLIC PROCEDURE NEW(V : T)
Value <- V
ENDPROCEDURE
PUBLIC FUNCTION Get() RETURNS T
RETURN Value
ENDFUNCTION
PUBLIC FUNCTION AsBox(V : Box<T>) RETURNS Box<T>
RETURN (Box<T>)V
ENDFUNCTION
ENDCLASS
TEMPLATE <A, B>
CLASS Pair
Left : A
Right : B
ENDCLASS
TEMPLATE <T, Rest...>
CLASS Bundle
PUBLIC PROCEDURE Send(Values : Rest...)
CALL Visit(Values...)
ENDPROCEDURE
ENDCLASS
TEMPLATE <T>
PROCEDURE NestedTypes(Value : Box<Box<T>>)
DECLARE Other : Box<Pair<T,REAL>>
Other <- NEW Box<Pair<T,REAL>>()
Value <- (Box<Box<T>>)Value
ENDPROCEDURE
|