OSDN Git Service

libjava/ChangeLog:
[pf3gnuchains/gcc-fork.git] / libjava / classpath / gnu / java / util / regex / CharIndexedInputStream.java
index 844fada..e42710b 100644 (file)
@@ -42,154 +42,212 @@ import java.io.InputStream;
 
 // TODO: move(x) shouldn't rely on calling next() x times
 
-class CharIndexedInputStream implements CharIndexed {
-    private static final int BUFFER_INCREMENT = 1024;
-    private static final int UNKNOWN = Integer.MAX_VALUE; // value for end
-    
-    private BufferedInputStream br;
-
-    // so that we don't try to reset() right away
-    private int index = -1;
-
-    private int bufsize = BUFFER_INCREMENT;
-
-    private int end = UNKNOWN;
-
-    private char cached = OUT_OF_BOUNDS;
-
-    // Big enough for a \r\n pair
-    // lookBehind[0] = most recent
-    // lookBehind[1] = second most recent
-    private char[] lookBehind = new char[] { OUT_OF_BOUNDS, OUT_OF_BOUNDS }; 
-    
-    CharIndexedInputStream(InputStream str, int index) {
-       if (str instanceof BufferedInputStream) br = (BufferedInputStream) str;
-       else br = new BufferedInputStream(str,BUFFER_INCREMENT);
-       next();
-       if (index > 0) move(index);
-    }
-    
-    private boolean next() {
-       if (end == 1) return false;
-       end--; // closer to end
-
-       try {
-           if (index != -1) {
-               br.reset();
-           }
-           int i = br.read();
-           br.mark(bufsize);
-           if (i == -1) {
-               end = 1;
-               cached = OUT_OF_BOUNDS;
-               return false;
-           }
-           cached = (char) i;
-           index = 1;
-       } catch (IOException e) { 
-           e.printStackTrace();
-           cached = OUT_OF_BOUNDS;
-           return false; 
+class CharIndexedInputStream implements CharIndexed
+{
+  private static final int BUFFER_INCREMENT = 1024;
+  private static final int UNKNOWN = Integer.MAX_VALUE;        // value for end
+
+  private BufferedInputStream br;
+
+  // so that we don't try to reset() right away
+  private int index = -1;
+
+  private int bufsize = BUFFER_INCREMENT;
+
+  private int end = UNKNOWN;
+
+  private char cached = OUT_OF_BOUNDS;
+
+  // Big enough for a \r\n pair
+  // lookBehind[0] = most recent
+  // lookBehind[1] = second most recent
+  private char[] lookBehind = new char[]{ OUT_OF_BOUNDS, OUT_OF_BOUNDS };
+
+    CharIndexedInputStream (InputStream str, int index)
+  {
+    if (str instanceof BufferedInputStream)
+      br = (BufferedInputStream) str;
+    else
+      br = new BufferedInputStream (str, BUFFER_INCREMENT);
+    next ();
+    if (index > 0)
+      move (index);
+  }
+
+  private boolean next ()
+  {
+    if (end == 1)
+      return false;
+    end--;                     // closer to end
+
+    try
+    {
+      if (index != -1)
+       {
+         br.reset ();
        }
-       return true;
-    }
-    
-    public char charAt(int index) {
-       if (index == 0) {
-           return cached;
-       } else if (index >= end) {
-           return OUT_OF_BOUNDS;
-       } else if (index == -1) {
-           return lookBehind[0];
-       } else if (index == -2) {
-           return lookBehind[1];
-       } else if (index < -2) {
-           return OUT_OF_BOUNDS;
-       } else if (index >= bufsize) {
-           // Allocate more space in the buffer.
-           try {
-               while (bufsize <= index) bufsize += BUFFER_INCREMENT;
-               br.reset();
-               br.mark(bufsize);
-               br.skip(index-1);
-           } catch (IOException e) { }
-       } else if (this.index != index) {
-           try {
-               br.reset();
-               br.skip(index-1);
-           } catch (IOException e) { }
+      int i = br.read ();
+      br.mark (bufsize);
+      if (i == -1)
+       {
+         end = 1;
+         cached = OUT_OF_BOUNDS;
+         return false;
        }
-       char ch = OUT_OF_BOUNDS;
-       
-       try {
-           int i = br.read();
-           this.index = index+1; // this.index is index of next pos relative to charAt(0)
-           if (i == -1) {
-               // set flag that next should fail next time?
-               end = index;
-               return ch;
-           }
-           ch = (char) i;
-       } catch (IOException ie) { }
-       
-       return ch;
-    }
-    
-    public boolean move(int index) {
-       // move read position [index] clicks from 'charAt(0)'
-       boolean retval = true;
-       while (retval && (index-- > 0)) retval = next();
-       return retval;
-    }
-    
-    public boolean isValid() {
-       return (cached != OUT_OF_BOUNDS);
-    }
-
-    public CharIndexed lookBehind(int index, int length) {
-       throw new UnsupportedOperationException(
-           "difficult to look behind for an input stream");
-    }
-
-    public int length() {
-       throw new UnsupportedOperationException(
-           "difficult to tell the length for an input stream");
-    }
-
-    public void setLastMatch(REMatch match) {
-       throw new UnsupportedOperationException(
-           "difficult to support setLastMatch for an input stream");
-    }
-
-    public REMatch getLastMatch() {
-       throw new UnsupportedOperationException(
-           "difficult to support getLastMatch for an input stream");
-    }
-
-    public void setHitEnd(REMatch match) {
-       throw new UnsupportedOperationException(
-           "difficult to support setHitEnd for an input stream");
-    }
-
-    public boolean hitEnd() {
-       throw new UnsupportedOperationException(
-           "difficult to support hitEnd for an input stream");
+      cached = (char) i;
+      index = 1;
+    } catch (IOException e)
+    {
+      e.printStackTrace ();
+      cached = OUT_OF_BOUNDS;
+      return false;
     }
-
-    public int getAnchor() {
-       throw new UnsupportedOperationException(
-           "difficult to support getAnchor for an input stream");
-    }
-
-    public void setAnchor(int anchor) {
-       throw new UnsupportedOperationException(
-           "difficult to support setAnchor for an input stream");
+    return true;
+  }
+
+  public char charAt (int index)
+  {
+    if (index == 0)
+      {
+       return cached;
+      }
+    else if (index >= end)
+      {
+       return OUT_OF_BOUNDS;
+      }
+    else if (index == -1)
+      {
+       return lookBehind[0];
+      }
+    else if (index == -2)
+      {
+       return lookBehind[1];
+      }
+    else if (index < -2)
+      {
+       return OUT_OF_BOUNDS;
+      }
+    else if (index >= bufsize)
+      {
+       // Allocate more space in the buffer.
+       try
+       {
+         while (bufsize <= index)
+           bufsize += BUFFER_INCREMENT;
+         br.reset ();
+         br.mark (bufsize);
+         br.skip (index - 1);
+       }
+       catch (IOException e)
+       {
+       }
+      }
+    else if (this.index != index)
+      {
+       try
+       {
+         br.reset ();
+         br.skip (index - 1);
+       }
+       catch (IOException e)
+       {
+       }
+      }
+    char ch = OUT_OF_BOUNDS;
+
+    try
+    {
+      int i = br.read ();
+      this.index = index + 1;  // this.index is index of next pos relative to charAt(0)
+      if (i == -1)
+       {
+         // set flag that next should fail next time?
+         end = index;
+         return ch;
+       }
+      ch = (char) i;
+    } catch (IOException ie)
+    {
     }
 
-    public boolean move1(int index) {
-       throw new UnsupportedOperationException(
-           "difficult to support move1 for an input stream");
-    }
+    return ch;
+  }
+
+  public boolean move (int index)
+  {
+    // move read position [index] clicks from 'charAt(0)'
+    boolean retval = true;
+    while (retval && (index-- > 0))
+      retval = next ();
+    return retval;
+  }
+
+  public boolean isValid ()
+  {
+    return (cached != OUT_OF_BOUNDS);
+  }
+
+  public CharIndexed lookBehind (int index, int length)
+  {
+    throw new
+      UnsupportedOperationException
+      ("difficult to look behind for an input stream");
+  }
+
+  public int length ()
+  {
+    throw new
+      UnsupportedOperationException
+      ("difficult to tell the length for an input stream");
+  }
+
+  public void setLastMatch (REMatch match)
+  {
+    throw new
+      UnsupportedOperationException
+      ("difficult to support setLastMatch for an input stream");
+  }
+
+  public REMatch getLastMatch ()
+  {
+    throw new
+      UnsupportedOperationException
+      ("difficult to support getLastMatch for an input stream");
+  }
+
+  public void setHitEnd (REMatch match)
+  {
+    throw new
+      UnsupportedOperationException
+      ("difficult to support setHitEnd for an input stream");
+  }
+
+  public boolean hitEnd ()
+  {
+    throw new
+      UnsupportedOperationException
+      ("difficult to support hitEnd for an input stream");
+  }
+
+  public int getAnchor ()
+  {
+    throw new
+      UnsupportedOperationException
+      ("difficult to support getAnchor for an input stream");
+  }
+
+  public void setAnchor (int anchor)
+  {
+    throw new
+      UnsupportedOperationException
+      ("difficult to support setAnchor for an input stream");
+  }
+
+  public boolean move1 (int index)
+  {
+    throw new
+      UnsupportedOperationException
+      ("difficult to support move1 for an input stream");
+  }
 
 }
-