summaryrefslogtreecommitdiff
path: root/libtnsl/box/list.tnsl
blob: ed9c4b7576ac998fedecaf9dbc7db3e291e4c94a (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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/##
	Copyright 2021 Kyle Gunger

	Dual licensed under the CDDL 1.0 and BSD 3-Clause licenses.

	This file may only be used in accordance with one of the two
	licenses.  You should have received a copy of each license with
	the source code.  In the event that you did not recieve a copy
	of the licenses, they may be found at the following URLs:

	CDDL 1.0:
	https://opensource.org/licenses/CDDL-1.0

	BSD 3-Clause:
	https://opensource.org/licenses/BSD-3-Clause

	THIS SOFTWARE/SOURCE CODE IS PROVIDED "AS IS" WITH NO
	WARRANTY, GUARANTEE, OR CLAIM OF FITNESS FOR ANY PURPOSE
	EXPRESS OR IMPLIED
#/

;struct LNode (type T) {
	T data,
	~void next
}

/; method LNode
	/; get_next_type (type B) [LNode(B)]
		;return (self.next)[~LNode(B)]`
	;/

	/; get_next [LNode(T)]
		;return (self.next)[~LNode(T)]`
	;/
;/

;struct DLNode (type T) extends LNode(T) {
	super,
	~void prev
}

/; method DLNode
	/; get_prev_type (type B) [LNode(B)]
		;return (self.prev)[~LNode(B)]`
	;/

	/; get_prev [LNode(T)]
		;return (self.prev)[~LNode(T)]`
	;/
;/

;struct List {
	uint length,

	LNode
		first,
		last
}

;struct DList {
	uint length,

	DLNode
		first,
		last
}