def dispatch
bend-collections@1.0.0.0 · src/containers/doubly_linked_list.bend:140
import bend-collections@1.0.0.0/src/containers/doubly_linked_list.bend as DoublyLinkedList
import Base
import bend-collections@1.0.0.0/src/containers/internal/dlist_storage.bend as R
import bend-collections@1.0.0.0/src/containers/types/internal_dlist.bend as I
import bend-collections@1.0.0.0/src/containers/types/doubly_linked_list.bend as E
140def dispatch(~T: Data, s: DList<T>, op: E.Op<T>) -> DList<T> & E.Obs<T>:
141 DL{+tag, +depth, +cap, raw, gens} = s
142 match op:
143 case E.Length{}:
144 length_result(~T, tag, depth, cap, gens, R.length(~T, raw))
145 case E.ToList{}:
146 list_result(~T, tag, depth, cap, gens, R.to_list(~T, raw))
147 case E.PushFront{x}:
148 pushed_obs(~T, inserted(~T, tag, depth, cap, gens, R.push_front_free(~T, raw, x)))
149 case E.PushBack{x}:
150 pushed_obs(~T, inserted(~T, tag, depth, cap, gens, R.push_back_free(~T, raw, x)))
151 case E.Get{h}:
152 value_result(~T, tag, depth, cap, gens, R.get(~T, raw, old_handle(h)))
153 case E.Set{h, x}:
154 unit_result(~T, tag, depth, cap, gens, R.set(~T, raw, old_handle(h), x))
155 case E.Remove{E.H{+owner, +id, generation}}:
156 removed(~T, tag, depth, cap, gens, id, generation, R.remove(~T, raw, I.H{owner, id}))
157 case E.Next{h}:
158 neighbour_result(~T, tag, depth, cap, gens, R.next(~T, raw, old_handle(h)))
159 case E.Prev{h}:
160 neighbour_result(~T, tag, depth, cap, gens, R.prev(~T, raw, old_handle(h)))
161 case E.InsertBefore{h, x}:
162 relative_result(~T, tag, depth, cap, gens, R.insert_before_reuse(~T, raw, old_handle(h), x))
163 case E.InsertAfter{h, x}:
164 relative_result(~T, tag, depth, cap, gens, R.insert_after_reuse(~T, raw, old_handle(h), x))