package com.wrox.algorithms.bsearch;

import com.wrox.algorithms.lists.List;

public class ListInserter {
    /** pomocnicza wyszukiwarka elementów */
    private final ListSearcher _searcher;

    /**
     * Konstruktor.
     * Parametr: instancja pomocniczej wyszukiwarki elementów
     */
    public ListInserter(ListSearcher searcher) {
        assert searcher != null : "nie określono wyszukiwarki";
        _searcher = searcher;
    }

    /**
     * Wstawienie wartości do listy z zachowaniem jej posortowania     *
     * Parametry:
     *   - lista, do której wstawiane są elementy
     *   - wstawiana wartość
     * Zwracany wynik: pozycja, na którą element został wstawiony
     */
    public int insert(List list, Object value) {
        assert list != null : "nie określono listy";

        int index = _searcher.search(list, value);

        if (index < 0) {
            index = -(index + 1);
        }

        list.insert(index, value);

        return index;
    }
}
