On 18.08.2017, at 15:27, Marshall Schor <[email protected]> wrote: > > This was a surprise to me, when I first learned of it. > > I guess I had implicitly assumed that if I said > -moveTo(aFooSub_b), > --where there was a type FooSub_b which was "equal" (using the index's > compare operation) > a subsequent "get" would get a FooSub_b instance. > > Instead, I get the "left-most" FS in the index which compares "equal" with > xxx, > which could be a FooSub_a instance > - which is neither a sub or supertype of xxx
You obtain your iterator from an index-over-FooSub_a. Everything that you get back from this index should be a FooSub_a or a subtype. If you tell an iterator over this index to moveTo(xxx), then it would set the iterator pointer to the insertion location of xxx. I don't find it surprising that the iterator will return a FooSub_a or a subtype instead of a xxx. What I find a bit of surprising is, that the moveTo(xxx) operation accepts the xxx in the first place. Let's say you define an index over the feature A and xxx does not even have the feature A. It seems a proper reaction in this case would be an illegal argument exception. Cheers, -- Richard
