All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jlibs.core.graph.sequences.ArraySequence Maven / Gradle / Ivy

There is a newer version: 3.0.1
Show newest version
/**
 * Copyright 2015 Santhosh Kumar Tekuri
 *
 * The JLibs authors license this file to you under the Apache License,
 * version 2.0 (the "License"); you may not use this file except in compliance
 * with the License. You may obtain a copy of the License at:
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations
 * under the License.
 */

package jlibs.core.graph.sequences;

/**
 * @author Santhosh Kumar T
 */
public class ArraySequence extends AbstractSequence{
    private E[] array;
    private int start;
    private int end;

    public ArraySequence(E... array){
        this(array, 0, array.length);
    }
    
    public ArraySequence(E[] array, int start, int end){
        if(start<0)
            throw new ArrayIndexOutOfBoundsException(start);
        if(end>array.length)
            throw new ArrayIndexOutOfBoundsException(end);
        if(start>end)
            throw new IllegalArgumentException(String.format("start(%d) must be less than or equal to end(%d)", start, end));
        
        this.array = array;
        this.start = start;
        this.end = end;
        _reset();
    }

    /*-------------------------------------------------[ Advancing ]---------------------------------------------------*/

    private int pos;

    @Override
    protected E findNext(){
        pos++;
        return pos copy(){
        return new ArraySequence(array, start, end);
    }

    /*-------------------------------------------------[ Optimization ]---------------------------------------------------*/

    @Override
    public int length(){
        return end-start;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy