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

com.squarespace.less.core.CharPattern Maven / Gradle / Ivy

The newest version!
/**
 * Copyright (c) 2014 SQUARESPACE, Inc.
 *
 * 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.squarespace.less.core;


/**
 * Given a character pattern, builds a Knuth-Morris-Pratt 'next' table, used to
 * efficiently locate the pattern within a longer string.
 */
public class CharPattern {

  private final char[] chars;

  private final int[] next;

  /**
   * Constructs a K-M-P 'next' table for the list of characters.
   */
  public CharPattern(char ... chars) {
    this.chars = chars;
    int len = chars.length;
    int j = -1;
    next = new int[len];
    for (int i = 0; i < len; i++) {
      if (i == 0) {
        next[i] = -1;
      } else if (chars[i] != chars[j]) {
        next[i] = j;
      } else {
        next[i] = next[j];
      }
      while (j >= 0 && chars[i] != chars[j]) {
        j = next[j];
      }
      j++;
    }
  }

  /**
   * Returns the character pattern.
   */
  public char[] pattern() {
    return chars;
  }

  /**
   * Returns the 'next' table, used by the K-M-P algorithm.
   */
  public int[] next() {
    return next;
  }

  /**
   * Returns the number of characters in the pattern.
   */
  public int length() {
    return chars.length;
  }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy