unlike find interval by key, matching elements could be in left /and/ right subtree
We use template type "T" here instead of the enclosing struct's IntervalType
so that we can from externally query with any type of interval object
(note: outdated, see below)
Timing data:
UnrolledList < D array < SList (emsi)
Notes:
Node*[] performed more poorly than UnrolledList on my personal Mac laptop,
However, dlang GC-backed Node*[] performed BETTER than UnrolledList (<5%, but consistent)
on linux, perhaps due to no memory pressure and GC not needing to free.
As this is a bioinformatics tool likely to be run on decent linux machines,
we will leave as dyanmic array.
TODO: benchmark return Node[]
TODO: benchmark return Node** and out count vs non-GC container
find interval(s) overlapping given interval
unlike find interval by key, matching elements could be in left /and/ right subtree
We use template type "T" here instead of the enclosing struct's IntervalType so that we can from externally query with any type of interval object
(note: outdated, see below) Timing data: UnrolledList < D array < SList (emsi)
Notes: Node*[] performed more poorly than UnrolledList on my personal Mac laptop, However, dlang GC-backed Node*[] performed BETTER than UnrolledList (<5%, but consistent) on linux, perhaps due to no memory pressure and GC not needing to free. As this is a bioinformatics tool likely to be run on decent linux machines, we will leave as dyanmic array. TODO: benchmark return Node[] TODO: benchmark return Node** and out count vs non-GC container