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

com.github.difflib.algorithm.myers.PathNode Maven / Gradle / Ivy

There is a newer version: 4.12
Show newest version
/*
 * Copyright 2009-2017 java-diff-utils.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.difflib.algorithm.myers;

/**
 * A node in a diffpath.
 *
 * @author Juanco Anez
 */
public final class PathNode {

    /**
     * Position in the original sequence.
     */
    public final int i;
    /**
     * Position in the revised sequence.
     */
    public final int j;
    /**
     * The previous node in the path.
     */
    public final PathNode prev;

    public final boolean snake;

    public final boolean bootstrap;

    /**
     * Concatenates a new path node with an existing diffpath.
     *
     * @param i The position in the original sequence for the new node.
     * @param j The position in the revised sequence for the new node.
     * @param prev The previous node in the path.
     */
    public PathNode(int i, int j, boolean snake, boolean bootstrap, PathNode prev) {
        this.i = i;
        this.j = j;
        this.bootstrap = bootstrap;
        if (snake) {
            this.prev = prev;
        } else {
            this.prev = prev == null ? null : prev.previousSnake();
        }
        this.snake = snake;
    }

    public boolean isSnake() {
        return snake;
    }

    /**
     * Is this a bootstrap node?
     * 

* In bottstrap nodes one of the two corrdinates is less than zero. * * @return tru if this is a bootstrap node. */ public boolean isBootstrap() { return bootstrap; } /** * Skips sequences of {@link PathNode PathNodes} until a snake or bootstrap node is found, or the end of the * path is reached. * * @return The next first {@link PathNode} or bootstrap node in the path, or null if none found. */ public final PathNode previousSnake() { if (isBootstrap()) { return null; } if (!isSnake() && prev != null) { return prev.previousSnake(); } return this; } /** * {@inheritDoc} */ @Override public String toString() { StringBuilder buf = new StringBuilder("["); PathNode node = this; while (node != null) { buf.append("("); buf.append(node.i); buf.append(","); buf.append(node.j); buf.append(")"); node = node.prev; } buf.append("]"); return buf.toString(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy