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

de.regnis.q.sequence.media.QSequenceDiscardingMedia Maven / Gradle / Ivy

The newest version!
/*
 * ====================================================================
 * Copyright (c) 2004 Marc Strapetz, [email protected]. 
 * All rights reserved.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. Use is
 * subject to license terms.
 * ====================================================================
 */

package de.regnis.q.sequence.media;

import de.regnis.q.sequence.core.*;

/**
 * @author Marc Strapetz
 */
public class QSequenceDiscardingMedia implements QSequenceMedia, QSequenceMediaIndexTransformer {

	// Fields =================================================================

	private final QSequenceIntMedia media;
	private final QSequenceCanceller canceller;
	private final QSequenceDiscardingMediaBlock leftBlock;
	private final QSequenceDiscardingMediaBlock rightBlock;

	private final int[] undiscardedLeftSymbols;
	private final int[] undiscardedRightSymbols;
	private final int undiscardedLeftSymbolCount;
	private final int undiscardedRightSymbolCount;

	// Setup ==================================================================

	public QSequenceDiscardingMedia(QSequenceIntMedia media, QSequenceDiscardingMediaConfusionDetector confusionDetector, QSequenceCanceller canceller) {
		this.media = media;
		this.canceller = canceller;
		this.leftBlock = new QSequenceDiscardingMediaLeftBlock(this.media);
		this.rightBlock = new QSequenceDiscardingMediaRightBlock(this.media);

		leftBlock.init(rightBlock, confusionDetector);
		rightBlock.init(leftBlock, confusionDetector);

		undiscardedLeftSymbols = leftBlock.getUndiscardedSymbols();
		undiscardedLeftSymbolCount = leftBlock.getUndiscardedSymbolCount();
		undiscardedRightSymbols = rightBlock.getUndiscardedSymbols();
		undiscardedRightSymbolCount = rightBlock.getUndiscardedSymbolCount();
	}

	// Implemented ============================================================

	public int getLeftLength() {
		return undiscardedLeftSymbolCount;
	}

	public int getRightLength() {
		return undiscardedRightSymbolCount;
	}

	public boolean equals(int leftIndex, int rightIndex) throws QSequenceCancelledException {
		canceller.checkCancelled();
		return undiscardedLeftSymbols[leftIndex] == undiscardedRightSymbols[rightIndex];
	}

	public int getMediaLeftIndex(int index) {
		return leftBlock.getMediaIndex(index);
	}

	public int getMediaRightIndex(int index) {
		return rightBlock.getMediaIndex(index);
	}

	public int getMediaLeftLength() {
		return media.getLeftLength();
	}

	public int getMediaRightLength() {
		return media.getRightLength();
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy