The implementation appears to take a positioning element, (let's call it "pos"),
and then start at an annotation where

  * for following: the begin is > pos.end
  * for preceding: the end is < pos.begin

The Annotation index guarantees that "begin" positions are in ascending order as
you go thru the index.

But there's no such guarantee for "end" positions.  They can jump back and
forth.  So the logic for preceding: starting with some annotation whose end is <
pos.begin in no way guarantees that all the found annotations will have this
property.

What was the design intent for preceding?

If it was to get FSs that precede the pos in the index, then this logic is not
doing that - it's initially skipping some number of preceding items (where the
preceding FSs have ends >= pos.begin), and then providing results where the end
could easily bounce around the pos.begin position.

-Marshall

Reply via email to