Author: erans
Date: Tue Nov 13 16:53:13 2012
New Revision: 1408830

URL: http://svn.apache.org/viewvc?rev=1408830&view=rev
Log:
Use constructor chaining (in place of duplicate code).
Fixed Javadoc typos (expansion factor and contraction criterion default
values).
Javadoc formatting.

Modified:
    
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/util/ResizableDoubleArray.java

Modified: 
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/util/ResizableDoubleArray.java
URL: 
http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/util/ResizableDoubleArray.java?rev=1408830&r1=1408829&r2=1408830&view=diff
==============================================================================
--- 
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/util/ResizableDoubleArray.java
 (original)
+++ 
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/util/ResizableDoubleArray.java
 Tue Nov 13 16:53:13 2012
@@ -23,6 +23,7 @@ import org.apache.commons.math3.exceptio
 import org.apache.commons.math3.exception.MathIllegalStateException;
 import org.apache.commons.math3.exception.MathInternalError;
 import org.apache.commons.math3.exception.NullArgumentException;
+import org.apache.commons.math3.exception.NotStrictlyPositiveException;
 import org.apache.commons.math3.exception.util.LocalizedFormats;
 
 /**
@@ -89,6 +90,11 @@ public class ResizableDoubleArray implem
     /** Serializable version identifier. */
     private static final long serialVersionUID = -3485529955529426875L;
 
+    /** Default value for initial capacity. */
+    private static final int DEFAULT_INITIAL_CAPACITY = 16;
+    /** Default value for initial capacity. */
+    private static final float DEFAULT_EXPANSION_FACTOR = 2.0f;
+
     /**
      * The contraction criteria determines when the internal array will be
      * contracted to fit the number of elements contained in the element
@@ -148,116 +154,118 @@ public class ResizableDoubleArray implem
     }
 
     /**
-     * Create a ResizableArray with default properties.
+     * Creates an instance with default properties.
      * <ul>
-     * <li><code>initialCapacity = 16</code></li>
-     * <li><code>expansionMode = MULTIPLICATIVE_MODE</code></li>
-     * <li><code>expansionFactor = 2.5</code></li>
-     * <li><code>contractionFactor = 2.0</code></li>
+     *  <li>{@code initialCapacity = 16}</li>
+     *  <li>{@code expansionMode = MULTIPLICATIVE}</li>
+     *  <li>{@code expansionFactor = 2.0}</li>
+     *  <li>{@code contractionFactor = 2.5}</li>
      * </ul>
      */
