ea3421badffdde31449c6dd598e8971ae62481ea
[vxquery.git] / vxquery-core / src / main / java / org / apache / vxquery / runtime / functions / strings / SubstringCharacterIterator.java
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 package org.apache.vxquery.runtime.functions.strings;
18
19 public class SubstringCharacterIterator implements ICharacterIterator {
20 private final ICharacterIterator in;
21 private int start;
22 private int length;
23 private int charOffset;
24
25 public SubstringCharacterIterator(ICharacterIterator in) {
26 this.in = in;
27 }
28
29 public void setBounds(int start, int length) {
30 this.start = start;
31 this.length = length;
32 }
33
34 @Override
35 public char next() {
36 char c = in.next();
37 // Only drill down if there is more to the string.
38 if (c == ICharacterIterator.EOS_CHAR) {
39 return c;
40 } else if (charOffset < start) {
41 ++charOffset;
42 return next();
43 } else if (charOffset < start + length || length == Integer.MAX_VALUE) {
44 ++charOffset;
45 return c;
46 }
47 return (char) 0;
48 }
49
50 @Override
51 public void reset() {
52 in.reset();
53 charOffset = 1;
54 }
55
56 }

Copyright 2016, The Apache Software Foundation.