001: /*
002: * ====================================================================
003: *
004: * The Apache Software License, Version 1.1
005: *
006: * Copyright (c) 1999-2003 The Apache Software Foundation.
007: * All rights reserved.
008: *
009: * Redistribution and use in source and binary forms, with or without
010: * modification, are permitted provided that the following conditions
011: * are met:
012: *
013: * 1. Redistributions of source code must retain the above copyright
014: * notice, this list of conditions and the following disclaimer.
015: *
016: * 2. Redistributions in binary form must reproduce the above copyright
017: * notice, this list of conditions and the following disclaimer in
018: * the documentation and/or other materials provided with the
019: * distribution.
020: *
021: * 3. The end-user documentation included with the redistribution, if
022: * any, must include the following acknowlegement:
023: * "This product includes software developed by the
024: * Apache Software Foundation (http://www.apache.org/)."
025: * Alternately, this acknowlegement may appear in the software itself,
026: * if and wherever such third-party acknowlegements normally appear.
027: *
028: * 4. The names "The Jakarta Project", "Commons", and "Apache Software
029: * Foundation" must not be used to endorse or promote products derived
030: * from this software without prior written permission. For written
031: * permission, please contact apache@apache.org.
032: *
033: * 5. Products derived from this software may not be called "Apache"
034: * nor may "Apache" appear in their names without prior written
035: * permission of the Apache Group.
036: *
037: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
038: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
039: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
040: * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
041: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
042: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
043: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
044: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
045: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
046: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
047: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
048: * SUCH DAMAGE.
049: * ====================================================================
050: *
051: * This software consists of voluntary contributions made by many
052: * individuals on behalf of the Apache Software Foundation. For more
053: * information on the Apache Software Foundation, please see
054: * <http://www.apache.org/>.
055: *
056: * Adapted and repackaged from Jakarta Commons JRCS by Rob MacGrogan.
057: *
058: */
059:
060: package JLibDiff;
061:
062: public final class JRCSMyersPathNode {
063: public final int i;
064: public final int j;
065: public final JRCSMyersPathNode prev;
066:
067: /**
068: * Creates a diffpath of a single node.
069: * @param i The position in the original sequence.
070: * @param j The position in the revised sequence.
071: */
072: public JRCSMyersPathNode(int i, int j) {
073: this (i, j, null);
074: }
075:
076: /**
077: * Adds a node to an existing diffpath.
078: * @param i The position in the original sequence for the new node.
079: * @param j The position in the revised sequence for the new node.
080: * @param prev The previous node in the path.
081: */
082: public JRCSMyersPathNode(int i, int j, JRCSMyersPathNode prev) {
083: if (prev != null && (i - prev.i) == (j - prev.j))
084: throw new IllegalArgumentException(
085: "node points to a diagonal");
086: this .i = i;
087: this .j = j;
088: this .prev = prev;
089: }
090:
091: public String toString() {
092: StringBuffer buf = new StringBuffer("[");
093: JRCSMyersPathNode node = this ;
094: while (node != null) {
095: buf.append("(");
096: buf.append(Integer.toString(node.i));
097: buf.append(",");
098: buf.append(Integer.toString(node.j));
099: buf.append(")");
100: node = node.prev;
101: }
102: buf.append("]");
103: return buf.toString();
104: }
105: }
|