Property definitions

more_collections $ UnrolledNode :: defaultinit
# Node composing an `UnrolledList`
# Stores the elements in the `items` array. The elements in the `items` array
# begin at `head_index` and end right before `tail_index`. The data is contiguous,
# but there can be empty cells at the beginning and the end of the array.
private class UnrolledNode[E]

	var prev: nullable UnrolledNode[E] = null

	var next: nullable UnrolledNode[E] = null

	# Desired length of `items`
	var capacity: Int

	# `Array` of items in this node, filled with `null`
	var items = new Array[nullable E].filled_with(null, capacity) is lazy

	# Index of the first element in `items`
	var head_index = 0

	# Index after the last element in `items`
	var tail_index = 0

	fun length: Int do return tail_index - head_index

	fun full: Bool do return length == capacity

	fun is_empty: Bool do return tail_index == head_index

	# Move towards the head all elements before `index` of `displace` cells
	fun move_tail(index, displace: Int)
		for i in [tail_index-1..head_index+index].step(-1) do
			items[i+displace] = items[i]

	# Move towards the tail all elements at and after `index` of `displace` cells
	fun move_head(index, displace: Int)
		for i in [head_index..head_index+index[ do
			items[i-displace] = items[i]