-    public ResizableDoubleArray() {
-        internalArray = new double[initialCapacity];
+    public ResizableDoubleArray()
+        throws MathIllegalArgumentException {
+        this(DEFAULT_INITIAL_CAPACITY);
     }
 
     /**
-     * Create a ResizableArray with the specified initial capacity.  Other
-     * properties take default values:
-      * <ul>
-     * <li><code>expansionMode = MULTIPLICATIVE_MODE</code></li>
-     * <li><code>expansionFactor = 2.5</code></li>
-     * <li><code>contractionFactor = 2.0</code></li>
+     * Creates an instance with the specified initial capacity.
+     * Other properties take default values:
+     * <ul>
+     *  <li>{@code expansionMode = MULTIPLICATIVE}</li>
+     *  <li>{@code expansionFactor = 2.0}</li>
+     *  <li>{@code contractionFactor = 2.5}</li>
      * </ul>
-     * @param initialCapacity The initial size of the internal storage array
-     * @throws MathIllegalArgumentException if initialCapacity is not > 0
+     * @param initialCapacity Initial size of the internal storage array.
+     * @throws MathIllegalArgumentException if {@code initialCapacity <= 0}.
      */
-    public ResizableDoubleArray(int initialCapacity) throws 
MathIllegalArgumentException {
-        setInitialCapacity(initialCapacity);
-        internalArray = new double[this.initialCapacity];
+    public ResizableDoubleArray(int initialCapacity)
+        throws MathIllegalArgumentException {
+        this(initialCapacity, DEFAULT_EXPANSION_FACTOR);
     }
 
     /**
-     * Create a ResizableArray from an existing double[] with the
+     * Creates an instance from an existing {@code double[]} with the
      * initial capacity and numElements corresponding to the size of
-     * the supplied double[] array. If the supplied array is null, a
-     * new empty array with the default initial capacity will be created.
+     * the supplied {@code double[]} array.
+     * If the supplied array is null, a new empty array with the default
+     * initial capacity will be created.
      * The input array is copied, not referenced.
      * Other properties take default values:
      * <ul>
-     * <li><code>initialCapacity = 16</code></li>
-     * <li><code>expansionMode = MULTIPLICATIVE_MODE</code></li>
-     * <li><code>expansionFactor = 2.5</code></li>
-     * <li><code>contractionFactor = 2.0</code></li>
+     *  <li>{@code initialCapacity = 16}</li>
+     *  <li>{@code expansionMode = MULTIPLICATIVE}</li>
+     *  <li>{@code expansionFactor = 2.0}</li>
+     *  <li>{@code contractionFactor = 2.5}</li>
      * </ul>
      *
      * @param initialArray initial array
      * @since 2.2
      */
     public ResizableDoubleArray(double[] initialArray) {
-        if (initialArray == null) {
-            this.internalArray = new double[initialCapacity];
-        } else {
-            this.internalArray = new double[initialArray.length];
-            System.arraycopy(initialArray, 0, this.internalArray, 0, 
initialArray.length);
-            initialCapacity = initialArray.length;
-            numElements = initialArray.length;
-        }
+        this(DEFAULT_INITIAL_CAPACITY,
+             DEFAULT_EXPANSION_FACTOR,
+             0.5f + DEFAULT_EXPANSION_FACTOR,
+             ExpansionMode.MULTIPLICATIVE,
+             initialArray);
     }
 
     /**
-     * <p>
-     * Create a ResizableArray with the specified initial capacity
-     * and expansion factor.  The remaining properties take default
-     * values:
+     * Creates an instance with the specified initial capacity
+     * and expansion factor.
+     * The remaining properties take default values:
      * <ul>
-     * <li><code>expansionMode = MULTIPLICATIVE_MODE</code></li>
-     * <li><code>contractionFactor = 0.5 + expansionFactor</code></li>
-     * </ul></p>
-     * <p>
+     *  <li>{@code expansionMode = MULTIPLICATIVE}</li>
+     *  <li>{@code contractionFactor = 0.5 + expansionFactor}</li>
+     * </ul>
+     * <br/>
      * Throws IllegalArgumentException if the following conditions are
      * not met:
      * <ul>
-     * <li><code>initialCapacity > 0</code></li>
-     * <li><code>expansionFactor > 1</code></li>
-     * </ul></p>
+     *  <li>{@code initialCapacity > 0}</li>
+     *  <li>{@code expansionFactor > 1}</li>
+     * </ul>
      *
-     * @param initialCapacity The initial size of the internal storage array
-     * @param expansionFactor the array will be expanded based on this
-     *                        parameter
-     * @throws MathIllegalArgumentException if parameters are not valid
+     * @param initialCapacity Initial size of the internal storage array.
+     * @param expansionFactor The array will be expanded based on this
+     * parameter.
+     * @throws MathIllegalArgumentException if parameters are not valid.
      */
-    public ResizableDoubleArray(int initialCapacity, float expansionFactor) 
throws MathIllegalArgumentException {
-        this.expansionFactor = expansionFactor;
-        setInitialCapacity(initialCapacity);
-        internalArray = new double[initialCapacity];
-        setContractionCriteria(expansionFactor +0.5f);
+    public ResizableDoubleArray(int initialCapacity,
+                                float expansionFactor)
+        throws MathIllegalArgumentException {
+        this(initialCapacity,
+             expansionFactor,
+             0.5f + expansionFactor);
     }
 
     /**
-     * <p>
-     * Create a ResizableArray with the specified initialCapacity,
-     * expansionFactor, and contractionCriteria. The <code>expansionMode</code>
-     * will default to <code>MULTIPLICATIVE_MODE.</code></p>
-     * <p>
+     * Creates an instance with the specified initialCapacity,
+     * expansionFactor, and contractionCriteria.
+     * The expansion mode will default to {@code MULTIPLICATIVE}.
+     * <br/>
      * Throws IllegalArgumentException if the following conditions are
      * not met:
      * <ul>
-     * <li><code>initialCapacity > 0</code></li>
-     * <li><code>expansionFactor > 1</code></li>
-     * <li><code>contractionFactor >= expansionFactor</code></li>
-     * </ul></p>
-     * @param initialCapacity The initial size of the internal storage array
-     * @param expansionFactor the array will be expanded based on this
-     *                        parameter
-     * @param contractionCriteria The contraction Criteria.
-     * @throws MathIllegalArgumentException if parameters are not valid
+     *  <li>{@code initialCapacity > 0}</li>
+     *  <li>{@code expansionFactor > 1}</li>
+     *  <li>{@code contractionFactor >= expansionFactor}</li>
+     * </ul>
+     *
+     * @param initialCapacity Initial size of the internal storage array..
+     * @param expansionFactor The array will be expanded based on this
+     * parameter.
+     * @param contractionCriteria Contraction criteria.
+     * @throws MathIllegalArgumentException if parameters are not valid.
      */
-    public ResizableDoubleArray(int initialCapacity, float expansionFactor,
-        float contractionCriteria) throws MathIllegalArgumentException {
-        this.expansionFactor = expansionFactor;
-        setContractionCriteria(contractionCriteria);
-        setInitialCapacity(initialCapacity);
-        internalArray = new double[initialCapacity];
+    public ResizableDoubleArray(int initialCapacity,
+                                float expansionFactor,
+                                float contractionCriteria)
+        throws MathIllegalArgumentException {
+        this(initialCapacity,
+             expansionFactor,
+             contractionCriteria,
+             ExpansionMode.MULTIPLICATIVE,
+             null);
     }
 
     /**
@@ -299,7 +307,7 @@ public class ResizableDoubleArray implem
     }
 
     /**
-     * Create a ResizableArray with the specified properties.
+     * Creates an instance with the specified properties.
      * <br/>
      * Throws MathIllegalArgumentException if the following conditions are
      * not met:
@@ -315,7 +323,7 @@ public class ResizableDoubleArray implem
      * @param contractionCriteria Contraction criteria.
      * @param expansionMode Expansion mode.
      * @param data Initial contents of the array.
-     * @throws MathIllegalArgumentException if parameters are not valid.
+     * @throws MathIllegalArgumentException if the parameters are not valid.
      */
     public ResizableDoubleArray(int initialCapacity,
                                 float expansionFactor,
@@ -323,11 +331,16 @@ public class ResizableDoubleArray implem
                                 ExpansionMode expansionMode,
                                 double ... data)
         throws MathIllegalArgumentException {
+        if (initialCapacity <= 0) {
+            throw new 
NotStrictlyPositiveException(LocalizedFormats.INITIAL_CAPACITY_NOT_POSITIVE,
+                                                   initialCapacity);
+        }
+        checkContractExpand(contractionCriteria, expansionFactor);
 
-        setExpansionFactor(expansionFactor);
-        setContractionCriteria(contractionCriteria);
-        setExpansionMode(expansionMode);
-        setInitialCapacity(initialCapacity);
+        this.expansionFactor = expansionFactor;
+        this.contractionCriteria = contractionCriteria;
+        this.expansionMode = expansionMode;
+        this.initialCapacity = initialCapacity;
         internalArray = new double[initialCapacity];
         numElements = 0;
         startIndex = 0;


Reply via email to