From f2160f4bd1c8ac67e5a86a6710d431e8932877f9 Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Fri, 28 May 2010 11:47:51 +0000
Subject: [PATCH] Synchronize SDK on java.net with internal repository.

---
 sdk/src/com/sun/opends/sdk/util/SubstringReader.java |  139 ++++++++++++++++++++++++++++++++++++----------
 1 files changed, 108 insertions(+), 31 deletions(-)

diff --git a/sdk/src/com/sun/opends/sdk/util/SubstringReader.java b/sdk/src/com/sun/opends/sdk/util/SubstringReader.java
index 8dec1fd..04d46d6 100644
--- a/sdk/src/com/sun/opends/sdk/util/SubstringReader.java
+++ b/sdk/src/com/sun/opends/sdk/util/SubstringReader.java
@@ -22,82 +22,159 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2009 Sun Microsystems, Inc.
+ *      Copyright 2009-2010 Sun Microsystems, Inc.
  */
 
 package com.sun.opends.sdk.util;
 
+
+
 /**
  * A sub-string reader.
  */
 public class SubstringReader
 {
-  private String source;
+  // The source string.
+  private final String source;
+  // The current position.
   private int pos;
+  // The marked position.
   private int mark;
+  // The length of the source.
+  private final int length;
 
-  public SubstringReader(String s) {
+
+
+  /**
+   * Creates an instance of SubstringReader.
+   *
+   * @param s
+   *          the source of the reader.
+   */
+  public SubstringReader(final String s)
+  {
     Validator.ensureNotNull(s);
     source = s;
+    length = s.length();
     pos = 0;
     mark = 0;
   }
 
+
+
   /**
-   * Attemps to read a substring of the specified length.
+   * Returns the source string.
    *
-   * @param length The number of characters to read.
-   * @return The substring.
+   * @return source string.
    */
-  public String read(int length)
-  {
-    String substring = source.substring(pos, pos + length);
-    pos += length;
-    return substring;
-  }
-
-  public char read()
-  {
-    return source.charAt(pos++);
-  }
-
   public String getString()
   {
     return source;
   }
 
-  public int pos()
-  {
-    return pos;
-  }
 
-  public int remaining()
-  {
-    return source.length() - pos;
-  }
 
   /**
-   * Marks the present position in the stream. Subsequent calls
-   * to reset() will reposition the stream to this point.
+   * Marks the present position in the stream. Subsequent calls to reset() will
+   * reposition the stream to this point.
    */
   public void mark()
   {
     mark = pos;
   }
 
+
+
   /**
-   * Resets the stream to the most recent mark, or to the beginning
-   * of the string if it has never been marked.
+   * Returns the current position of the reader.
+   *
+   * @return current position of the reader.
+   */
+  public int pos()
+  {
+    return pos;
+  }
+
+
+
+  /**
+   * Attemps to read a character from the current position. The caller must
+   * ensure that the source string has the data available from the current
+   * position.
+   *
+   * @return The characted at the current position.
+   * @Exception StringIndexOutOfBoundsException if there is no more data
+   *            available to read.
+   */
+  public char read()
+  {
+    if (pos >= length)
+    {
+      throw new StringIndexOutOfBoundsException();
+    }
+    return source.charAt(pos++);
+  }
+
+
+
+  /**
+   * Attemps to read a substring of the specified length from the current
+   * position. The caller must ensure that the requested length is within the
+   * bounds i.e. the requested length from the current position should not
+   * exceed the length of the source string.
+   *
+   * @param length
+   *          The number of characters to read.
+   * @return The substring.
+   * @Exception StringIndexOutOfBoundsException if the length exceeds the
+   *            allowed length.
+   */
+  public String read(final int length)
+  {
+    if (length > this.length || pos + length > this.length)
+    {
+      throw new StringIndexOutOfBoundsException();
+    }
+    final String substring = source.substring(pos, pos + length);
+    pos += length;
+    return substring;
+  }
+
+
+
+  /**
+   * Returns the remaining length of the available data.
+   *
+   * @return remaining length.
+   */
+  public int remaining()
+  {
+    return length - pos;
+  }
+
+
+
+  /**
+   * Resets the stream to the most recent mark, or to the beginning of the
+   * string if it has never been marked.
    */
   public void reset()
   {
     pos = mark;
   }
 
+
+
+  /**
+   * Skips the whitespace characters and advances the reader to the next non
+   * whitespace character.
+   *
+   * @return number of whitespace characters skipped.
+   */
   public int skipWhitespaces()
   {
     int skipped = 0;
-    while(pos < source.length() && source.charAt(pos) == ' ')
+    while (pos < length && source.charAt(pos) == ' ')
     {
       skipped++;
       pos++;

--
Gitblit v1.10.0