/* * Copyright (C) 2015 Information Retrieval Group at Universidad Autónoma * de Madrid, http://ir.ii.uam.es * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package es.uam.eps.ir.ranksys.fast.feature; import es.uam.eps.ir.ranksys.fast.index.FastFeatureIndex; import es.uam.eps.ir.ranksys.fast.index.FastItemIndex; import java.util.stream.Stream; import org.jooq.lambda.tuple.Tuple2; /** * Abstract FastFeatureData, implementing the interfaces of FastItemIndex and * FastFeatureIndex by delegating to implementations of these. * * @author Saúl Vargas (saul.vargas@uam.es) * * @param <I> type of the items * @param <F> type of the features * @param <V> type of the information about item-feature pairs */ public abstract class AbstractFastFeatureData<I, F, V> implements FastFeatureData<I, F, V> { private final FastItemIndex<I> ii; private final FastFeatureIndex<F> fi; /** * Constructor. * * @param ii item index * @param fi feature index */ protected AbstractFastFeatureData(FastItemIndex<I> ii, FastFeatureIndex<F> fi) { this.ii = ii; this.fi = fi; } @Override public Stream<I> getItemsWithFeatures() { return getIidxWithFeatures().mapToObj(this::iidx2item); } @Override public Stream<F> getFeaturesWithItems() { return getFidxWithItems().mapToObj(this::fidx2feature); } @Override public int numFeatures(I i) { return numFeatures(item2iidx(i)); } @Override public int numItems(F f) { return numItems(feature2fidx(f)); } @Override public Stream<Tuple2<I, V>> getFeatureItems(F f) { return getFidxItems(feature2fidx(f)).map(this::iidx2item); } @Override public Stream<Tuple2<F, V>> getItemFeatures(I i) { return getIidxFeatures(item2iidx(i)).map(this::fidx2feature); } @Override public boolean containsItem(I i) { return ii.containsItem(i); } @Override public int numItems() { return ii.numItems(); } @Override public Stream<I> getAllItems() { return ii.getAllItems(); } @Override public boolean containsFeature(F f) { return fi.containsFeature(f); } @Override public int numFeatures() { return fi.numFeatures(); } @Override public Stream<F> getAllFeatures() { return fi.getAllFeatures(); } @Override public int item2iidx(I i) { return ii.item2iidx(i); } @Override public I iidx2item(int iidx) { return ii.iidx2item(iidx); } @Override public int feature2fidx(F f) { return fi.feature2fidx(f); } @Override public F fidx2feature(int fidx) { return fi.fidx2feature(fidx); } }