Copyright (c) 2000, 2011 IBM Corporation and others.
This program and the accompanying materials
are made available under the terms of the Eclipse Public License 2.0
which accompanies this distribution, and is available at
https://www.eclipse.org/legal/epl-2.0/
SPDX-License-Identifier: EPL-2.0
Contributors:
IBM Corporation - initial API and implementation
/*******************************************************************************
* Copyright (c) 2000, 2011 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.compare.rangedifferencer;
For breaking an object to compare into a sequence of comparable entities.
It is used by RangeDifferencer
to find longest sequences of
matching and non-matching ranges.
For example, to compare two text documents and find longest common sequences
of matching and non-matching lines, the implementation must break the document
into lines. getRangeCount
would return the number of lines in the
document, and rangesEqual
would compare a specified line given
with one in another IRangeComparator
.
Clients should implement this interface; there is no standard implementation.
/**
* For breaking an object to compare into a sequence of comparable entities.
* <p>
* It is used by <code>RangeDifferencer</code> to find longest sequences of
* matching and non-matching ranges.
* <p>
* For example, to compare two text documents and find longest common sequences
* of matching and non-matching lines, the implementation must break the document
* into lines. <code>getRangeCount</code> would return the number of lines in the
* document, and <code>rangesEqual</code> would compare a specified line given
* with one in another <code>IRangeComparator</code>.
* </p>
* <p>
* Clients should implement this interface; there is no standard implementation.
* </p>
*/
public interface IRangeComparator {
Returns the number of comparable entities.
Returns: the number of comparable entities
/**
* Returns the number of comparable entities.
*
* @return the number of comparable entities
*/
int getRangeCount();
Returns whether the comparable entity given by the first index
matches an entity specified by the other IRangeComparator
and index.
Params: - thisIndex – the index of the comparable entity within this
IRangeComparator
- other – the IRangeComparator to compare this with
- otherIndex – the index of the comparable entity within the other
IRangeComparator
Returns: true
if the comparable entities are equal
/**
* Returns whether the comparable entity given by the first index
* matches an entity specified by the other <code>IRangeComparator</code> and index.
*
* @param thisIndex the index of the comparable entity within this <code>IRangeComparator</code>
* @param other the IRangeComparator to compare this with
* @param otherIndex the index of the comparable entity within the other <code>IRangeComparator</code>
* @return <code>true</code> if the comparable entities are equal
*/
boolean rangesEqual(int thisIndex, IRangeComparator other, int otherIndex);
Returns whether a comparison should be skipped because it would be too costly (or lengthy).
Params: - length – a number on which to base the decision whether to return
true
or false
- maxLength – another number on which to base the decision whether to return
true
or false
- other – the other
IRangeComparator
to compare with
Returns: true
to avoid a too lengthy range comparison
/**
* Returns whether a comparison should be skipped because it would be too costly (or lengthy).
*
* @param length a number on which to base the decision whether to return
* <code>true</code> or <code>false</code>
* @param maxLength another number on which to base the decision whether to return
* <code>true</code> or <code>false</code>
* @param other the other <code>IRangeComparator</code> to compare with
* @return <code>true</code> to avoid a too lengthy range comparison
*/
boolean skipRangeComparison(int length, int maxLength, IRangeComparator other);
}