package com.wrox.algorithms.bsearch;

import com.wrox.algorithms.iteration.Iterator;
import com.wrox.algorithms.lists.List;
import com.wrox.algorithms.sorting.Comparator;

public class LinearListSearcher implements ListSearcher {
    /**  komparator wyznaczający porządek porównywanych elementów */
    private final Comparator _comparator;

    /**
     * Konstruktor.
     * Parametr: komparator wyznaczający porządek porównywanych elementów
     */
    public LinearListSearcher(Comparator comparator) {
        assert comparator != null : "nie określono komparatora";
        _comparator = comparator;
    }

    public int search(List list, Object key) {
        assert list != null : "nie określono listy";

        int index = 0;
        Iterator i = list.iterator();

        for (i.first(); !i.isDone(); i.next()) {
            int cmp = _comparator.compare(key, i.current());
            if (cmp == 0) {
                return index;
            } else if (cmp < 0) {
                break;
            }

            ++index;
        }

        return -(index + 1);
    }
}
