/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* JFlex 1.8.2 *
* Copyright (C) 1998-2018 Gerwin Klein <lsf@jflex.de> *
* All rights reserved. *
* *
* License: BSD *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
package jflex.dfa;
import jflex.logging.Out;
A list of pairs of states. Used in old DFA minimization.
Author: Gerwin Klein Version: JFlex 1.8.2
/**
* A list of pairs of states. Used in old DFA minimization.
*
* @author Gerwin Klein
* @version JFlex 1.8.2
*/
public final class StatePairList {
// implemented as two arrays of integers.
// java.util classes proved too inefficient.
private int[] p;
private int[] q;
private int num;
Constructor for StatePairList. /** Constructor for StatePairList. */
public StatePairList() {
p = new int[8];
q = new int[8];
num = 0;
}
addPair.
Params: - i – a int.
- j – a int.
/**
* addPair.
*
* @param i a int.
* @param j a int.
*/
public void addPair(int i, int j) {
for (int x = 0; x < num; x++) {
if (p[x] == i && q[x] == j) {
return;
}
}
if (num >= p.length) {
increaseSize(num);
}
p[num] = i;
q[num] = j;
num++;
}
markAll.
Params: - list – an array of
StatePairList
objects. - equiv – an array of boolean.
/**
* markAll.
*
* @param list an array of {@link StatePairList} objects.
* @param equiv an array of boolean.
*/
public void markAll(StatePairList[][] list, boolean[][] equiv) {
for (int x = 0; x < num; x++) {
int i = p[x];
int j = q[x];
if (equiv[i][j]) {
equiv[i][j] = false;
if (list[i][j] != null) list[i][j].markAll(list, equiv);
}
}
}
private void increaseSize(int length) {
length = Math.max(length + 1, 4 * p.length);
Out.debug("increasing length to " + length); // $NON-NLS-1$
int[] pn = new int[length];
int[] qn = new int[length];
System.arraycopy(p, 0, pn, 0, p.length);
System.arraycopy(q, 0, qn, 0, q.length);
p = pn;
q = qn;
}
}