diff options
Diffstat (limited to 'gnu/java/util/regex/BacktrackStack.java')
-rw-r--r-- | gnu/java/util/regex/BacktrackStack.java | 128 |
1 files changed, 70 insertions, 58 deletions
diff --git a/gnu/java/util/regex/BacktrackStack.java b/gnu/java/util/regex/BacktrackStack.java index d711945e4..68472615e 100644 --- a/gnu/java/util/regex/BacktrackStack.java +++ b/gnu/java/util/regex/BacktrackStack.java @@ -44,69 +44,81 @@ package gnu.java.util.regex; * * @author Ito Kazumitsu</A> */ -final class BacktrackStack { +final class BacktrackStack +{ /** A set of data to be used for backtracking. */ - static class Backtrack { - /** REToken to which to go back */ - REToken token; + static class Backtrack + { + /** REToken to which to go back */ + REToken token; /** CharIndexed on which matches are being searched for. */ - CharIndexed input; + CharIndexed input; /** REMatch to be used by the REToken token. */ - REMatch match; + REMatch match; /** Some parameter used by the token's backtrack method. */ - Object param; - Backtrack(REToken token, CharIndexed input, REMatch match, Object param) { - this.token = token; - this.input = input; - // REMatch may change before backtracking is needed. So we - // keep a clone of it. - this.match = (REMatch) match.clone(); - this.param = param; - } - } - - Backtrack[] stack; - private int size; - private int capacity; - private static final int INITIAL_CAPACITY = 32; - private static final int CAPACITY_INCREMENT = 16; - - BacktrackStack() { - stack = new Backtrack[INITIAL_CAPACITY]; - size = 0; - capacity = INITIAL_CAPACITY; - } - - boolean empty() { - return size == 0; - } - - Backtrack peek() { - return stack[size - 1]; - } - - Backtrack pop() { - Backtrack bt = stack[--size]; - stack[size] = null; - return bt; - } - - void clear() { - for (int i = 0; i < size; i++) { - stack[i] = null; - } - size = 0; - } - - void push(Backtrack bt) { - if (size >= capacity) { - capacity += CAPACITY_INCREMENT; - Backtrack[] newStack = new Backtrack[capacity]; - System.arraycopy(stack, 0, newStack, 0, size); - stack = newStack; - } - stack[size++] = bt; + Object param; + Backtrack (REToken token, CharIndexed input, REMatch match, + Object param) + { + this.token = token; + this.input = input; + // REMatch may change before backtracking is needed. So we + // keep a clone of it. + this.match = (REMatch) match.clone (); + this.param = param; } + } + + Backtrack[] stack; + private int size; + private int capacity; + private static final int INITIAL_CAPACITY = 32; + private static final int CAPACITY_INCREMENT = 16; + + BacktrackStack () + { + stack = new Backtrack[INITIAL_CAPACITY]; + size = 0; + capacity = INITIAL_CAPACITY; + } + + boolean empty () + { + return size == 0; + } + + Backtrack peek () + { + return stack[size - 1]; + } + + Backtrack pop () + { + Backtrack bt = stack[--size]; + stack[size] = null; + return bt; + } + + void clear () + { + for (int i = 0; i < size; i++) + { + stack[i] = null; + } + size = 0; + } + + void push (Backtrack bt) + { + if (size >= capacity) + { + capacity += CAPACITY_INCREMENT; + Backtrack[]newStack = new Backtrack[capacity]; + System.arraycopy (stack, 0, newStack, 0, size); + stack = newStack; + } + stack[size++] = bt; + } } |