001    /*
002     * Licensed under the Apache License, Version 2.0 (the "License");
003     * you may not use this file except in compliance with the License.
004     * You may obtain a copy of the License at
005     *
006     *      http://www.apache.org/licenses/LICENSE-2.0
007     *
008     * Unless required by applicable law or agreed to in writing, software
009     * distributed under the License is distributed on an "AS IS" BASIS,
010     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
011     * See the License for the specific language governing permissions and
012     * limitations under the License.
013     */
014    package org.apache.commons.classscan.builtin;
015    
016    import java.util.Iterator;
017    import java.util.NoSuchElementException;
018    
019    import org.apache.commons.classscan.ClassFile;
020    
021    public abstract class ClassFileIterator implements Iterator<ClassFile> {          
022                            
023            private ClassFile prefetch;
024    
025            abstract ClassFile getNext();
026    
027            @Override
028            public boolean hasNext() {
029                    if(prefetch==null) {
030                            prefetch= getNext();
031                    }
032                    return prefetch!=null;
033            }
034    
035            @Override
036            public ClassFile next() {
037                    if(prefetch!=null) {
038                            ClassFile rc= prefetch;
039                            prefetch= null;
040                            return rc;
041                    }
042                    ClassFile rc= getNext();
043                    if(rc==null) {
044                            throw new NoSuchElementException();
045                    }
046                    return rc;
047            }
048    
049            @Override
050            public void remove() {
051                    throw new UnsupportedOperationException();
052            }                       
053    }