1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 /**
19 * @author Nikolay A. Kuznetsov
20 */
21 package java.util.regex;
22
23 import java.util.ArrayList;
24
25 /**
26 * This class represent atomic group (?>X), once X matches,
27 * this match become unchangeable till the end of the match.
28 *
29 * @author Nikolay A. Kuznetsov
30 */
31 class AtomicJointSet extends NonCapJointSet {
32
33 public AtomicJointSet(ArrayList children, FSet fSet) {
34 super(children, fSet);
35 }
36
37 /**
38 * Returns stringIndex+shift, the next position to match
39 */
40 public int matches(int stringIndex, CharSequence testString,
41 MatchResultImpl matchResult) {
42 int start = matchResult.getConsumed(groupIndex);
43 matchResult.setConsumed(groupIndex, stringIndex);
44
45 int size = children.size();
46 for (int i = 0; i < size; i++) {
47 AbstractSet e = (AbstractSet) children.get(i);
48 int shift = e.matches(stringIndex, testString, matchResult);
49 if (shift >= 0) {
50 // AtomicFset always returns true, but saves the index to run
51 // this next.match() from;
52 return next.matches(((AtomicFSet) fSet).getIndex(), testString,
53 matchResult);
54 }
55 }
56
57 matchResult.setConsumed(groupIndex, start);
58 return -1;
59 }
60
61 public void setNext(AbstractSet next) {
62 this.next = next;
63 }
64
65 public AbstractSet getNext() {
66 return next;
67 }
68
69 protected String getName() {
70 return "NonCapJointSet"; //$NON-NLS-1$
71 }
72 }