List = {} local List = List function List.New() return {first = 0, last = -1} end function List.Size(list) if list.first > list.last then return 0 else return list.last + 1 - list.first end end function List.Empty(list) return list.first > list.last end function List.Get(list, index) local index = list.first + index return list[index] end function List.PushFront(list, value) local first = list.first - 1 list.first = first list[first] = value end function List.PushBack(list, value) local last = list.last + 1 list.last = last list[last] = value end function List.PopFront(list) local first = list.first if first > list.last then LogError("list is empty") end local value = list[first] list[first] = nil -- to allow garbage collection list.first = first + 1 return value end function List.PopBack(list) local last = list.last if list.first > last then LogError("list is empty") end local value = list[last] list[last] = nil -- to allow garbage collection list.last = last - 1 return value end function List.GetBack(list) local last = list.last return list[last] end function List.GetFront(list) local first = list.first return list[first] end