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))

Uses (27)

Used by (2)