26a9c1f COLLECTION Making iterations pinnable

4 files Authored by dpal 14 years ago, Committed by sgallagh 14 years ago,
    COLLECTION Making iterations pinnable
    
    This is a feature that helps ELAPI.
    It makes lookup of the fields that need
    to be resolved for every event a bit faster.
    The idea is to be able to put a 'pin'
    into a specific place while iterating
    the collection and make this place a new
    "wrap around" place for the collection.
    This means that next time you
    iterate this collection you will start
    iterating from the next item and
    the item you got before pin will be last
    in your iteration cycle.
    Here is the example:
    Assume you have two collections that you need
    to compare and perform some action on collection
    1 based on the presense of the item in collection 2.
    Collection1 = A, B, C, D, E. F
    Collection2 = A, C, F
    The usual approach is to try A from collection 1
    against A, B, C from collection 2. "A" will be found
    right away. But to find "F" it has to be compared
    to "A" and "C" first. The fact that the collections
    are to some extent ordered can in some cases
    help to reduce the number of comparisons.
    If we found "C" in the list we can put a "pin"
    into the collection there causing the iterator
    to warp at this "pin" point. Since "D" and "E"
    are not in the second collection we will have
    to make same amount of comparisons in traditional
    or "pinned" case to not find them.
    To find "F" in pinned case there will be just one
    comparison.
    Traditional case = 1 + 3 + 2 + 3 + 3 + 3 = 15
    Pinned case = 1 + 3 + 1 + 3 + 3 + 1 = 12
    It is a 20% comparison reduction.