http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/io/InputStreamBuffered.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/main/java/org/apache/jena/atlas/io/InputStreamBuffered.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/io/InputStreamBuffered.java
deleted file mode 100644
index 9b03d43..0000000
--- a/jena-arq/src/main/java/org/apache/jena/atlas/io/InputStreamBuffered.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.io;
-
-import static org.apache.jena.atlas.io.IO.EOF ;
-
-import java.io.IOException ;
-import java.io.InputStream ;
-
-/** InputStream optimizing for one byte at a time operation.
- *  BufferedInputStream operations have synchronization making 
- *  reading one byte at a time expensive.
- *  
- *  @see java.io.InputStream
- *  @see java.io.BufferedInputStream
- */
-public final class InputStreamBuffered extends InputStream 
-{
-    public static int DFT_BUFSIZE = 16*1024 ;
-    private InputStream source ;
-    private byte[] buffer ;
-    private int buffLen = 0 ;
-    private int idx = 0 ;
-    private long count = 0 ;
-    
-    public InputStreamBuffered(InputStream input)
-    {
-        this(input, DFT_BUFSIZE) ;
-    }
-    
-    public InputStreamBuffered(InputStream input, int bufsize)
-    {
-        super() ;
-        this.source = input ;
-        this.buffer = new byte[bufsize] ;
-        this.idx = 0 ;
-        this.buffLen = 0 ;
-    }
-
-//    @Override
-//    public int read(byte b[], int off, int len) throws IOException
-//    {
-//    }
-    
-    @Override
-    public int read() throws IOException
-    {
-        return advance() ;
-    }
-    
-    @Override
-    public void close() throws IOException
-    {
-        source.close() ;
-    }
-    
-    public final int advance()
-    {
-        if ( idx >= buffLen )
-            // Points outside the array.  Refill it 
-            fillArray() ;
-        
-        // Advance one character.
-        if ( buffLen >= 0 )
-        {
-            byte ch = buffer[idx] ;
-            // Advance the lookahead character
-            idx++ ;
-            count++ ;
-            return ch & 0xFF ;
-        }  
-        else
-            // Buffer empty, end of stream.
-            return EOF ;
-    }
-
-    private int fillArray()
-    {
-        try
-        {
-            int x = source.read(buffer) ;
-            idx = 0 ;
-            buffLen = x ;   // Maybe -1
-            return x ;
-        } 
-        catch (IOException ex) { IO.exception(ex) ; return -1 ; }
-    }
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/io/NullOutputStream.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/main/java/org/apache/jena/atlas/io/NullOutputStream.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/io/NullOutputStream.java
deleted file mode 100644
index 8986f9e..0000000
--- a/jena-arq/src/main/java/org/apache/jena/atlas/io/NullOutputStream.java
+++ /dev/null
@@ -1,40 +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.io;
-
-import java.io.OutputStream ;
-
-/** /dev/null */
-public class NullOutputStream extends OutputStream {
-
-    private static final NullOutputStream DEV_NULL = new NullOutputStream();
-
-    public static OutputStream sink() {
-        return DEV_NULL ;
-    }
-    
-    public NullOutputStream() {}
-    
-    @Override public void write(int b) {}
-
-    @Override public void write(byte b[]) {}
-
-    @Override public void write(byte b[], int off, int len) { }
-}
-

http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/io/OutStreamUTF8.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/io/OutStreamUTF8.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/io/OutStreamUTF8.java
deleted file mode 100644
index d4d15d4..0000000
--- a/jena-arq/src/main/java/org/apache/jena/atlas/io/OutStreamUTF8.java
+++ /dev/null
@@ -1,179 +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.io;
-
-import java.io.IOException ;
-import java.io.OutputStream ;
-import java.io.Writer ;
-
-/** Output UTF-8 encoded data.
- *  This class implements the "Modified UTF8" encoding rules (null -> C0 80)
- *  It will encode any 16 bit value.  
- *  It can be used as a pure UTf-8 encoder. 
- * 
- *  @see InStreamUTF8
- */
-public final class OutStreamUTF8 extends Writer
-{
-    private OutputStream out ;
-
-    public OutStreamUTF8(OutputStream out)
-    {
-        // Buffer?
-        this.out = out ;
-    }
-    
-    @Override
-    public void write(char[] cbuf, int off, int len) throws IOException
-    {
-        for ( int i = 0 ; i < len; i++ )
-            write(cbuf[off+i]) ;
-    }
-    
-    @Override
-    public void write(int ch) throws IOException
-    { output(out, ch) ; }
-    
-    @Override
-    public void write(char[] b) throws IOException
-    { write(b, 0, b.length) ; }
-    
-    @Override
-    public void write(String str) throws IOException
-    { write(str,0, str.length()) ; }
-    
-    @Override
-    public void write(String str, int idx, int len) throws IOException
-    {
-        for ( int i = 0 ; i < len; i++ )
-            write(str.charAt(idx+i)) ;
-    }
-
-    public void output(int x)
-    { 
-        try { 
-            output(out, x) ;
-        } catch (IOException ex) { IO.exception(ex) ; }
-    }
-    
-    /*
-     * Bits 
-     * 7    U+007F      1 to 127              0xxxxxxx 
-     * 11   U+07FF      128 to 2,047          110xxxxx 10xxxxxx
-     * 16   U+FFFF      2,048 to 65,535       1110xxxx 10xxxxxx 10xxxxxx
-     * 21   U+1FFFFF    65,536 to 1,114,111   11110xxx 10xxxxxx 10xxxxxx 
10xxxxxx
-     * 26   U+3FFFFFF                         111110xx 10xxxxxx 10xxxxxx 
10xxxxxx 10xxxxxx
-     * 31   U+7FFFFFFF                        1111110x 10xxxxxx 10xxxxxx 
10xxxxxx 10xxxxxx 10xxxxxx
-     */
-    public static void output(OutputStream out, int ch) throws IOException
-    {
-        if ( ch != 0 && ch <= 127 )
-        {
-            // 7 bits
-            out.write(ch) ;
-            return ;
-        }
-        
-        if ( ch == 0 )
-        {
-            // Modified UTF-8.
-            out.write(0xC0) ;
-            out.write(0x80) ;
-            return ;
-        }
-        
-        // Better? output(int HiMask, int byte length, int value) 
-        
-        if ( ch <= 0x07FF )
-        {
-            // 11 bits : 110yyyyy 10xxxxxx
-            // int x1 = ( ((ch>>(11-5))&0x7) | 0xC0 ) ; outputBytes(out, x1, 
2, ch) ; return ;
-            int x1 = ( ((ch>>(11-5))&0x01F ) | 0xC0 ) ; 
-            int x2 = ( (ch&0x3F)  | 0x80 ) ;
-            out.write(x1) ;
-            out.write(x2) ;
-            return ;
-        }
-        if ( ch <= 0xFFFF )
-        {
-            // 16 bits : 1110aaaa  10bbbbbb  10cccccc
-            // int x1 = ( ((ch>>(16-4))&0x7) | 0xE0 ) ; outputBytes(out, x1, 
3, ch) ; return ;
-            int x1 = ( ((ch>>(16-4))&0x0F) | 0xE0 ) ;
-            int x2 = ( ((ch>>6)&0x3F) | 0x80 ) ;
-            int x3 = ( (ch&0x3F) | 0x80 ) ;
-            out.write(x1) ;
-            out.write(x2) ;
-            out.write(x3) ;
-            return ;
-        }
-        
-//        if ( Character.isDefined(ch) )
-//            throw new AtlasException("not a character") ;
-        
-        //if ( true ) throw new InternalErrorException("Valid code point for 
Java but not encodable") ;
-        
-        // Not java, where chars are 16 bit.
-        if ( ch <= 0x1FFFFF )
-        {
-            // 21 bits : 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
-            int x1 = ( ((ch>>(21-3))&0x7) | 0xF0 ) ;
-            outputBytes(out, x1, 4, ch) ;
-            return ;
-        }
-        if ( ch <= 0x3FFFFFF )
-        {
-            // 26 bits : 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
-            int x1 = ( ((ch>>(26-2))&0x3) | 0xF8 ) ;
-            outputBytes(out, x1, 5, ch) ;
-            return ;
-        }
-
-        if ( ch <= 0x7FFFFFFF )
-        {
-            // 32 bits : 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
-            int x1 = ( ((ch>>(32-1))&0x1) | 0xFC ) ;
-            outputBytes(out, x1, 6, ch) ;
-            return ;
-        }
-    }
-    
-    private static void outputBytes(OutputStream out, int x1, int byteLength, 
int ch) throws IOException
-    {
-        // ByteLength = 3 => 2 byteLenth => shift=6 and shift=0  
-        out.write(x1) ;
-        byteLength-- ; // remaining bytes
-        for ( int i = 0 ; i < byteLength ; i++ )
-        {
-            // 6 Bits, loop from high to low  
-            int shift = 6*(byteLength-i-1) ;
-            int x =  (ch>>shift) & 0x3F ;
-            x = x | 0x80 ;  // 10xxxxxx
-            out.write(x) ;
-        }
-    }
-
-    @Override
-    public void flush() throws IOException
-    { out.flush(); }
-
-    @Override
-    public void close() throws IOException
-    { out.close() ; }
-
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/io/OutputUtils.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/io/OutputUtils.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/io/OutputUtils.java
deleted file mode 100644
index a5d5595..0000000
--- a/jena-arq/src/main/java/org/apache/jena/atlas/io/OutputUtils.java
+++ /dev/null
@@ -1,72 +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.io ;
-
-import java.io.IOException ;
-import java.io.Writer ;
-
-import org.apache.jena.atlas.lib.BitsInt ;
-import org.apache.jena.atlas.lib.Chars ;
-
-public class OutputUtils {
-    /** Print the number x in width hex chars. x must fit */
-    public static void printHex(StringBuilder out, int x, int width) {
-        for ( int i = width - 1 ; i >= 0 ; i-- )
-            x = oneHex(out, x, i) ;
-    }
-
-    /** Print one hex digit of the number */
-    public static int oneHex(StringBuilder out, int x, int i) {
-        int y = BitsInt.unpack(x, 4 * i, 4 * i + 4) ;
-        char charHex = Chars.hexDigitsUC[y] ;
-        out.append(charHex) ;
-        return BitsInt.clear(x, 4 * i, 4 * i + 4) ;
-    }
-
-    /** Print the number x in width hex chars. x must fit */
-    public static void printHex(Writer out, int x, int width) {
-        for ( int i = width - 1 ; i >= 0 ; i-- )
-            x = oneHex(out, x, i) ;
-    }
-
-    /** Print one hex digit of the number */
-    public static int oneHex(Writer out, int x, int i) {
-        int y = BitsInt.unpack(x, 4 * i, 4 * i + 4) ;
-        char charHex = Chars.hexDigitsUC[y] ;
-        try {
-            out.write(charHex) ;
-        }
-        catch (IOException ex) {}
-        return BitsInt.clear(x, 4 * i, 4 * i + 4) ;
-    }
-
-    /** Print the number x in width hex chars. x must fit */
-    public static void printHex(AWriter out, int x, int width) {
-        for ( int i = width - 1 ; i >= 0 ; i-- )
-            x = oneHex(out, x, i) ;
-    }
-
-    /** Print one hex digit of the number */
-    public static int oneHex(AWriter out, int x, int i) {
-        int y = BitsInt.unpack(x, 4 * i, 4 * i + 4) ;
-        char charHex = Chars.hexDigitsUC[y] ;
-        out.print(charHex) ;
-        return BitsInt.clear(x, 4 * i, 4 * i + 4) ;
-    }
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/io/PeekInputStream.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/main/java/org/apache/jena/atlas/io/PeekInputStream.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/io/PeekInputStream.java
deleted file mode 100644
index beb8010..0000000
--- a/jena-arq/src/main/java/org/apache/jena/atlas/io/PeekInputStream.java
+++ /dev/null
@@ -1,233 +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.io;
-
-import static org.apache.jena.atlas.io.IO.EOF ;
-import static org.apache.jena.atlas.io.IO.UNSET ;
-
-import java.io.FileInputStream ;
-import java.io.FileNotFoundException ;
-import java.io.IOException ;
-import java.io.InputStream ;
-
-import org.apache.jena.atlas.AtlasException ;
-import org.apache.jena.shared.JenaException ;
-
-/** Parsing-centric input stream.
- *  @see PeekReader
- */ 
-
-
-public final class PeekInputStream extends InputStream
-{
-    // Change to looking at slices of a ByteBuffer and rework TokenizerBytes 
-    
-    private final InputStreamBuffered source ;
-    
-    private static final int PUSHBACK_SIZE = 10 ; 
-    static final byte BYTE0 = (byte)0 ;
-    
-    private byte[] pushbackBytes ;
-    private int idxPushback ;                   // Index into pushbackBytes: 
points to next pushBack. -1 => none.
-    
-    private int currByte = UNSET ;              // Next byte to return when 
reading forwards.
-    private long posn ;
-    
-    public static final int INIT_LINE = 1 ;
-    public static final int INIT_COL = 1 ;
-    
-    private long colNum ;
-    private long lineNum ;
-    
-    // ---- static construction methods.
-    
-    public static PeekInputStream make(InputStream inputStream)
-    {
-        return make(inputStream, InputStreamBuffered.DFT_BUFSIZE) ;
-    }
-    
-    public static PeekInputStream make(InputStream inputStream, int bufferSize)
-    {
-        if ( inputStream instanceof PeekInputStream )
-            return (PeekInputStream)inputStream ;
-        
-        if ( inputStream instanceof InputStreamBuffered )
-            return new PeekInputStream((InputStreamBuffered)inputStream) ;
-        InputStreamBuffered in = new InputStreamBuffered(inputStream, 
bufferSize) ;
-        return new PeekInputStream(in) ;
-    }
-
-    public static PeekInputStream open(String filename) 
-    {
-        try {
-            InputStream in = new FileInputStream(filename) ;
-            return make(in) ;
-        } catch (FileNotFoundException ex){ throw new AtlasException("File not 
found: "+filename) ; }
-    }
-    
-    private PeekInputStream(InputStreamBuffered input)
-    {
-        this.source = input ;
-        this.pushbackBytes = new byte[PUSHBACK_SIZE] ; 
-        this.idxPushback = -1 ;
-        
-        this.colNum = INIT_COL ;
-        this.lineNum = INIT_LINE ;
-        this.posn = 0 ;
-        
-        // We start at byte "-1", i.e. just before the file starts.
-        // Advance always so that the peek byte is valid (is byte 0) 
-        // Returns the byte before the file starts (i.e. UNSET).
-    }
-
-    public final InputStreamBuffered getInput()   { return source ; }
-    
-    public long getLineNum()            { return lineNum; }
-
-    public long getColNum()             { return colNum; }
-
-    public long getPosition()           { return posn; }
-
-    //---- Do not access currByte except with peekByte/setCurrByte.
-    public final int peekByte()
-    { 
-        if ( idxPushback >= 0 )
-            return pushbackBytes[idxPushback] ;
-        
-        // If not started ... delayed initialization.
-        if ( currByte == UNSET )
-            init() ;
-        return currByte ;
-    }
-    
-    // And the correct way to read the currByte is to call peekByte
-    private final void setCurrByte(int b)
-    {
-        currByte = b ;
-    }
-    
-    public final int readByte()               { return nextByte() ; }
-    
-    /** push back a byte : does not alter underlying position, line or column 
counts*/  
-    public final void pushbackByte(int b)    { unreadByte(b) ; }
-    
-    @Override
-    public final void close() throws IOException
-    {
-        source.close() ;
-    }
-
-    @Override
-    public final int read() throws IOException
-    {
-        if ( eof() )
-            return EOF ;
-        int x = readByte() ;
-        return x ;
-    }
-    
-    @Override
-    public final int read(byte[] buf, int off, int len) throws IOException
-    {
-        if ( eof() )
-            return EOF ;
-        for ( int i = 0 ; i < len ; i++ )
-        {
-            int ch = readByte() ;
-            if ( ch == EOF )
-                return (i==0)? EOF : i ;
-            buf[i+off] = (byte)ch ;
-        }
-        return len ;
-    }
-
-    public final boolean eof()   { return peekByte() == EOF ; }
-
-    // ----------------
-    // The methods below are the only ones to manipulate the byte buffers.
-    // Other methods may read the state of variables.
-    
-    private final void unreadByte(int b)
-    {
-        // The push back buffer is in the order where [0] is the oldest.
-        // Does not alter the line number, column number or position count. 
-        
-        if ( idxPushback >= pushbackBytes.length )
-        {
-            // Enlarge pushback buffer.
-            byte[] pushbackBytes2 = new byte[pushbackBytes.length*2] ;
-            System.arraycopy(pushbackBytes, 0, pushbackBytes2, 0, 
pushbackBytes.length) ;
-            pushbackBytes = pushbackBytes2 ;
-            //throw new JenaException("Pushback buffer overflow") ;
-        }
-        if ( b == EOF || b == UNSET )
-            throw new JenaException("Illegal byte to push back: "+b) ;
-        
-        idxPushback++ ;
-        pushbackBytes[idxPushback] = (byte)b ;
-    }
-    
-    private final void init()
-    {
-        advanceAndSet() ;
-        if ( currByte == UNSET )
-            setCurrByte(EOF) ;
-    }
-
-    private final void advanceAndSet() 
-    {
-        try {
-            int ch = source.read() ;
-            setCurrByte(ch) ;
-        } catch (IOException ex) { IO.exception(ex) ; }
-    }
-    
-    
-    // Invariants.
-    // currByte is either bytes[idx-1] or pushbackBytes[idxPushback]
-    
-    /** Return the next byte, moving on one place and resetting the peek byte 
*/ 
-    private final int nextByte()
-    {
-        int b = peekByte() ;
-        
-        if ( b == EOF )
-            return EOF ;
-        
-        if ( idxPushback >= 0 )
-        {
-            byte b2 = pushbackBytes[idxPushback] ;
-            idxPushback-- ;
-            return b2 ;
-        }
-
-        posn++ ;
-        
-        if (b == '\n')
-        {
-            lineNum++;
-            colNum = INIT_COL ;
-        } 
-        else
-            colNum++;
-        
-        advanceAndSet() ;
-        return b ;
-    }
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/io/PeekReader.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/io/PeekReader.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/io/PeekReader.java
deleted file mode 100644
index f7dc366..0000000
--- a/jena-arq/src/main/java/org/apache/jena/atlas/io/PeekReader.java
+++ /dev/null
@@ -1,274 +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.io ;
-
-import static org.apache.jena.atlas.io.IO.EOF ;
-import static org.apache.jena.atlas.io.IO.UNSET ;
-
-import java.io.FileInputStream ;
-import java.io.FileNotFoundException ;
-import java.io.IOException ;
-import java.io.InputStream ;
-import java.io.Reader ;
-
-import org.apache.jena.atlas.AtlasException ;
-import org.apache.jena.atlas.lib.Chars ;
-import org.apache.jena.shared.JenaException ;
-
-/**
- * Parsing-centric reader. This class is not thread safe.
- * @see PeekInputStream
- */
-
-public final class PeekReader extends Reader {
-    // Remember to apply fixes to PeekInputStream as well.
-
-    // Buffering is done by a CharStream - does it make adifference?
-    // Yes. A lot (Java6).
-
-    // Using a Reader here seems to have zero cost or benefit but CharStream
-    // allows fast String handling.
-    private final CharStream source ;
-
-    private static final int PUSHBACK_SIZE = 10 ;
-    static final byte        CHAR0         = (char)0 ;
-
-    private char[]           pushbackChars ;
-    // Index into pushbackChars: points to next pushBack.
-    // -1 => none.
-    private int              idxPushback ;            
-
-    // Next character to return when reading forwards.
-    private int              currChar      = UNSET ;  
-    private long             posn ;
-
-    public static final int  INIT_LINE     = 1 ;
-    public static final int  INIT_COL      = 1 ;
-
-    private long             colNum ;
-    private long             lineNum ;
-
-    // ---- static construction methods.
-
-    public static PeekReader make(Reader r) {
-        if ( r instanceof PeekReader )
-            return (PeekReader)r ;
-        return make(r, CharStreamBuffered.CB_SIZE) ;
-    }
-
-    public static PeekReader make(Reader r, int bufferSize) {
-        // It is worth our own buffering even if a BufferedReader
-        // because of the synchronized on one char reads in BufferedReader.
-        return new PeekReader(new CharStreamBuffered(r, bufferSize)) ;
-    }
-
-    /** Make PeekReader where the input is UTF8 : BOM is removed */
-    public static PeekReader makeUTF8(InputStream in) {
-        // This is the best route to make a PeekReader because it avoids
-        // chances of wrong charset for a Reader say.
-        PeekReader pr ;
-        if ( true ) {
-            Reader r = IO.asUTF8(in) ;
-            // This adds reader-level buffering
-            pr = make(r) ;
-        } else {
-            // This is a bit slower - reason unknown.
-            InputStreamBuffered in2 = new InputStreamBuffered(in) ;
-            CharStream r = new InStreamUTF8(in2) ;
-            pr = new PeekReader(r) ;
-        }
-        // Skip BOM.
-        int ch = pr.peekChar() ;
-        if ( ch == Chars.BOM )
-            // Skip BOM
-            pr.readChar() ;
-        return pr ;
-    }
-
-    /** Make PeekReader where the input is ASCII */
-    public static PeekReader makeASCII(InputStream in) {
-        Reader r = IO.asASCII(in) ;
-        return make(r) ;
-    }
-
-    public static PeekReader make(CharStream r) {
-        return new PeekReader(r) ;
-    }
-
-    public static PeekReader readString(String string) {
-        return new PeekReader(new CharStreamSequence(string)) ;
-    }
-
-    public static PeekReader open(String filename) {
-        try {
-            InputStream in = new FileInputStream(filename) ;
-            return makeUTF8(in) ;
-        } catch (FileNotFoundException ex) {
-            throw new AtlasException("File not found: " + filename) ;
-        }
-    }
-
-    private PeekReader(CharStream stream) {
-        this.source = stream ;
-        this.pushbackChars = new char[PUSHBACK_SIZE] ;
-        this.idxPushback = -1 ;
-
-        this.colNum = INIT_COL ;
-        this.lineNum = INIT_LINE ;
-        this.posn = 0 ;
-    }
-
-    public long getLineNum() {
-        return lineNum ;
-    }
-
-    public long getColNum() {
-        return colNum ;
-    }
-
-    public long getPosition() {
-        return posn ;
-    }
-
-    // ---- Do not access currChar except with peekChar/setCurrChar.
-    public final int peekChar() {
-        if ( idxPushback >= 0 )
-            return pushbackChars[idxPushback] ;
-
-        // If not started ... delayed initialization.
-        if ( currChar == UNSET )
-            init() ;
-        return currChar ;
-    }
-
-    // And the correct way to read the currChar is to call peekChar.
-    private final void setCurrChar(int ch) {
-        currChar = ch ;
-    }
-
-    public final int readChar() {
-        return nextChar() ;
-    }
-
-    /**
-     * push back a character : does not alter underlying position, line or
-     * column counts
-     */
-    public final void pushbackChar(int ch) {
-        unreadChar(ch) ;
-    }
-
-    // Reader operations
-    @Override
-    public final void close() throws IOException {
-        source.closeStream() ;
-    }
-
-    @Override
-    public final int read() throws IOException {
-        if ( eof() )
-            return EOF ;
-        int x = readChar() ;
-        return x ;
-    }
-
-    @Override
-    public final int read(char[] cbuf, int off, int len) throws IOException {
-        if ( eof() )
-            return EOF ;
-        // Note - we need to preserve line count
-        // Single char ops are reasonably efficient.
-        for (int i = 0; i < len; i++) {
-            int ch = readChar() ;
-            if ( ch == EOF )
-                return (i == 0) ? EOF : i ;
-            cbuf[i + off] = (char)ch ;
-        }
-        return len ;
-    }
-
-    public final boolean eof() {
-        return peekChar() == EOF ;
-    }
-
-    // ----------------
-    // The methods below are the only ones to manipulate the character buffers.
-    // Other methods may read the state of variables.
-
-    private final void unreadChar(int ch) {
-        // The push back buffer is in the order where [0] is the oldest.
-        // Does not alter the line number, column number or position count
-        // not does reading a pushback charcater.
-
-        if ( idxPushback >= pushbackChars.length ) {
-            // Enlarge pushback buffer.
-            char[] pushbackChars2 = new char[pushbackChars.length * 2] ;
-            System.arraycopy(pushbackChars, 0, pushbackChars2, 0, 
pushbackChars.length) ;
-            pushbackChars = pushbackChars2 ;
-            // throw new JenaException("Pushback buffer overflow") ;
-        }
-        if ( ch == EOF || ch == UNSET )
-            throw new JenaException("Illegal character to push back: " + ch) ;
-
-        idxPushback++ ;
-        pushbackChars[idxPushback] = (char)ch ;
-    }
-
-    private final void init() {
-        advanceAndSet() ;
-        if ( currChar == UNSET )
-            setCurrChar(EOF) ;
-    }
-
-    private final void advanceAndSet() {
-        int ch = source.advance() ;
-        setCurrChar(ch) ;
-    }
-
-    // Invariants.
-    // currChar is either chars[idx-1] or pushbackChars[idxPushback]
-
-    /**
-     * Return the next character, moving on one place and resetting the peek
-     * character
-     */
-    private final int nextChar() {
-        int ch = peekChar() ;
-
-        if ( ch == EOF )
-            return EOF ;
-
-        if ( idxPushback >= 0 ) {
-            char ch2 = pushbackChars[idxPushback] ;
-            idxPushback-- ;
-            return ch2 ;
-        }
-
-        posn++ ;
-
-        if ( ch == '\n' ) {
-            lineNum++ ;
-            colNum = INIT_COL ;
-        } else
-            colNum++ ;
-
-        advanceAndSet() ;
-        return ch ;
-    }
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/io/PrintUtils.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/io/PrintUtils.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/io/PrintUtils.java
deleted file mode 100644
index 14e4ed1..0000000
--- a/jena-arq/src/main/java/org/apache/jena/atlas/io/PrintUtils.java
+++ /dev/null
@@ -1,31 +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.io;
-
-
-public class PrintUtils
-{
-    // ---- Printable
-    public static String toString(Printable f)
-    { 
-        IndentedLineBuffer buff = new IndentedLineBuffer() ;
-        f.output(buff) ;
-        return buff.toString() ;
-    }
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/io/Printable.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/io/Printable.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/io/Printable.java
deleted file mode 100644
index 69bd211..0000000
--- a/jena-arq/src/main/java/org/apache/jena/atlas/io/Printable.java
+++ /dev/null
@@ -1,24 +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.io;
-
-public interface Printable
-{
-    public void output(IndentedWriter out) ;
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/io/PrintableBase.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/io/PrintableBase.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/io/PrintableBase.java
deleted file mode 100644
index 89fbb24..0000000
--- a/jena-arq/src/main/java/org/apache/jena/atlas/io/PrintableBase.java
+++ /dev/null
@@ -1,26 +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.io;
-
-// Hmm - hardly worth it!
-public abstract class PrintableBase implements Printable
-{
-    @Override
-    public String toString() { return PrintUtils.toString(this) ; }
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/io/StringWriterI.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/io/StringWriterI.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/io/StringWriterI.java
deleted file mode 100644
index 5fea4d3..0000000
--- a/jena-arq/src/main/java/org/apache/jena/atlas/io/StringWriterI.java
+++ /dev/null
@@ -1,30 +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.io;
-
-import java.io.StringWriter ;
-
-public class StringWriterI extends Writer2
-{
-    public StringWriterI()
-    {
-        super(new StringWriter()) ;
-    }
-}
-

http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/io/Writer2.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/io/Writer2.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/io/Writer2.java
deleted file mode 100644
index 100ec6f..0000000
--- a/jena-arq/src/main/java/org/apache/jena/atlas/io/Writer2.java
+++ /dev/null
@@ -1,97 +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.io;
-
-import java.io.BufferedWriter ;
-import java.io.IOException ;
-import java.io.Writer ;
-
-import org.apache.jena.atlas.lib.Closeable ;
-
-/** A Writer, without the checked exceptions. */
-
-public class Writer2 extends AWriterBase implements AWriter, Closeable
-{
-    protected final Writer writer ;
-
-    public static Writer2 wrap(Writer writer)
-    {
-        if ( writer instanceof BufferedWriter )
-            return new Writer2(writer) ;
-        if ( writer instanceof BufferingWriter )
-            return new Writer2(writer) ;
-        
-        writer = new BufferingWriter(writer) ;
-        return new Writer2(writer) ;
-    }
-    
-    protected Writer2(Writer writer) { this.writer = writer ; }
-
-    @Override
-    public void print(char ch)
-    { 
-        try { writer.write(ch) ; } catch (IOException ex) { IO.exception(ex) ; 
}
-    }
-
-    @Override
-    public void print(String string)
-    { 
-        try { writer.write(string) ; } catch (IOException ex) { 
IO.exception(ex) ; }
-    }
-
-    @Override
-    public void print(char[] cbuf)
-    {
-        try { writer.write(cbuf) ; } catch (IOException ex) { IO.exception(ex) 
; }
-    }
-
-    @Override
-    public void flush()
-    {
-        try { writer.flush() ; } catch (IOException ex) { IO.exception(ex) ; }
-    }
-
-    @Override
-    public void close()
-    {
-        try { writer.close() ; } catch (IOException ex) { IO.exception(ex) ; }
-    }
-
-    @Override
-    public void printf(String fmt, Object... args)
-    {
-        print(String.format(fmt, args)) ;
-    }
-
-    @Override
-    public void println(String obj)
-    {
-        print(obj) ; print("\n") ;
-    }
-
-    @Override
-    public void println()
-    {
-        print("\n") ;
-    }
-    
-    @Override
-    public String toString() { return writer.toString() ; }
-}
-

http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/iterator/AccString.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/AccString.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/iterator/AccString.java
deleted file mode 100644
index 7df3486..0000000
--- a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/AccString.java
+++ /dev/null
@@ -1,66 +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 class AccString<T> implements Accumulate<T, String>
-{
-    StringBuilder buffer = null ;
-    private String sep ;
-    private boolean first = true ;
-
-    // Fresh StringBuilder
-    public AccString(String sep) { this.sep = sep ; }
-    public AccString() { this(" ") ; }
-
-    @Override
-    public void accumulate(T item)
-    { 
-        if ( ! first )
-            buffer.append(sep) ;
-        if ( item != null )
-            buffer.append(toString(item)) ;
-        else
-            buffer.append("<null>") ;
-        first = false ;
-    }
-
-    /** Make into a string */
-    protected String toString(T item)
-    {
-        return item.toString() ; 
-    }
-    
-    @Override
-    public String get()
-    {
-        return buffer.toString() ;
-    }
-
-    @Override
-    public void start()
-    { 
-        // Resets on each use.
-        buffer = new StringBuilder() ; 
-        first = true ;
-    }
-    
-    @Override
-    public void finish() {}
-
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/iterator/Accumulate.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/Accumulate.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/iterator/Accumulate.java
deleted file mode 100644
index 2eef4fa..0000000
--- a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/Accumulate.java
+++ /dev/null
@@ -1,27 +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 Accumulate <T, R>
-{
-    public void start() ;
-    public void accumulate(T item) ;
-    public void finish();
-    public R get() ;
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/iterator/Action.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/Action.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/iterator/Action.java
deleted file mode 100644
index de2630e..0000000
--- a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/Action.java
+++ /dev/null
@@ -1,24 +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 Action<T>
-{
-    public void apply(T item) ;
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/iterator/ActionCount.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/ActionCount.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/iterator/ActionCount.java
deleted file mode 100644
index 20f837c..0000000
--- a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/ActionCount.java
+++ /dev/null
@@ -1,31 +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 class ActionCount<T> implements Action<T>
-{
-    private long count = 0 ;
-    
-    @Override
-    public void apply(T item)
-    { count++ ; }
-    
-    public long getCount() { return count ; }
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/iterator/ActionNothing.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/ActionNothing.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/iterator/ActionNothing.java
deleted file mode 100644
index d05b279..0000000
--- a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/ActionNothing.java
+++ /dev/null
@@ -1,26 +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 class ActionNothing<T> implements Action<T>
-{
-    @Override
-    public void apply(T item)   { }
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/iterator/Filter.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/Filter.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/iterator/Filter.java
deleted file mode 100644
index 5d427c5..0000000
--- a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/Filter.java
+++ /dev/null
@@ -1,22 +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;
-
-@FunctionalInterface
-public interface Filter <T> { boolean accept(T item) ; }

http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/iterator/FilterDistinctAdjacent.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/FilterDistinctAdjacent.java
 
b/jena-arq/src/main/java/org/apache/jena/atlas/iterator/FilterDistinctAdjacent.java
deleted file mode 100644
index 3beb832..0000000
--- 
a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/FilterDistinctAdjacent.java
+++ /dev/null
@@ -1,40 +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 org.apache.jena.atlas.lib.Lib ;
-
-public class FilterDistinctAdjacent<T> implements Filter<T>
-{
-    private boolean isSet = false ;
-    private T last = null ; 
-    
-    public FilterDistinctAdjacent() { }
-    
-    @Override
-    public boolean accept(T item)
-    {
-        if ( isSet && Lib.equal(last, item) )
-            return false ;
-        last = item ;
-        isSet = true ;
-        return true ;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/iterator/FilterOutNulls.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/FilterOutNulls.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/iterator/FilterOutNulls.java
deleted file mode 100644
index 21cd471..0000000
--- a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/FilterOutNulls.java
+++ /dev/null
@@ -1,32 +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 class FilterOutNulls<T> implements Filter<T>
-{
-    public FilterOutNulls() { }
-    
-    @Override
-    public boolean accept(T item)
-    {
-        return item != null ;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/iterator/FilterStack.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/FilterStack.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/iterator/FilterStack.java
deleted file mode 100644
index 479d93f..0000000
--- a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/FilterStack.java
+++ /dev/null
@@ -1,67 +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;
-
-/**
- * Add a filter to a chain - the original filter is called after this new 
sub-filter.
- */
-public abstract class FilterStack<T> implements  Filter<T>
-{
-    private final Filter<T> other ;
-    private final boolean subFilterLast ;
-    
-    public FilterStack(Filter<T> other) { this(other, false) ; }
-    
-    public FilterStack(Filter<T> other, boolean callOldFilterFirst)
-    {
-        this.other = other ;
-        this.subFilterLast = callOldFilterFirst ;
-    }
-   
-    @Override
-    public final boolean accept(T item)
-    {
-        if ( subFilterLast )
-            return acceptAdditionaOther(item) ;
-        else
-            return acceptOtherAdditional(item) ;
-    }
-    
-    private boolean acceptAdditionaOther(T item)
-    {
-        if ( ! acceptAdditional(item) )
-            return false ;
-        
-        if ( other != null && ! other.accept(item) )
-            return false ;
-        
-        return true ;
-    }
-
-    private boolean acceptOtherAdditional(T item)
-    {
-        if ( other != null && ! other.accept(item) )
-            return false ;
-        return acceptAdditional(item) ;
-    }
-
-    
-    /** Additional filter condition to apply */
-    public abstract boolean acceptAdditional(T item) ;
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/iterator/FilterUnique.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/FilterUnique.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/iterator/FilterUnique.java
deleted file mode 100644
index 2b2a957..0000000
--- a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/FilterUnique.java
+++ /dev/null
@@ -1,39 +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.HashSet ;
-import java.util.Set ;
-
-public class FilterUnique<T> implements Filter<T>
-{
-    private Set<T> seen = new HashSet<>() ;
-    
-    public FilterUnique() { }
-    
-    @Override
-    public boolean accept(T item)
-    {
-        if ( seen.contains(item) )
-            return false ;
-        seen.add(item) ;
-        return true ;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/9eedadcd/jena-arq/src/main/java/org/apache/jena/atlas/iterator/Iter.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/Iter.java 
b/jena-arq/src/main/java/org/apache/jena/atlas/iterator/Iter.java
deleted file mode 100644
index 8aec2ea..0000000
--- a/jena-arq/src/main/java/org/apache/jena/atlas/iterator/Iter.java
+++ /dev/null
@@ -1,971 +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.io.PrintStream ;
-import java.util.* ;
-import java.util.stream.Stream ;
-import java.util.stream.StreamSupport ;
-
-import org.apache.jena.atlas.lib.ActionKeyValue ;
-import org.apache.jena.atlas.lib.Closeable ;
-import org.apache.jena.atlas.lib.Sink ;
-
-public class Iter<T> implements Iterator<T> {
-    
-    // Most Iterable<T> operations have been removed - use streams instad.
-    
-    public static <T> Stream<T> asStream(Iterator<T> iterator) {
-        // Why isn't there a JDK operation for iterator -> (sequential) stream?
-        return asStream(iterator, false);
-    }
-
-    public static <T> Stream<T> asStream(Iterator<T> iterator, boolean 
parallel) {
-        // Why isn't there a JDK operation for iterator -> (sequential) 
stream?  
-        Iterable<T> iterable = () -> iterator;
-        return StreamSupport.stream(iterable.spliterator(), parallel);
-    }
-
-    // First part : the static function library.
-    // Often with both Iterator<? extends T> and Iterable<? extends T>
-
-    public static <T> Iterator<T> singleton(T item) {
-        return new SingletonIterator<>(item) ;
-    }
-
-    @SuppressWarnings("rawtypes")
-    private static final Iterator iter0 = new NullIterator() ;
-    @SuppressWarnings({"unchecked", "cast"})
-    public static <T> Iterator<T> nullIterator() { return 
(NullIterator<T>)iter0 ; }
-
-//    public static <T> Iterator<T> nullIterator() {
-//        return new NullIterator<T>() ;
-//    }
-    
-//    public static <T> Set<T> toSet(Iterable<? extends T> stream) {
-//        return toSet(stream.iterator()) ;
-//    }
-
-    public static <T> Set<T> toSet(Iterator<? extends T> stream) {
-        Accumulate<T, Set<T>> action = new Accumulate<T, Set<T>>() {
-            private Set<T> acc = null ;
-
-            @Override
-            public void accumulate(T item) {
-                acc.add(item) ;
-            }
-
-            @Override
-            public Set<T> get() {
-                return acc ;
-            }
-
-            @Override
-            public void start() {
-                acc = new HashSet<>() ;
-            }
-
-            @Override
-            public void finish() {}
-        } ;
-        return reduce(stream, action) ;
-    }
-
-//    public static <T> List<T> toList(Iterable<? extends T> stream) {
-//        return toList(stream.iterator()) ;
-//    }
-
-    public static <T> List<T> toList(Iterator<? extends T> stream) {
-        Accumulate<T, List<T>> action = new Accumulate<T, List<T>>() {
-            private List<T> acc = null ;
-
-            @Override
-            public void accumulate(T item) {
-                acc.add(item) ;
-            }
-
-            @Override
-            public List<T> get() {
-                return acc ;
-            }
-
-            @Override
-            public void start() {
-                acc = new ArrayList<>() ;
-            }
-
-            @Override
-            public void finish() {}
-        } ;
-        return reduce(stream, action) ;
-    }
-
-    /**
-     * Create another iterator without risk of concurrent modification
-     * exceptions. This materializes the input iterator.
-     */
-    public static <T> Iterator<T> iterator(Iterator<? extends T> iterator) {
-        List<T> x = Iter.toList(iterator) ;
-        return x.iterator() ;
-    }
-
-    public interface Folder<X, Y> {
-        Y eval(Y acc, X arg) ;
-    }
-
-    public static <T, R> R foldLeft(Iterable<? extends T> stream, Folder<T, R> 
function, R value) {
-        return foldLeft(stream.iterator(), function, value) ;
-    }
-
-    public static <T, R> R foldLeft(Iterator<? extends T> stream, Folder<T, R> 
function, R value) {
-        // Tail recursion, unwound
-        for (; stream.hasNext();) {
-            T item = stream.next() ;
-            value = function.eval(value, item) ;
-        }
-        return value ;
-    }
-
-    public static <T, R> R foldRight(Iterable<? extends T> stream, Folder<T, 
R> function, R value) {
-        return foldRight(stream.iterator(), function, value) ;
-    }
-
-    public static <T, R> R foldRight(Iterator<? extends T> stream, Folder<T, 
R> function, R value) {
-        // Recursive.
-        if ( !stream.hasNext() )
-            return value ;
-        T item = stream.next() ;
-        return function.eval(foldRight(stream, function, value), item) ;
-    }
-
-    // Note fold-left and fold-right
-    // http://en.wikipedia.org/wiki/Fold_%28higher-order_function%29
-
-    // This reduce is fold-left (take first element, apply to rest of list)
-    // which copes with infinite lists.
-    // Fold-left starts by combining the first element, then moves on.
-
-    public static <T, R> R reduce(Iterable<? extends T> stream, Accumulate<T, 
R> aggregator) {
-        return reduce(stream.iterator(), aggregator) ;
-    }
-
-    public static <T, R> R reduce(Iterator<? extends T> stream, Accumulate<T, 
R> aggregator) {
-        aggregator.start() ;
-        for (; stream.hasNext();) {
-            T item = stream.next() ;
-            aggregator.accumulate(item) ;
-        }
-        aggregator.finish() ;
-        return aggregator.get() ;
-    }
-
-    // map without the results - do immediately.
-    // Also, apply with call in between?
-
-//    public static <T> void apply(Iterable<? extends T> stream, Action<T> 
action) {
-//        apply(stream.iterator(), action) ;
-//    }
-
-    public static <T> void apply(Iterator<? extends T> stream, Action<T> 
action) {
-        for (; stream.hasNext();) {
-            T item = stream.next() ;
-            action.apply(item) ;
-        }
-    }
-
-    // -- Map specific apply. No results - do immediately.
-
-    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()) ;
-    }
-
-    // ---- Filter
-
-//    public static <T> Iterator<T> filter(Iterable<? extends T> stream, 
Filter<T> filter) {
-//        return filter(stream.iterator(), filter) ;
-//    }
-
-    public static <T> Iterator<T> filter(final Iterator<? extends T> stream, 
final Filter<T> filter) {
-        final Iterator<T> iter = new Iterator<T>() {
-
-            boolean finished     = false ;
-            boolean slotOccupied = false ;
-            T       slot ;
-
-            @Override
-            public boolean hasNext() {
-                if ( finished )
-                    return false ;
-                while (!slotOccupied) {
-                    if ( !stream.hasNext() ) {
-                        finished = true ;
-                        break ;
-                    }
-                    T nextItem = stream.next() ;
-                    if ( filter.accept(nextItem) ) {
-                        slot = nextItem ;
-                        slotOccupied = true ;
-                        break ;
-                    }
-                }
-                return slotOccupied ;
-            }
-
-            @Override
-            public T next() {
-                if ( hasNext() ) {
-                    slotOccupied = false ;
-                    return slot ;
-                }
-                throw new NoSuchElementException("filter.next") ;
-            }
-
-            @Override
-            public void remove() {
-                throw new UnsupportedOperationException("filter.remove") ;
-            }
-        } ;
-
-        return iter ;
-    }
-
-    private static class InvertedFilter<T> implements Filter<T> {
-        public static <T> Filter<T> invert(Filter<T> filter) {
-            return new InvertedFilter<>(filter) ;
-        }
-        private Filter<T> baseFilter ;
-
-        private InvertedFilter(Filter<T> baseFilter) {
-            this.baseFilter = baseFilter ;
-        }
-
-        @Override
-        public boolean accept(T item) {
-            return !baseFilter.accept(item) ;
-        }
-    }
-
-//    public static <T> Iterator<T> notFilter(Iterable<? extends T> stream, 
Filter<T> filter) {
-//        return notFilter(stream.iterator(), filter) ;
-//    }
-
-    public static <T> Iterator<T> notFilter(final Iterator<? extends T> 
stream, final Filter<T> filter) {
-        Filter<T> flippedFilter = InvertedFilter.invert(filter) ;
-        return filter(stream, flippedFilter) ;
-    }
-
-    // Filter-related
-
-//    /**
-//     * Return true if every element of stream passes the filter (reads the
-//     * stream)
-//     */
-//    public static <T> boolean every(Iterable<? extends T> stream, Filter<T> 
filter) {
-//        for (T item : stream)
-//            if ( !filter.accept(item) )
-//                return false ;
-//        return true ;
-//    }
-
-    /**
-     * Return true if every element of stream passes the filter (reads the
-     * stream until the first element not passing the filter)
-     */
-    public static <T> boolean every(Iterator<? extends T> stream, Filter<T> 
filter) {
-        for (; stream.hasNext();) {
-            T item = stream.next() ;
-            if ( !filter.accept(item) )
-                return false ;
-        }
-        return true ;
-    }
-
-//    /**
-//     * Return true if every element of stream passes the filter (reads the
-//     * stream until the first element passing the filter)
-//     */
-//    public static <T> boolean some(Iterable<? extends T> stream, Filter<T> 
filter) {
-//        for (T item : stream)
-//            if ( filter.accept(item) )
-//                return true ;
-//        return false ;
-//    }
-
-    /**
-     * Return true if one or more elements of stream passes the filter (reads
-     * the stream to first element passing the filter)
-     */
-    public static <T> boolean some(Iterator<? extends T> stream, Filter<T> 
filter) {
-        for (; stream.hasNext();) {
-            T item = stream.next() ;
-            if ( filter.accept(item) )
-                return true ;
-        }
-        return false ;
-    }
-
-    // ---- Map
-
-//    public static <T, R> Iterator<R> map(Iterable<? extends T> stream, 
Transform<T, R> converter) {
-//        return map(stream.iterator(), converter) ;
-//    }
-
-    public static <T, R> Iterator<R> map(final Iterator<? extends T> stream, 
final Transform<T, R> converter) {
-        final Iterator<R> iter = new Iterator<R>() {
-            @Override
-            public boolean hasNext() {
-                return stream.hasNext() ;
-            }
-
-            @Override
-            public R next() {
-                return converter.convert(stream.next()) ;
-            }
-
-            @Override
-            public void remove() {
-                throw new UnsupportedOperationException("map.remove") ;
-            }
-        } ;
-        return iter ;
-    }
-
-    public static <T, R> List<R> map(List<? extends T> list, Transform<T, R> 
converter) {
-        return toList(map(list.iterator(), converter)) ;
-    }
-
-    /**
-     * Projects each element of a sequence to an Iterator&lt;R&gt; and flattens
-     * the resulting sequences into one sequence.
-     */
-    public static <T, R> Iterator<R> mapMany(final Iterator<? extends T> 
stream,
-                                             final Transform<? super T, 
Iterator<R>> converter) {
-        final Iterator<R> iter = new Iterator<R>() {
-
-            private Iterator<? extends R> it = null ; // Iterator for the
-                                                      // current element of
-                                                      // stream.
-
-            @Override
-            public boolean hasNext() {
-                if ( it != null && it.hasNext() )
-                    // Element of the current iterator.
-                    return true ;
-                // Start or current iterator has ended.
-                it = null ;
-
-                // Need to move to next non-empty iterator of the stream.
-                while (stream.hasNext()) {
-                    it = converter.convert(stream.next()) ;
-                    if ( it.hasNext() )
-                        // There is something.
-                        return true ;
-                }
-                it = null ;
-                // Stream ran out.
-                return false ;
-            }
-
-            @Override
-            public R next() {
-                if ( !hasNext() )
-                    throw new NoSuchElementException() ;
-                // "it" is always left with something to yield if hashNext is
-                // true.
-                return it.next() ;
-            }
-
-            @Override
-            public void remove() {
-                throw new UnsupportedOperationException("mapMany.remove") ;
-            }
-        } ;
-
-        return iter ;
-    }
-
-//    public static <T, R> Iterator<R> mapMany(Iterable<? extends T> stream, 
Transform<T, Iterator<R>> converter) {
-//        return mapMany(stream.iterator(), converter) ;
-//    }
-
-    public static <T, R> List<R> mapMany(List<? extends T> list, Transform<T, 
Iterator<R>> converter) {
-        return toList(mapMany(list.iterator(), converter)) ;
-    }
-
-//    /**
-//     * Apply an action to everything in stream, yielding a stream of the same
-//     * items
-//     */
-//    public static <T> Iterator<T> operate(Iterable<? extends T> stream, 
Action<T> converter) {
-//        return operate(stream.iterator(), converter) ;
-//    }
-
-    /**
-     * Apply an action to everything in stream, yielding a stream of the same
-     * items
-     */
-    public static <T> Iterator<T> operate(final Iterator<? extends T> stream, 
final Action<T> action) {
-        final Iterator<T> iter = new Iterator<T>() {
-            @Override
-            public boolean hasNext() {
-                return stream.hasNext() ;
-            }
-
-            @Override
-            public T next() {
-                T t = stream.next() ;
-                action.apply(t) ;
-                return t ;
-            }
-
-            @Override
-            public void remove() {
-                throw new UnsupportedOperationException("operate.remove") ;
-            }
-        } ;
-        return iter ;
-    }
-
-    /** Print an iterator as it gets used - this adds a printing wrapper */
-    public static <T> Iterator<T> printWrapper(final Iterator<? extends T> 
stream) {
-        return Iter.printWrapper(System.out, stream) ;
-    }
-
-    /** Print an iterator as it gets used - this adds a printing wrapper */
-    public static <T> Iterator<T> printWrapper(final PrintStream out, final 
Iterator<? extends T> stream) {
-        Action<T> action = new Action<T>() {
-            @Override
-            public void apply(T item) {
-                out.println(item) ;
-            }
-        } ;
-        return Iter.operate(stream, action) ;
-    }
-
-//    /** Join two iteratables
-//     * If there, potentially, going to be many iterators, it is better to 
-//     * create an {@link IteratorConcat} explicitly and add each iterator.
-//     */
-//    public static <T> Iterator<T> append(Iterable<? extends T> iter1, 
Iterable<? extends T> iter2) {
-//        return IteratorCons.create(iterator(iter1), iterator(iter2)) ;
-//    }
-
-    /** Join two iterator
-     * If there, potentially, going to be many iterators, it is better to 
-     * create an {@link IteratorConcat} explicitly and add each iterator.
-     */
-    public static <T> Iterator<T> append(Iterator<? extends T> iter1, 
Iterator<? extends T> iter2) {
-        return IteratorCons.create(iter1, iter2) ;
-    }
-
-//    private static <T> Iterator<T> iterator(Iterable<T> iter) {
-//        return (iter == null) ? null : iter.iterator() ;
-//    }
-
-//    public static <T> Iterator<T> distinct(Iterable<T> iter) {
-//        return distinct(iter.iterator()) ;
-//    }
-
-    public static <T> Iterator<T> distinct(Iterator<T> iter) {
-        return filter(iter, new FilterUnique<T>()) ;
-    }
-
-//    /** Remove adjacent duplicates */
-//    public static <T> Iterator<T> distinctAdjacent(Iterable<T> iter) {
-//        return distinctAdjacent(iter.iterator()) ;
-//    }
-
-    /** Remove adjacent duplicates */
-    public static <T> Iterator<T> distinctAdjacent(Iterator<T> iter) {
-        return filter(iter, new FilterDistinctAdjacent<T>()) ;
-    }
-
-//    public static <T> Iterator<T> removeNulls(Iterable<T> iter) {
-//        return filter(iter, new FilterOutNulls<T>()) ;
-//    }
-
-    public static <T> Iterator<T> removeNulls(Iterator<T> iter) {
-        return filter(iter, new FilterOutNulls<T>()) ;
-    }
-
-    /** Take the first N elements of an iterator - stop early if too few */
-    public static <T> List<T> take(Iterator<T> iter, int N) {
-        iter = new IteratorN<>(iter, N) ;
-        List<T> x = new ArrayList<>(N) ;
-        for (; iter.hasNext();)
-            x.add(iter.next()) ;
-        return x ;
-    }
-
-    /** Iterator that only returns upto N items */
-    static class IteratorN<T> implements Iterator<T> {
-        private final Iterator<T> iter ;
-        private final int         N ;
-        private int               count ;
-
-        IteratorN(Iterator<T> iter, int N) {
-            this.iter = iter ;
-            this.N = N ;
-            this.count = 0 ;
-        }
-
-        @Override
-        public boolean hasNext() {
-            if ( count >= N )
-                return false ;
-            return iter.hasNext() ;
-        }
-
-        @Override
-        public T next() {
-            if ( count >= N )
-                throw new NoSuchElementException() ;
-            T x = iter.next() ;
-            count++ ;
-            return x ;
-        }
-
-        @Override
-        public void remove() {
-            // But leave the count as-is.
-            iter.remove() ;
-        }
-    }
-
-    @SuppressWarnings("unchecked")
-    public static <T> Iterator<T> convert(Iterator<? > iterator) {
-        return (Iterator<T>)iterator ;
-    }
-
-//    /**
-//     * Count the iterable - many iterable objects have a .size() operation 
which
-//     * should be used in preference to this explicit counting operation
-//     */
-//    public static <T> long count(Iterable<T> iterable) {
-//        return count(iterable.iterator()) ;
-//    }
-
-    /** Count the iterator (this is destructive on the iterator) */
-    public static <T> long count(Iterator<T> iterator) {
-        long x = 0 ;
-        while (iterator.hasNext()) {
-            iterator.next() ;
-            x++ ;
-        }
-        return x ;
-        // ActionCount<T> action = new ActionCount<T>() ;
-        // Iter.apply(iterator, action) ;
-        // return action.getCount() ;
-    }
-
-//    // --- Consume the iterator.
-//    /** Consume the iterable */
-//    public static <T> void consume(Iterable<T> iterator) {
-//        count(iterator) ;
-//    }
-
-    /** Consume the iterator */
-    public static <T> void consume(Iterator<T> iterator) {
-        count(iterator) ;
-    }
-
-    // ---- String related helpers
-
-    public static <T> String asString(Iterable<T> stream) {
-        return asString(stream, new AccString<T>()) ;
-    }
-
-    public static <T> String asString(Iterator<T> stream) {
-        return asString(stream, new AccString<T>()) ;
-    }
-
-//    public static <T> String asString(Iter<T> stream) {
-//        return asString(stream, new AccString<T>()) ;
-//    }
-//
-
-    public static <T> String asString(Iterable<T> stream, String sep) {
-        return asString(stream, new AccString<T>(sep)) ;
-    }
-
-    public static <T> String asString(Iterator<T> stream, String sep) {
-        return asString(stream, new AccString<T>(sep)) ;
-    }
-
-//    public static <T> String asString(Iter<T> stream, String sep) {
-//        return asString(stream.iterator(), new AccString<T>(sep)) ;
-//    }
-//
-    public static <T> String asString(Iterable<T> stream, AccString<T> 
formatter) {
-        return asString(stream.iterator(), formatter) ;
-    }
-
-    public static <T> String asString(Iterator<T> stream, AccString<T> 
formatter) {
-        return reduce(stream, formatter) ;
-    }
-
-//    public static <T> String asString(Iter<T> stream, AccString<T> 
formatter) {
-//        return reduce(stream.iterator(), formatter) ;
-//    }
-
-    // ----
-
-    public static <T> void close(Iterator<T> iter) {
-        if ( iter instanceof Closeable )
-            ((Closeable)iter).close() ;
-    }
-
-
-    /**
-     * Print an iterator to stdout, return a copy of the iterator. Printing
-     * occurs now. See {@link #debug} for an operation to print as the
-     * iterator is used. 
-     */
-    public static <T> Iterator<T> log(Iterator<T> stream) {
-        return log(System.out, stream) ;
-    }
-
-    /**
-     * Print an iterator to stdout, return a copy of the iterator. Printing
-     * occurs when the returned iterator is used
-     */
-    public static <T> Iterator<T> log(final PrintStream out, Iterator<T> 
stream) {
-        Iterator<T> iter = debug(out, stream) ;
-        // And force it to run.
-        return Iter.toList(iter).iterator();
-    }
-    
-    /**
-     * Print an iterator to stdout, return a copy of the iterator. Printing
-     * occurs when the iterator is used.  See {@link #log} for
-     * an operation to print now. 
-     */
-    public static <T> Iterator<T> debug(Iterator<T> stream) {
-        return debug(System.out, stream) ;
-    }
-
-    /**
-     * Print an iterator to stdout, return a copy of the iterator. Printing
-     * occurs when the returned iterator is used
-     */
-    public static <T> Iterator<T> debug(final PrintStream out, Iterator<T> 
stream) {
-        try { 
-            Transform<T, T> x = new Transform<T, T>() {
-                @Override
-                public T convert(T item) {
-                    out.println(item) ;
-                    return item ;
-                }
-            } ;
-            return map(stream, x) ;
-        } finally { out.flush() ; }
-    }
-
-    /** Print an iterator (destructive) */
-    public static <T> void print(Iterator<T> stream) {
-        print(System.out, stream) ;
-    }
-
-    /** Print an iterator (destructive) */
-    public static <T> void print(final PrintStream out, Iterator<T> stream) {
-        Action<T> x = new Action<T>() {
-            @Override
-            public void apply(T item) {
-                out.println(item) ;
-            }
-
-        } ;
-        apply(stream, x) ;
-    }
-
-//    /** Print an iterable */
-//    public static <T> void print(PrintStream out, Iterable<T> iterable) {
-//        print(out, iterable.iterator()) ;
-//    }
-//
-//    /** Print an iterable */
-//    public static <T> void print(Iterable<T> iterable) {
-//        print(iterable.iterator()) ;
-//    }
-
-    /** Send the elements of the iterator to a sink - consumes the iterator */
-    public static <T> void sendToSink(Iterator<T> iter, Sink<T> sink) {
-        for (; iter.hasNext();) {
-            T thing = iter.next() ;
-            sink.send(thing) ;
-        }
-        sink.close() ;
-    }
-
-    /** Send the elements of the iterable to a sink */
-    public static <T> void sendToSink(Iterable<T> stream, Sink<T> sink) {
-        sendToSink(stream.iterator(), sink) ;
-    }
-
-    // ----
-    // Iter class part : factories
-
-    public static <T> Iter<T> iter(Iter<T> iter) {
-        return iter ;
-    }
-
-    // May not do what you expect. iter(int[]) is iter of one object (an int[])
-    // public static <T> Iter<T> iter(T...objects)
-    // { return Iter.iter(Arrays.asList(objects)) ; }
-
-    public static <T> Iter<T> iterSingleton(T x) {
-        return Iter.iter(SingletonIterator.create(x)) ;
-    }
-
-    public static <T> Iter<T> iter(Collection<T> collection) {
-        return Iter.iter(collection.iterator()) ;
-    }
-
-    public static <T> Iter<T> iter(Iterator<T> iterator) {
-        if ( iterator instanceof Iter<? > )
-            return (Iter<T>)iterator ;
-        return new Iter<>(iterator) ;
-    }
-
-//    public static <T> Iter<T> iter(Iterable<T> iterable) {
-//        if ( iterable instanceof Iter<? > )
-//            return (Iter<T>)iterable ;
-//        return new Iter<>(iterable.iterator()) ;
-//    }
-
-    public static <T> Iter<T> singletonIter(T item) {
-        return iter(new SingletonIterator<>(item)) ;
-    }
-
-    public static <T> Iter<T> nullIter() {
-        return iter(new NullIterator<T>()) ;
-    }
-
-    /**
-     * Materialize an iterator, that is, force it to run now - useful in
-     * debugging
-     */
-    public static <T> Iterator<T> materialize(Iterator<T> iter) {
-        return Iter.toList(iter).iterator() ;
-    }
-
-    public static <T> Iter<T> concat(Iter<T> iter1, Iter<T> iter2) {
-        if ( iter1 == null )
-            return iter2 ;
-        if ( iter2 == null )
-            return iter1 ;
-        return iter1.append(iter2) ;
-    }
-
-    public static <T> Iterator<T> concat(Iterator<T> iter1, Iterator<T> iter2) 
{
-        if ( iter1 == null )
-            return iter2 ;
-        if ( iter2 == null )
-            return iter1 ;
-        return Iter.iter(iter1).append(Iter.iter(iter2)) ;
-    }
-
-    public static <T> T first(Iterator<T> iter, Filter<T> filter) {
-        for (int idx = 0; iter.hasNext(); idx++) {
-            T t = iter.next() ;
-            if ( filter.accept(t) )
-                return t ;
-            // return idx ;
-        }
-        return null ;
-    }
-
-    public static <T> T first(Collection<T> collection, Filter<T> filter) {
-        return first(collection.iterator(), filter) ;
-    }
-
-    public static <T> int firstIndex(Iterator<T> iter, Filter<T> filter) {
-        for (int idx = 0; iter.hasNext(); idx++) {
-            T t = iter.next() ;
-            if ( filter.accept(t) )
-                return idx ;
-        }
-        return -1 ;
-    }
-
-    public static <T> int firstIndex(Collection<T> collection, Filter<T> 
filter) {
-        return firstIndex(collection.iterator(), filter) ;
-    }
-
-    public static <T> T last(Iterator<T> iter, Filter<T> filter) {
-        T thing = null ;
-        for (int idx = 0; iter.hasNext(); idx++) {
-            T t = iter.next() ;
-            if ( filter.accept(t) )
-                thing = t ;
-        }
-        return thing ;
-    }
-
-    public static <T> T last(Collection<T> collection, Filter<T> filter) {
-        return last(collection.iterator(), filter) ;
-    }
-
-    public static <T> int lastIndex(Iterator<T> iter, Filter<T> filter) {
-        int location = -1 ;
-        for (int idx = 0; iter.hasNext(); idx++) {
-            T t = iter.next() ;
-            if ( filter.accept(t) )
-                location = idx ;
-        }
-        return location ;
-    }
-
-    public static <T> int lastIndex(Collection<T> collection, Filter<T> 
filter) {
-        return lastIndex(collection.iterator(), filter) ;
-    }
-
-    // ------------------------------------------------------
-    // The class.
-
-    private Iterator<T> iterator ;
-
-    private Iter(Iterator<T> iterator) {
-        this.iterator = iterator ;
-    }
-
-    public Set<T> toSet() {
-        return toSet(iterator) ;
-    }
-
-    public List<T> toList() {
-        return toList(iterator) ;
-    }
-
-    public void sendToSink(Sink<T> sink) {
-        sendToSink(iterator, sink) ;
-    }
-
-    public T first(Filter<T> filter) {
-        return first(iterator, filter) ;
-    }
-
-    public int firstIndex(Filter<T> filter) {
-        return firstIndex(iterator, filter) ;
-    }
-
-    public T last(Filter<T> filter) {
-        return last(iterator, filter) ;
-    }
-
-    public int lastIndex(Filter<T> filter) {
-        return lastIndex(iterator, filter) ;
-    }
-
-    public Iter<T> filter(Filter<T> filter) {
-        return iter(filter(iterator, filter)) ;
-    }
-
-    public boolean every(Filter<T> filter) {
-        return every(iterator, filter) ;
-    }
-
-    public boolean some(Filter<T> filter) {
-        return some(iterator, filter) ;
-    }
-
-    public Iter<T> removeNulls() {
-        return filter(new FilterOutNulls<T>()) ;
-    }
-
-    public <R> Iter<R> map(Transform<T, R> converter) {
-        return iter(map(iterator, converter)) ;
-    }
-
-    /**
-     * Apply an action to everything in the stream, yielding a stream of the
-     * same items
-     */
-    public Iter<T> operate(Action<T> action) {
-        return iter(operate(iterator, action)) ;
-    }
-
-    public <R> R reduce(Accumulate<T, R> aggregator) {
-        return reduce(iterator, aggregator) ;
-    }
-
-    public void apply(Action<T> action) {
-        apply(iterator, action) ;
-    }
-
-    /** Join on an iterator.
-     * If there are going to be many iterators, uit is better to create an 
{@link IteratorConcat}
-     * and <tt>.add</tt> each iterator.  The overheads are much lower. 
-     */
-    public Iter<T> append(Iterator<T> iter) {
-        return iter(IteratorCons.create(iterator, iter)) ;
-    }
-
-    /** Return an Iter that yields at most the first N items */
-    public Iter<T> take(int N) {
-        return Iter.iter(take(iterator, N)) ;
-    }
-
-    /** Count the iterator (this is destructive on the iterator) */
-    public long count() {
-        ActionCount<T> action = new ActionCount<>() ;
-        apply(action) ;
-        return action.getCount() ;
-    }
-
-    public String asString() {
-        return asString(iterator) ;
-    }
-
-    public String asString(String sep) {
-        return asString(iterator, sep) ;
-    }
-
-    public Iter<T> distinct() {
-        return iter((distinct(iterator()))) ;
-    }
-
-    public Iter<T> distinctAdjacent() {
-        return iter(distinctAdjacent(iterator())) ;
-    }
-
-    // ---- Iterable
-//    @Override
-    public Iterator<T> iterator() {
-        return iterator ;
-    }
-
-    // ---- Iterator
-
-    @Override
-    public boolean hasNext() {
-        return iterator.hasNext() ;
-    }
-
-    @Override
-    public T next() {
-        return iterator.next() ;
-    }
-
-    @Override
-    public void remove() {
-        iterator.remove() ;
-    }
-}

Reply via email to