All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.github.evenjn.align.alphabet.TupleAlignmentAlphabetBuilderAscendantWrapper Maven / Gradle / Ivy

There is a newer version: 0.6.0
Show newest version
package org.github.evenjn.align.alphabet;

import java.util.function.Consumer;
import java.util.function.Function;

import org.github.evenjn.align.Tael;
import org.github.evenjn.knit.KnittingTuple;
import org.github.evenjn.yarn.Bi;
import org.github.evenjn.yarn.Cursable;
import org.github.evenjn.yarn.Hook;
import org.github.evenjn.yarn.ProgressSpawner;
import org.github.evenjn.yarn.Tuple;

public class TupleAlignmentAlphabetBuilderAscendantWrapper implements TupleAlignmentAlphabetBuilder{

	private TupleAlignmentAlphabetBuilder wrapped;
	private Function, Iterable>> ascendants_provider;

	private TupleAlignmentAlphabetBuilderAscendantWrapper(
			TupleAlignmentAlphabetBuilder wrapped,
			Function, Iterable>> ascendants_provider) {
		this.wrapped = wrapped;
		this.ascendants_provider = ascendants_provider;
	}

	public static 
			TupleAlignmentAlphabetBuilder
			wrap( TupleAlignmentAlphabetBuilder builder,
					Function, Iterable>> demux ) {
		return new TupleAlignmentAlphabetBuilderAscendantWrapper(
				builder, demux );

	}
	
	@Override
	public TupleAlignmentAlphabet build(
			Cursable, Tuple>> data,
			ProgressSpawner progress_spawner ) {
		TupleAlignmentAlphabet build = wrapped.build( data, progress_spawner );
		
		TupleAlignmentAlphabet result = new TupleAlignmentAlphabet<>( );
		for (int z = 0; z < build.size( ); z++) {
			Tael pp =
					build.get( z );
			Iterable> ascendants = ascendants_provider.apply( pp.above );
			for (Tuple ascendant : ascendants) {
				Tael nu =
						new Tael<>( );
				nu.above = KnittingTuple.wrap( ascendant );
				nu.below = pp.below;
			}
		}
		return result;
	}

	@Override
	public void setPrinters( Function> logger,
			Function a_printer,
			Function b_printer ) {
		wrapped.setPrinters( logger, a_printer, b_printer );
	}

	@Override
	public void setMinMax( int min_above, int max_above, int min_below,
			int max_below ) {
		wrapped.setMinMax( min_above, max_above, min_below, max_below );
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy