http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorArray.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorArray.java b/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorArray.java deleted file mode 100644 index ee45935..0000000 --- a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorArray.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses 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 org.apache.jena.atlas.iterator; - -import java.util.Iterator ; -import java.util.NoSuchElementException ; - -/** Iterator over a Java base array */ -public final class IteratorArray<T> implements Iterator<T> -{ - /** Iterator over all the array elements */ - public static <T> IteratorArray<T> create(T[] array) - { return new IteratorArray<>(array, 0, array.length) ; } - - /** Iterator over array elements from start (inclusive) to finish (exclusive) */ - public static <T> IteratorArray<T> create(T[] array, int start, int finish) - { return new IteratorArray<>(array, start, finish) ; } - - private int idx ; - private int finishIdx ; - private T[] array ; - - private IteratorArray(T[] array, int start, int finish) - { - if ( start < 0 ) - throw new IllegalArgumentException("Start: "+start) ; - - if ( start > finish ) - throw new IllegalArgumentException("Start >= finish: "+start+" >= "+finish) ; - -// Instead: truncate to array length -// if ( finish > array.length ) -// throw new IllegalArgumentException("Finish outside array") ; -// -// Instead: immediate end iterator -// if ( start >= array.length ) -// throw new IllegalArgumentException("Start outside array") ; - - this.array = array ; - idx = start ; - finishIdx = finish ; - if ( idx < 0 ) - idx = 0 ; - if ( finishIdx > array.length ) - finishIdx = array.length ; - } - - @Override - public boolean hasNext() - { -// if ( idx < 0 ) -// return false ; - if ( idx >= finishIdx ) - return false ; - return true ; - } - - public T current() - { - if ( idx >= finishIdx ) - throw new NoSuchElementException() ; - return array[idx] ; - } - - @Override - public T next() - { - if ( ! hasNext() ) - throw new NoSuchElementException() ; - return array[idx++] ; - } - - @Override - public void remove() - { throw new UnsupportedOperationException("ArrayIterator") ; } -}
http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorBlockingQueue.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorBlockingQueue.java b/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorBlockingQueue.java deleted file mode 100644 index c11b262..0000000 --- a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorBlockingQueue.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses 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 org.apache.jena.atlas.iterator; - -import java.util.Iterator ; -import java.util.NoSuchElementException ; -import java.util.concurrent.BlockingQueue ; - -/** Iterator over a blocking queue until queue end seen */ - -public class IteratorBlockingQueue<T> implements Iterator<T> -{ - private BlockingQueue<T> queue ; - private boolean finished = false ; - private T slot = null ; - private T endMarker ; - - public IteratorBlockingQueue(BlockingQueue<T> queue, T endMarker) { this.queue = queue ; this.endMarker = endMarker ; } - - @Override - public boolean hasNext() - { - if ( finished ) return false ; - if ( slot != null ) return true ; - try - { - slot = queue.take() ; - if ( slot == endMarker ) - { - finished = true ; - slot = null ; - return false ; - } - return true ; - - } catch (InterruptedException ex) - { - ex.printStackTrace(); - - } - return false ; - } - - @Override - public T next() - { - if ( ! hasNext() ) - throw new NoSuchElementException() ; - T item = slot ; - slot = null ; - return item ; - } - - @Override - public void remove() - { throw new UnsupportedOperationException() ; } -} http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorConcat.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorConcat.java b/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorConcat.java deleted file mode 100644 index 65e6430..0000000 --- a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorConcat.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses 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 org.apache.jena.atlas.iterator; - -import java.util.Iterator ; -import java.util.List ; -import java.util.NoSuchElementException ; - -import org.apache.jena.atlas.lib.DS ; - -/** Iterator of Iterators - * IteratorConcat is better when there are lots of iterators to be joined. - * IteratorCons is slightly better for two iterators. - */ - -public class IteratorConcat<T> implements Iterator<T> -{ - private List<Iterator<T>> iterators = DS.list(); - int idx = -1 ; - private Iterator<T> current = null ; - private Iterator<T> removeFrom = null ; - boolean finished = false ; - - /** - * Usually, it is better to create an IteratorConcat explicitly and add iterator if there are going to be many. - * @param iter1 - * @param iter2 - * @return Iterator - * @see IteratorCons - */ - public static <T> Iterator<T> concat(Iterator<T> iter1, Iterator<T> iter2) - { - if (iter2 == null) return iter1 ; - if (iter1 == null) return iter2 ; - IteratorConcat<T> c = new IteratorConcat<>() ; - c.add(iter1) ; - c.add(iter2) ; - return c ; - } - - public IteratorConcat() {} - - - public void add(Iterator<T> iter) { iterators.add(iter) ; } - - @Override - public boolean hasNext() - { - if ( finished ) - return false ; - - if ( current != null && current.hasNext() ) - return true ; - - while ( idx < iterators.size()-1 ) - { - idx++ ; - current = iterators.get(idx) ; - if ( current.hasNext() ) - return true ; - // Nothing here - move on. - current = null ; - } - // idx has run off the end. - return false ; - } - - @Override - public T next() - { - if ( ! hasNext() ) - throw new NoSuchElementException() ; - removeFrom = current ; - return current.next(); - } - - @Override - public void remove() - { - if ( null == removeFrom ) - throw new IllegalStateException("no calls to next() since last call to remove()") ; - - removeFrom.remove() ; - removeFrom = null ; - - } - -} http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorCons.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorCons.java b/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorCons.java deleted file mode 100644 index c6cfd61..0000000 --- a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorCons.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses 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 org.apache.jena.atlas.iterator; - -import java.util.Iterator ; -import java.util.NoSuchElementException ; - -/** IteratorCons : the concatenation of two iterators. - * See also {@link IteratorConcat}. - * If there potentially many iterators to be joined, it is better to - * create an IteratorConcat explicitly and add each iterator. - * IteratorCons is slightly better in the two iterator case. - */ -public class IteratorCons<T> implements Iterator<T>, Iterable<T> -{ - // No - we don't really need IteratorCons and IteratorConcat - // Historical - IteratorCons came first. - // IteratorConcat is nearly as good as IteratorCons in the small when it - // it is hard to see when it woudl matter much. - - private Iterator<? extends T> iter1 ; - private Iterator<? extends T> iter2 ; - private Iterator<? extends T> removeFrom ; - - public static <X> Iterator<X> create(Iterator<? extends X> iter1, Iterator<? extends X> iter2) - { - if ( iter1 == null && iter2 == null ) - return Iter.nullIterator() ; - - // The casts are safe because an iterator can only return X, and does not take an X an an assignment. - if ( iter1 == null ) - { - @SuppressWarnings("unchecked") - Iterator<X> x = (Iterator<X>)iter2 ; - return x ; - } - - if ( iter2 == null ) - { - @SuppressWarnings("unchecked") - Iterator<X> x = (Iterator<X>)iter1 ; - return x ; - } - - return new IteratorCons<>(iter1, iter2) ; - } - - private IteratorCons(Iterator<? extends T> iter1, Iterator<? extends T> iter2) - { - this.iter1 = iter1 ; - this.iter2 = iter2 ; - } - - @Override - public boolean hasNext() - { - if ( iter1 != null ) - { - if ( iter1.hasNext() ) return true ; - // Iter1 ends - iter1 = null ; - } - - if ( iter2 != null ) - { - if ( iter2.hasNext() ) return true ; - // Iter2 ends - iter2 = null ; - } - return false ; - } - - @Override - public T next() - { - if ( ! hasNext() ) - throw new NoSuchElementException("Iterator2.next") ; - if ( iter1 != null ) - { - removeFrom = iter1 ; - return iter1.next(); - } - if ( iter2 != null ) - { - removeFrom = iter2 ; - return iter2.next(); - } - throw new Error("Iterator2.next") ; - } - - @Override - public void remove() - { - if ( null == removeFrom ) - throw new IllegalStateException("no calls to next() since last call to remove()") ; - - removeFrom.remove() ; - removeFrom = null ; - } - - @Override - public Iterator<T> iterator() - { - return this ; - } -} http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorDelayedInitialization.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorDelayedInitialization.java b/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorDelayedInitialization.java deleted file mode 100644 index 807105e..0000000 --- a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorDelayedInitialization.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses 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 org.apache.jena.atlas.iterator; - -import java.util.Iterator ; -import java.util.NoSuchElementException ; - -import org.apache.jena.atlas.lib.Closeable ; - -/** Class to delay the initialization of an iterator until first call of an Iterator operation. */ - -public abstract class IteratorDelayedInitialization<T> implements Iterator<T>, Closeable -{ - private boolean initialized = false ; - private Iterator<T> iterator ; - - public IteratorDelayedInitialization() {} - - private void init() - { - if ( ! initialized ) - { - initialized = true ; - iterator = initializeIterator() ; - } - } - - // Called exactly once - protected abstract Iterator<T> initializeIterator() ; - - @Override - public boolean hasNext() - { - init() ; - boolean b = iterator.hasNext() ; - if ( ! b ) - close() ; - return b ; - } - - @Override - public T next() - { - init() ; - try { return iterator.next() ; } - catch (NoSuchElementException ex) { close() ; throw(ex) ; } - } - - @Override - public void remove() - { - init() ; - iterator.remove() ; - } - - @Override - public void close() - { - Iter.close(iterator) ; - iterator = null ; - } -} http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorInteger.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorInteger.java b/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorInteger.java deleted file mode 100644 index 6fff27c..0000000 --- a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorInteger.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses 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 org.apache.jena.atlas.iterator; - -import java.util.Iterator ; - -public class IteratorInteger implements Iterator<Long> -{ - private final long start ; - private final long finish ; - private long current ; - - public static IteratorInteger range(long start, long finish) - { - return new IteratorInteger(start, finish) ; - } - - - /** [start, finish) */ - public IteratorInteger(long start, long finish) - { - this.start = start ; - this.finish = finish ; - this.current = start ; - } - - @Override - public boolean hasNext() - { - return ( current < finish ) ; - } - - @Override - public Long next() - { - Long v = current; - current++ ; - return v ; - } - - @Override - public void remove() - { throw new UnsupportedOperationException() ; } - -} http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorResourceClosing.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorResourceClosing.java b/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorResourceClosing.java deleted file mode 100644 index 89a54aa..0000000 --- a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorResourceClosing.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses 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 org.apache.jena.atlas.iterator; - -import java.util.Iterator; - -import org.apache.jena.atlas.AtlasException ; -import org.apache.jena.atlas.io.IO ; -import org.apache.jena.atlas.lib.Closeable ; - -/** - * This iterator will automatically close a {@link org.apache.jena.atlas.lib.Closeable} or {@link java.io.Closeable} - * resource when the iterator is exhausted. Alternatively, the resource will be closed when {@link #close()} is - * called. An {@link AtlasException} will be thrown if access is attempted after {@link #close()} has been called. - */ -public class IteratorResourceClosing<T> implements Iterator<T>, Closeable -{ - private final Iterator<T> iter ; - private final Object resource ; - private boolean finished; - - public IteratorResourceClosing(Iterator<T> iter, Closeable resource) - { - this.iter = iter; - this.resource = resource; - this.finished = false; - } - - public IteratorResourceClosing(Iterator<T> iter, java.io.Closeable resource) - { - this.iter = iter; - this.resource = resource ; - this.finished = false; - } - - private void checkFinished() - { - if (finished) throw new AtlasException("IteratorResourceClosing is closed, no further operations can be performed on it.") ; - } - - @Override - public boolean hasNext() - { - if (finished) - return false; - - boolean toReturn = iter.hasNext(); - - // Clean up if we are done - if (!toReturn) - { - close(); - } - return toReturn ; - } - - @Override - public T next() - { - checkFinished(); - return iter.next() ; - } - - @Override - public void remove() - { - checkFinished(); - iter.remove() ; - } - - @Override - public void close() - { - if (!finished) - { - Iter.close(iter) ; - if (null != resource) - { - if (resource instanceof Closeable) - { - ((Closeable)resource).close() ; - } - else - { - IO.close((java.io.Closeable)resource) ; - } - } - finished = true; - } - } -} http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorSlotted.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorSlotted.java b/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorSlotted.java deleted file mode 100644 index fd846dc..0000000 --- a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorSlotted.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses 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 org.apache.jena.atlas.iterator; - -import java.util.Iterator ; -import java.util.NoSuchElementException ; - -import org.apache.jena.atlas.lib.Lib ; - -/** An Iterator with a one slot lookahead. */ -public abstract class IteratorSlotted<T> implements Iterator<T> -{ - private boolean finished = false ; - private boolean slotIsSet = false ; - private T slot = null ; - - protected IteratorSlotted() { } - - // -------- The contract with the subclasses - - /** Implement this, not next() or nextBinding() */ - protected abstract T moveToNext() ; - - /** Can return true here then null from moveToNext() to indicate end. */ - protected abstract boolean hasMore() ; - // alter add a flag to say if null is a legal value. - - /** Close the iterator. */ - protected void closeIterator() { } - - // -------- The contract with the subclasses - - protected boolean isFinished() { return finished ; } - - @Override - public final boolean hasNext() - { - if ( finished ) - return false ; - if ( slotIsSet ) - return true ; - - boolean r = hasMore() ; - if ( ! r ) - { - close() ; - return false ; - } - - slot = moveToNext() ; - if ( slot == null ) { - close() ; - return false ; - } - - slotIsSet = true ; - return true ; - } - - /** final - autoclose and registration relies on it - implement moveToNextBinding() */ - @Override - public final T next() - { - if ( ! hasNext() ) throw new NoSuchElementException(Lib.className(this)) ; - - T obj = slot ; - slot = null ; - slotIsSet = false ; - return obj ; - } - - /** Look at the next element - returns null when there is no element */ - public final T peek() - { - return peek(null) ; - } - - /** Look at the next element - returns dft when there is no element */ - public final T peek(T dft) - { - hasNext() ; - if ( ! slotIsSet ) return dft ; - return slot ; - } - - @Override - public final void remove() - { - throw new UnsupportedOperationException(Lib.className(this)+".remove") ; - } - - public final void close() - { - if ( finished ) - return ; - closeIterator() ; - slotIsSet = false ; - slot = null ; - finished = true ; - } -} http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorTruncate.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorTruncate.java b/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorTruncate.java deleted file mode 100644 index 3c5c135..0000000 --- a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorTruncate.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses 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 org.apache.jena.atlas.iterator; - -import java.util.Iterator ; -import java.util.NoSuchElementException ; - -import org.apache.jena.util.iterator.NiceIterator ; - -/** Iterate while a condition return true, then stop */ -public class IteratorTruncate<T> implements Iterator<T> -{ - static public interface Test { boolean accept(Object object) ; } - private Test test ; - private T slot = null ; - private boolean active = true ; - private Iterator<T> iter ; - - public IteratorTruncate (Test test, Iterator<T> iter) - { this.test = test ; this.iter = iter ; } - - @Override - public boolean hasNext() - { - if ( ! active ) return false ; - if ( slot != null ) - return true ; - - if ( ! iter.hasNext() ) - { - active = false ; - return false ; - } - - slot = iter.next() ; - if ( test.accept(slot) ) - return true ; - // Once the test goes false, no longer yield anything. - NiceIterator.close(iter) ; - active = false ; - iter = null ; - slot = null ; - return false ; - } - - @Override - public T next() - { - if ( ! hasNext() ) - throw new NoSuchElementException("IteratorTruncate.next") ; - T x = slot ; - slot = null ; - return x ; - } - - @Override - public void remove() - { throw new UnsupportedOperationException("IteratorTruncate.remove"); } - - public void close() - { if ( iter != null ) NiceIterator.close(iter) ; } - -} http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorWithBuffer.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorWithBuffer.java b/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorWithBuffer.java deleted file mode 100644 index 7af9ac8..0000000 --- a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorWithBuffer.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses 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 org.apache.jena.atlas.iterator ; - -import java.util.ArrayList ; -import java.util.Iterator ; -import java.util.List ; -import java.util.NoSuchElementException ; - -/** - * Iterator that delays output by N slots so you can react to the output before - * it's yielded. See also {@link PeekIterator} (which predates this code). See also - * {@link IteratorWithHistory} for an iterator that remembers what it has yielded. - * - * @see PeekIterator - * @see PushbackIterator - * @see IteratorWithHistory - */ -public class IteratorWithBuffer<T> implements Iterator<T> { - private List<T> lookahead ; - private Iterator<T> iter ; - private int capacity ; - private boolean innerHasEnded = false ; - - public IteratorWithBuffer(Iterator<T> iter, int N) { - if ( N < 0 ) - throw new IllegalArgumentException("Buffering size < 0") ; - this.iter = iter ; - this.lookahead = new ArrayList<>(N) ; - this.capacity = N ; - // Fill the lookahead. - for ( int i = 0 ; i < N ; i++ ) { - if ( !iter.hasNext() ) { - atEndInner() ; - break ; - } - T nextItem = iter.next() ; - // System.out.println("Fill: "+nextItem) ; - lookahead.add(nextItem) ; - } - } - - @Override - public boolean hasNext() { - return lookahead.size() > 0 ; - } - - @Override - public T next() { - if ( !hasNext() ) - throw new NoSuchElementException(this.getClass().getName()) ; - - if ( !iter.hasNext() ) - atEndInner() ; - - T item = lookahead.remove(0) ; - // System.out.println("remove: "+item) ; - if ( iter.hasNext() ) { - // Should not throw NoSuchElementException. - T nextItem = iter.next() ; - // System.out.println("add : "+nextItem) ; - lookahead.add(nextItem) ; - } - return item ; - } - - @Override - public void remove() { - throw new UnsupportedOperationException("remove") ; - } - - /** - * Look at elements that will be returned by a subsequnet call of .next(). - * The next element is index 0, then index 1 etc. This operation is valid - * immediately after the constructor returns. Returns null for no such - * element (underlying iterator didn't yeild enough elements). Throws - * IndexOutOfBoundsException if an attempt i smade to go beyond the - * buffering window. - */ - public T peek(int idx) { - if ( idx < 0 || idx >= capacity ) - throw new IndexOutOfBoundsException("Index: " + idx) ; - if ( idx >= lookahead.size() ) - return null ; - return lookahead.get(idx) ; - } - - /** - * Return the current size of the lookahead. This can be used to tell the - * difference between an iterator returning null and an iterator that is - * just short. - */ - public int currentSize() { - return lookahead.size() ; - } - - /** - * Set the element to be returned by a subsequent .next(). Use with care. - * The original element to be returned at this position is lost. - */ - public void set(int idx, T item) { - lookahead.set(idx, item) ; - } - - /** Called when the underlying iterator ends */ - private void atEndInner() { - if ( !innerHasEnded ) { - innerHasEnded = true ; - endReachedInner() ; - } - } - - /** Called, once, at the end of the wrapped iterator. */ - protected void endReachedInner() {} - -} http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorWithHistory.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorWithHistory.java b/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorWithHistory.java deleted file mode 100644 index b5b800a..0000000 --- a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorWithHistory.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses 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 org.apache.jena.atlas.iterator; - -import java.util.ArrayList ; -import java.util.Iterator ; -import java.util.List ; -import java.util.NoSuchElementException ; - -/** Remembers the last N yields. - * See also {@link IteratorWithBuffer}, for an iterator that looks ahead to what it will yield. - * @see IteratorWithBuffer - * @see PeekIterator - * @see PushbackIterator - */ -public class IteratorWithHistory<T> implements Iterator<T> -{ - private List<T> history ; - private Iterator<T> iter ; - private int capacity ; - private boolean hasEnded = false ; - - public IteratorWithHistory(Iterator<T> iter, int N) { - this.iter = iter ; - this.history = new ArrayList<>(N) ; - this.capacity = N ; - } - - @Override - public boolean hasNext() { - boolean b = iter.hasNext() ; - if ( !b ) - atEnd() ; - return b ; - } - - @Override - public T next() { - T item = null ; - try { - item = iter.next() ; - } - catch (NoSuchElementException ex) { - atEnd() ; - } - // Shuffle up, add at bottom. - if ( history.size() >= capacity ) - history.remove(history.size() - 1) ; - history.add(0, item) ; - return item ; - } - - @Override - public void remove() - { throw new UnsupportedOperationException("remove") ; } - - /** - * return the previous i'th element returned by next(). 0 means last call of - * next. History is retained after the end of iteration. - * - * @return Element or null for no such element (that is for haven't yielded - * that many elements). - * @throws IndexOutOfBoundsException - * if index is negative. - */ - public T getPrevious(int idx) { - if ( idx >= capacity || idx < 0 ) - throw new IndexOutOfBoundsException("Index: " + idx) ; - if ( idx >= history.size() ) - return null ; - return history.get(idx) ; - } - - /** - * Return the current size of the histiory. This can be used to tell the - * difference between an iterator returning null and an iterator that is - * just short. - */ - public int currentSize() { - return history.size() ; - } - - /** Called when the underlying iterator ends */ - protected void atEnd() { - if ( !hasEnded ) { - hasEnded = true ; - endReached() ; - } - } - - /** Called, once, at the end */ - protected void endReached() { } -} http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorWrapper.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorWrapper.java b/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorWrapper.java deleted file mode 100644 index 83901f2..0000000 --- a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorWrapper.java +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses 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 org.apache.jena.atlas.iterator; - -import java.util.Iterator ; - -public class IteratorWrapper<T> implements Iterator<T> -{ - protected final Iterator<T> iterator ; - - public IteratorWrapper(Iterator<T> iterator) - { - this.iterator = iterator ; - } - - @Override - public boolean hasNext() { return iterator.hasNext() ; } - - @Override - public T next() { return iterator.next() ; } - - @Override - public void remove() { iterator.remove() ; } -} - http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/iterator/MapUtils.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/MapUtils.java b/jena-arq/src/main/java/org/apache/jena/atlas/iterator/MapUtils.java deleted file mode 100644 index 3c6492e..0000000 --- a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/MapUtils.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses 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 org.apache.jena.atlas.iterator; - -import java.util.Map ; - -import org.apache.jena.atlas.lib.ActionKeyValue ; - - - -public class MapUtils -{ - // Map specific operations - - public static <K, V> void apply(Map<K, V> map, ActionKeyValue<K, V> action) - { - for ( Map.Entry<K,V> entry : map.entrySet() ) - action.apply(entry.getKey(), entry.getValue()) ; - } -} http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/iterator/NullIterator.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/NullIterator.java b/jena-arq/src/main/java/org/apache/jena/atlas/iterator/NullIterator.java deleted file mode 100644 index ff2b2f1..0000000 --- a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/NullIterator.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses 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 org.apache.jena.atlas.iterator; - -import java.util.Iterator ; -import java.util.NoSuchElementException ; - -/** Null Iterator - also guaranteed sharable and immutable */ -public class NullIterator<T> implements Iterator<T>, Iterable<T> -{ - @Override - public boolean hasNext() - { - return false ; - } - - @Override - public T next() - { - throw new NoSuchElementException("NullIterator.next") ; - } - - @Override - public void remove() - { throw new NoSuchElementException("NullIterator.remove") ;} - - @Override - public Iterator<T> iterator() - { - return this ; - } - -} http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/iterator/PeekIterator.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/PeekIterator.java b/jena-arq/src/main/java/org/apache/jena/atlas/iterator/PeekIterator.java deleted file mode 100644 index d9c0d2e..0000000 --- a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/PeekIterator.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses 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 org.apache.jena.atlas.iterator; - -import java.util.Iterator ; -import java.util.NoSuchElementException ; -import java.util.Queue ; - -/** PeekIterator - is one slot ahead from the wrapped iterator */ -public class PeekIterator<T> implements Iterator<T> -{ - private final Iterator<T> iter ; - private boolean finished = false ; - // Slot always full when iterator active. Null is a a valid element. - private T slot ; - - public static <T> PeekIterator<T> create(PeekIterator<T> iter) { return iter ; } - public static <T> PeekIterator<T> create(Iterator<T> iter) - { - if ( iter instanceof PeekIterator<?> ) - return (PeekIterator<T>)iter ; - return new PeekIterator<>(iter) ; - } - - public PeekIterator(Iterator<T> iter) - { - this.iter = iter ; - fill() ; - } - - private void fill() - { - if ( finished ) return ; - if ( iter.hasNext() ) - slot = iter.next(); - else - { - finished = true ; - slot = null ; - } - } - - @Override - public boolean hasNext() - { - if ( finished ) - return false ; - return true ; - } - - /** Peek the next element or return null - * @see Queue#peek - */ - public T peek() - { - if ( finished ) - return null ; - return slot ; - } - - /** Peek the next element or throw NoSuchElementException */ - public T element() - { - if ( finished ) - throw new NoSuchElementException() ; - return slot ; - } - - @Override - public T next() - { - if ( finished ) - throw new NoSuchElementException() ; - T x = slot ; - // Move on now so the slot is loaded for peek. - fill() ; - return x ; - } - - @Override - public void remove() - { throw new UnsupportedOperationException() ; } - -} http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/iterator/PushbackIterator.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/PushbackIterator.java b/jena-arq/src/main/java/org/apache/jena/atlas/iterator/PushbackIterator.java deleted file mode 100644 index 355c563..0000000 --- a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/PushbackIterator.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses 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 org.apache.jena.atlas.iterator ; - -import java.util.ArrayDeque ; -import java.util.Deque ; -import java.util.Iterator ; - -/** An iterator where you can push items backinto the iterator, to be yielded (LIFO) next time. - * @see PeekIterator - */ -public class PushbackIterator<T> implements Iterator<T> { - private Deque<T> items = new ArrayDeque<>() ; - private Iterator<T> iter ; - - public PushbackIterator(Iterator<T> iter) { - if ( iter == null ) - throw new IllegalArgumentException("Wrapped iterator can't be null") ; - this.iter = iter ; - } - - public void pushback(T item) { - items.push(item) ; - } - - @Override - public boolean hasNext() { - if ( !items.isEmpty() ) - return true ; - return iter.hasNext() ; - } - - @Override - public T next() { - if ( !items.isEmpty() ) - return items.pop() ; - return iter.next() ; - } - - @Override - public void remove() { - // Need to track if last next() was from the stack or not. - throw new UnsupportedOperationException() ; - } - -} http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/iterator/RepeatApplyIterator.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/RepeatApplyIterator.java b/jena-arq/src/main/java/org/apache/jena/atlas/iterator/RepeatApplyIterator.java deleted file mode 100644 index e504265..0000000 --- a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/RepeatApplyIterator.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses 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 org.apache.jena.atlas.iterator; - -import java.util.Iterator ; -import java.util.NoSuchElementException ; - -import org.apache.jena.atlas.lib.Closeable ; -import org.apache.jena.atlas.lib.Lib ; - -public abstract class RepeatApplyIterator<T> implements Iterator<T>, Closeable -{ - private Iterator<T> input ; - private boolean finished = false ; - private Iterator<T> currentStage = null ; - - protected RepeatApplyIterator(Iterator<T> input) - { - this.input = input ; - } - - @Override - public boolean hasNext() - { - if ( finished ) - return false ; - for ( ;; ) - { - if ( currentStage == null && input.hasNext() ) - { - T nextItem = input.next(); - currentStage = makeNextStage(nextItem) ; - } - - if ( currentStage == null ) - { - hasFinished() ; - finished = true ; - return false ; - } - - if ( currentStage.hasNext() ) - return true ; - - currentStage = null ; - } - } - - protected abstract Iterator<T> makeNextStage(T t) ; - - protected void hasFinished() {} - - @Override - public T next() - { - if ( ! hasNext() ) - throw new NoSuchElementException(Lib.className(this)+".next()/finished") ; - return currentStage.next() ; - } - - @Override - public final void remove() - { throw new UnsupportedOperationException() ; } - - @Override - public void close() - { - Iter.close(input) ; - } -} http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/iterator/SingletonIterator.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/SingletonIterator.java b/jena-arq/src/main/java/org/apache/jena/atlas/iterator/SingletonIterator.java deleted file mode 100644 index 9c49e48..0000000 --- a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/SingletonIterator.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses 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 org.apache.jena.atlas.iterator; - -import java.util.Iterator ; -import java.util.NoSuchElementException ; - -public class SingletonIterator<T> implements Iterator<T> -{ - private T thing = null ; - private boolean yielded = false ; - - public static <T> SingletonIterator<T> create(T thing) { return new SingletonIterator<>(thing) ; } - - public SingletonIterator(T thing) { this.thing = thing ; } - - @Override - public boolean hasNext() - { - return ! yielded ; - } - - @Override - public T next() - { - if ( yielded ) - throw new NoSuchElementException("SingletonIterator.next") ; - yielded = true ; - return thing ; - } - - @Override - public void remove() - { throw new NoSuchElementException("SingletonIterator.remove") ;} -} http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/iterator/Transform.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/Transform.java b/jena-arq/src/main/java/org/apache/jena/atlas/iterator/Transform.java deleted file mode 100644 index d5d6a0a..0000000 --- a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/Transform.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses 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 org.apache.jena.atlas.iterator; - -public interface Transform <T, R> { R convert(T item) ; } http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/iterator/WrapperIterator.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/WrapperIterator.java b/jena-arq/src/main/java/org/apache/jena/atlas/iterator/WrapperIterator.java deleted file mode 100644 index 0a8a0b0..0000000 --- a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/WrapperIterator.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses 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 org.apache.jena.atlas.iterator; - -import java.util.Iterator ; - -public class WrapperIterator<T> implements Iterator<T> -{ - private final Iterator<T> iter ; - - public WrapperIterator(Iterator<T> iter) { this.iter = iter ; } - - @Override - public boolean hasNext() - { - return iter.hasNext() ; - } - - @Override - public T next() - { - return iter.next() ; - } - - @Override - public void remove() - { iter.remove() ; } - -} http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/lib/ActionKeyValue.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/lib/ActionKeyValue.java b/jena-arq/src/main/java/org/apache/jena/atlas/lib/ActionKeyValue.java deleted file mode 100644 index 25b8fe4..0000000 --- a/jena-arq/src/main/java/org/apache/jena/atlas/lib/ActionKeyValue.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses 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 org.apache.jena.atlas.lib; - -@FunctionalInterface -public interface ActionKeyValue<KeyType, ValueType> -{ - public void apply(KeyType key, ValueType value) ; -} http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/lib/AlarmClock.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/lib/AlarmClock.java b/jena-arq/src/main/java/org/apache/jena/atlas/lib/AlarmClock.java deleted file mode 100644 index 6210bf1..0000000 --- a/jena-arq/src/main/java/org/apache/jena/atlas/lib/AlarmClock.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses 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 org.apache.jena.atlas.lib ; - -import java.util.concurrent.ScheduledThreadPoolExecutor ; -import java.util.concurrent.TimeUnit ; - -/** - * An AlarmClock is an object that will make a callback (with a value) at a - * preset time. Simple abstraction of add/reset/cancel of a Runnable. Currently, - * backed by {@link ScheduledThreadPoolExecutor} - */ -public class AlarmClock { - private ScheduledThreadPoolExecutor timer = new ScheduledThreadPoolExecutor(1) ; - - /* package */AlarmClock() {} - - static private AlarmClock singleton = new AlarmClock() ; - - /** Global singleton for general use */ - static public AlarmClock get() { - return singleton ; - } - - /** Add a task to be called after a delay (in milliseconds) */ - public void add(Runnable task, long delay) { - if ( task == null ) - throw new IllegalArgumentException("Task is null") ; - timer.schedule(task, delay, TimeUnit.MILLISECONDS) ; - } - - /** Reschedule a task to now run after a different delay from now (in milliseconds) */ - public void reset(Runnable task, long delay) { - if ( task == null ) - throw new IllegalArgumentException("Task is null") ; - cancel(task) ; - add(task, delay) ; - } - - /** Cancel a task */ - public void cancel(Runnable task) { - if ( task == null ) - throw new IllegalArgumentException("Task is null") ; - timer.remove(task) ; - } - - // public int getCount() { return timer.getQueue().size(); } - - /** Clean up */ - public void release() { - timer.shutdownNow() ; - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/lib/Alg.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/lib/Alg.java b/jena-arq/src/main/java/org/apache/jena/atlas/lib/Alg.java deleted file mode 100644 index 3a3dacb..0000000 --- a/jena-arq/src/main/java/org/apache/jena/atlas/lib/Alg.java +++ /dev/null @@ -1,239 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses 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 org.apache.jena.atlas.lib; - -import java.nio.IntBuffer ; -import java.util.Comparator ; -import java.util.List ; - -public class Alg -{ - // Linear search is really there to test binary search. - static int linearSearch(IntBuffer buff, int key) - { - return linearSearch(buff, 0, buff.limit(), key) ; - } - - static int linearSearch(IntBuffer buff, int low, int high, int key) - { - int len = buff.limit(); // In int units. - check(len, low, high) ; - for ( int i = low ; i < high ; i++ ) - { - int k2 = buff.get(i) ; - if ( k2 == key ) - return i ; - if ( k2 > key ) - return encodeIndex(i) ; - } - return encodeIndex(high) ; - } - - // The encoded offset (insertion point) when not found. - public static final int encodeIndex(int i) { return -(i+1) ; } - public static final int decodeIndex(int i) { return -(i+1) ; } - - - /* Both Arrays and Collections have a binary search implementation. - * Arrays searches Object[] arrays, and Collections searches List<T> - * - * But sometime things are not so easy, and it isn't neat as to - * what is being searched, like a slice of an NIO Buffer - * - * http://en.wikipedia.org/wiki/Binary_search - */ - - public static int binarySearch(IntBuffer buff, int value) - { - return binarySearch(buff, 0, buff.limit(), value) ; - } - - public static int binarySearch(IntBuffer buff, int low, int high, int value) - { - // Low is inclusive, high is exclusive. - check(buff.limit(), low, high) ; - high -- ; // Convert high to inclusive. - - // Non-tail-recursive form, because tail-recursion removal - // is not required by java (unlike scheme). - - while (low <= high) - { - int mid = (low + high) >>> 1 ; // int divide by 2 : better: mid = low + ((high - low) / 2) - int k = buff.get(mid) ; - - // Two comparisons : see wikipedia for one comparison version. - if (k < value) - low = mid + 1 ; - else if ( k > value) - high = mid - 1 ; - else - return mid ; - } - // On exit, when not finding, low is the least value - // above, including off the end of the array. - return encodeIndex(low) ; - } - - // Alt form - no early termination. -// public static int binarySearch2(IntBuffer buff, int value, int low, int high) -// { -// // Low is inclusive, high is exclusive -// check(buff.limit(), low, high) ; -// int N = high ; -// -// // Uses high as exclusive index -// while (low < high) -// { -// int mid = (low + high) >>> 1 ; // int divide by 2 : better: mid = low + ((high - low) / 2) -// int k = buff.get(mid) ; -// -// // Two comparisons : see wikipedia for one comparison version. -// if ( k < value) -// low = mid + 1 ; -// else -// //can't be high = mid-1: here A[mid] >= value, -// //so high can't be < mid if A[mid] == value -// high = mid; -// } -// if (low < N && buff.get(low) == value ) -// return low ; -// else -// return enc(low) ; -// } - - private static void check(int len, int low, int high) - { - if ( low > high ) - throw new IllegalArgumentException("Low index ("+low+") is not less than high index ("+high+")") ; - if ( low < 0 ) - throw new ArrayIndexOutOfBoundsException("Low index is negative: "+low) ; - if ( high > len ) - throw new ArrayIndexOutOfBoundsException("High index is too large: "+high) ; - } - - // Why isn't this in the java RT? - public static <T> int binarySearch( List<T> array, int low, int high, T value, Comparator<T> comparator ) - { - check(array.size(), low, high) ; - high -- ; - - while( low <= high ) - { - int mid = ( low + high ) >>> 1 ; - - T k = array.get(mid) ; - - int x = comparator.compare(k, value) ; - if ( x < 0 ) - low = mid + 1 ; - else if ( x > 0 ) - high = mid - 1 ; - else - return mid ; - } - return encodeIndex(low) ; - } - - // Why isn't this in the java RT? - public static <T extends Comparable<? super T>> - int binarySearch(T[] array, int low, int high, T value) - { - check(array.length, low, high) ; - high -- ; - - while( low <= high ) - { - int mid = ( low + high ) >>> 1 ; - - T k = array[mid] ; - - int x = k.compareTo(value) ; // comparator.compare(k, value) ; - if ( x < 0 ) - low = mid + 1 ; - else if ( x > 0 ) - high = mid - 1 ; - else - return mid ; - } - return encodeIndex(low) ; - } - - - // Use Arrays.binarySearch functions - -// public static int binarySearch(int buff[], int value) -// { return binarySearch(buff, value, 0, buff.length) ; } -// -// public static int binarySearch(int buff[], int low, int high, int value) -// { -// check(buff.length, low, high) ; -// // Low is inclusive, high is exclusive. -// high -- ; // Convert high to inclusive. -// -// // Non-tail-recursive form, because tail-recursion removal -// // is not required by java (unlike scheme). -// -// while (low <= high) -// { -// int mid = (low + high) >>> 1 ; // int divide by 2 -// int k = buff[mid] ; -// -// if (k < value) -// low = mid + 1 ; -// else if ( k > value) -// high = mid - 1 ; -// else -// return mid ; -// } -// // On exit, when not finding, low is the least value -// // above, including off the end of the array. -// return encodeIndex(low) ; -// } -// -// -// public static int binarySearch(long buff[], int value) -// { return binarySearch(buff, value, 0, buff.length) ; } -// -// public static int binarySearch(long buff[], int low, int high, long value) -// { -// check(buff.length, low, high) ; -// // Low is inclusive, high is exclusive. -// high -- ; // Convert high to inclusive. -// -// // Non-tail-recursive form, because tail-recursion removal -// // is not required by java (unlike scheme). -// -// while (low <= high) -// { -// int mid = (low + high) >>> 1 ; // int divide by 2 -// long k = buff[mid] ; -// -// if (k < value) -// low = mid + 1 ; -// else if ( k > value) -// high = mid - 1 ; -// else -// return mid ; -// } -// // On exit, when not finding, low is the least value -// // above, including off the end of the array. -// return encodeIndex(low) ; -// } -} http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/lib/Allocator.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/lib/Allocator.java b/jena-arq/src/main/java/org/apache/jena/atlas/lib/Allocator.java deleted file mode 100644 index 84005de..0000000 --- a/jena-arq/src/main/java/org/apache/jena/atlas/lib/Allocator.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses 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 org.apache.jena.atlas.lib; - -public interface Allocator<T> -{ - /** Allocate a new T, different from others allocated */ - public T create() ; - -// /** Reset the process of allocation - may cause equivalent objects to be created from before the reset */ -// public void reset() ; -} http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/lib/ArrayUtils.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/lib/ArrayUtils.java b/jena-arq/src/main/java/org/apache/jena/atlas/lib/ArrayUtils.java deleted file mode 100644 index d45a107..0000000 --- a/jena-arq/src/main/java/org/apache/jena/atlas/lib/ArrayUtils.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses 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 org.apache.jena.atlas.lib; - -import java.lang.reflect.Array ; -import java.util.Arrays ; - -/** Collection of array-related operations */ -public class ArrayUtils -{ - private ArrayUtils() {} - - /** Allocate an array of generic type T (initialized to null) */ - @SuppressWarnings("unchecked") - public static <T> T[] alloc(Class<T> cls, int n) - { - return (T[])Array.newInstance(cls, n) ; - } - - // Compiles but fails at runtime (class cast exception if the reuls is assigned or accessed) -// @SuppressWarnings("unchecked") -// T[] array = (T[])new Object[n] ; -// or is T known -// @SuppressWarnings("unchecked") -// Set<T> x[] = new Set[length] ; -// return array ; - - /** Allocation space and copy */ - public static <T> T[] copy(T[] array) - { - return copy(array, 0, array.length) ; - } - - /** Allocation space and copy */ - public static <T> T[] copy(T[] array, int start, int finish) - { - return Arrays.copyOfRange(array, start, finish) ; - -// // Java5. -// // Fails for arrays of length 0; -// if ( array.length <= start ) -// throw new IllegalArgumentException("Zero length array not supported") ; -// @SuppressWarnings("unchecked") -// T[] array2 = (T[])Array.newInstance(array[start].getClass(), finish-start) ; -// System.arraycopy(array, start, array2, 0, finish-start) ; -// return array2 ; - } -} http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/lib/BitsInt.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/lib/BitsInt.java b/jena-arq/src/main/java/org/apache/jena/atlas/lib/BitsInt.java deleted file mode 100644 index 1e112a0..0000000 --- a/jena-arq/src/main/java/org/apache/jena/atlas/lib/BitsInt.java +++ /dev/null @@ -1,309 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses 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 org.apache.jena.atlas.lib; - -// NB shifting is "mod 32" -- <<32 is a no-op (not a clear). -// http://mindprod.com/jgloss/masking.html - -/** Utilities for manipulating a bit pattern which are held in a 32 bit int. - * @see BitsLong - */ -public final class BitsInt -{ - private BitsInt() {} - - private static int IntLen = Integer.SIZE ; - - /** Extract the value packed into bits start (inclusive) and finish (exclusive). - * The value is returned in the low part of the returned int. - * The low bit is bit zero. - * @param bits - * @param start - * @param finish - * @return int - */ - - public static final - int unpack(int bits, int start, int finish) - { - check(start, finish) ; - if ( finish == 0 ) return 0 ; - // Remove top bits by moving up. Clear bottom bits by them moving down. - return (bits<<(IntLen-finish)) >>> ((IntLen-finish)+start) ; - } - - /** Place the value into the bit pattern between start and finish - * and returns the new int. - * @param bits - * @param value - * @param start - * @param finish - * @return int - */ - public static final - int pack(int bits, int value, int start, int finish) - { - check(start, finish) ; - bits = clear$(bits, start, finish) ; - bits = bits | (value<<start) ; - return bits ; - } - - /** Get bits from a hex string. - * - * @param str - * @param startChar Index of first character (counted from the left, string style). - * @param finishChar Index after the last character (counted from the left, string style). - * @return int - */ - - public static final - int unpack(String str, int startChar, int finishChar) - { - String s = str.substring(startChar, finishChar) ; - return Integer.parseInt(s, 16) ; - } - - /** Set the bits specificied. - * - * @param bits Pattern - * @param bitIndex - * @return Modified pattern - */ - public static final - int set(int bits, int bitIndex) - { - check(bitIndex) ; - return set$(bits, bitIndex) ; - } - - /** Set the bits from start (inc) to finish (exc) to one - * - * @param bits Pattern - * @param start start (inclusive) - * @param finish finish (exclusive) - * @return Modified pattern - */ - public static final - int set(int bits, int start, int finish) - { - check(start, finish) ; - return set$(bits, start, finish) ; - } - - /** Test whether a bit is the same as isSet - * @param bits Pattern - * @param isSet Test whether is set or not. - * @param bitIndex Bit index - * @return Boolean - */ - public static final - boolean test(int bits, boolean isSet, int bitIndex) - { - check(bitIndex) ; - return test$(bits, isSet, bitIndex) ; - } - - /** Test whether a bit is set - * @param bits Pattern - * @param bitIndex Bit index - * @return Boolean - */ - public static final - boolean isSet(int bits, int bitIndex) - { - check(bitIndex) ; - return test$(bits, true, bitIndex) ; - } - - /** Test whether a range has a specific value or not - * @param bits Pattern - * @param value Value to test for - * @param start start (inclusive) - * @param finish finish (exclusive) - * @return Boolean - */ - public static final - boolean test(int bits, int value, int start, int finish) - { - check(start, finish) ; - return test$(bits, value, start, finish) ; - } - - /** Get the bits from start (inclusive) to finish (exclusive), - * leaving them aligned in the int. See also unpack, returns - * the value found at that place. - * @see #unpack(int, int, int) - * @param bits - * @param start - * @param finish - * @return int - */ - - public static final - int access(int bits, int start, int finish) - { - check(start, finish) ; - return access$(bits, start, finish) ; - } - - /** - * Clear the bits specified. - * @param bits - * @param start - * @param finish - * @return int - */ - public static final - int clear(int bits, int start, int finish) - { - check(start, finish) ; - return clear$(bits, start, finish) ; - } - - /** - * Create a mask that has ones between bit positions start (inc) and finish (exc), - * and zeros elsewhere. - * @param start - * @param finish - * @return int - */ - public static final - int mask(int start, int finish) - { - check(start, finish) ; - return mask$(start, finish) ; - } - - /** - * Create a mask that has zeros between bit positions start (inc) and finish (exc), - * and ones elsewhere - * @param start - * @param finish - * @return int - */ - public static final - int maskZero(int start, int finish) - { - check(start, finish) ; - return maskZero$(start, finish) ; - } - - private static final - int clear$(int bits, int start, int finish) - { - int mask = maskZero$(start, finish) ; - bits = bits & mask ; - return bits ; - } - - private static final - int set$(int bits, int bitIndex) - { - int mask = mask$(bitIndex) ; - return bits | mask ; - } - - private static final - int set$(int bits, int start, int finish) - { - int mask = mask$(start, finish) ; - return bits | mask ; - } - - private static - boolean test$(int bits, boolean isSet, int bitIndex) - { - return isSet == access$(bits, bitIndex) ; - } - - private static - boolean test$(int bits, int value, int start, int finish) - { - int v = access$(bits, start, finish) ; - return v == value ; - } - - - - private static final - boolean access$(int bits, int bitIndex) - { - int mask = mask$(bitIndex) ; - return (bits & mask) != 0L ; - } - - private static final - int access$(int bits, int start, int finish) - { - // Two ways: -// int mask = mask$(start, finish) ; -// return bits & mask ; - - return ( (bits<<(IntLen-finish)) >>> (IntLen-finish+start) ) << start ; - } - - - private static final - int mask$(int bitIndex) - { - return 1 << bitIndex ; - } - - private static final - int mask$(int start, int finish) - { - // int mask = 0 ; - // if ( finish == int.SIZE ) - // // <<int.SIZE is a no-op - // mask = -1 ; - // else - // mask = (1L<<finish)-1 ; - if ( finish == 0 ) - // So start is zero and so the mask is zero. - return 0 ; - - - int mask = -1 ; -// mask = mask << (IntLen-finish) >>> (intLen-finish) ; // Clear the top bits -// return mask >>> start << start ; // Clear the bottom bits - return mask << (IntLen-finish) >>> (IntLen-finish+start) << start ; - } - - private static final - int maskZero$(int start, int finish) - { - return ~mask$(start, finish) ; - } - - private static final - void check(int bitIndex) - { - if ( bitIndex < 0 || bitIndex >= IntLen ) throw new IllegalArgumentException("Illegal bit index: "+bitIndex) ; - } - - private static final - void check(int start, int finish) - { - if ( start < 0 || start >= IntLen ) throw new IllegalArgumentException("Illegal start: "+start) ; - if ( finish < 0 || finish > IntLen ) throw new IllegalArgumentException("Illegal finish: "+finish) ; - if ( start > finish ) throw new IllegalArgumentException("Illegal range: ("+start+", "+finish+")") ; - } - -}
