View Javadoc

1   /*
2    * #%L
3    * Native ARchive plugin for Maven
4    * %%
5    * Copyright (C) 2002 - 2014 NAR Maven Plugin developers.
6    * %%
7    * Licensed under the Apache License, Version 2.0 (the "License");
8    * you may not use this file except in compliance with the License.
9    * You may obtain a copy of the License at
10   * 
11   * http://www.apache.org/licenses/LICENSE-2.0
12   * 
13   * Unless required by applicable law or agreed to in writing, software
14   * distributed under the License is distributed on an "AS IS" BASIS,
15   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16   * See the License for the specific language governing permissions and
17   * limitations under the License.
18   * #L%
19   */
20  package com.github.maven_nar.cpptasks.parser;
21  
22  public class BranchState extends AbstractParserState {
23    private final char[] branchChars;
24    private final AbstractParserState[] branchStates;
25    private final AbstractParserState noMatchState;
26  
27    public BranchState(final AbstractParser parser, final char[] branchChars, final AbstractParserState[] branchStates,
28        final AbstractParserState noMatchState) {
29      super(parser);
30      this.branchChars = branchChars.clone();
31      this.branchStates = branchStates.clone();
32      this.noMatchState = noMatchState;
33    }
34  
35    @Override
36    public AbstractParserState consume(final char ch) {
37      AbstractParserState state;
38      for (int i = 0; i < this.branchChars.length; i++) {
39        if (ch == this.branchChars[i]) {
40          state = this.branchStates[i];
41          return state.consume(ch);
42        }
43      }
44      state = getNoMatchState();
45      if (state != null) {
46        return state.consume(ch);
47      }
48      return state;
49    }
50  
51    protected AbstractParserState getNoMatchState() {
52      return this.noMatchState;
53    }
54  }