Author: billbarker Date: Fri Jun 19 03:26:28 2009 New Revision: 786359 URL: http://svn.apache.org/viewvc?rev=786359&view=rev Log: Change the Complex isNaN and isInfinite fields to be transient
Modified: commons/proper/math/trunk/src/java/org/apache/commons/math/complex/Complex.java commons/proper/math/trunk/src/test/org/apache/commons/math/complex/ComplexTest.java Modified: commons/proper/math/trunk/src/java/org/apache/commons/math/complex/Complex.java URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/java/org/apache/commons/math/complex/Complex.java?rev=786359&r1=786358&r2=786359&view=diff ============================================================================== --- commons/proper/math/trunk/src/java/org/apache/commons/math/complex/Complex.java (original) +++ commons/proper/math/trunk/src/java/org/apache/commons/math/complex/Complex.java Fri Jun 19 03:26:28 2009 @@ -17,6 +17,8 @@ package org.apache.commons.math.complex; +import java.io.IOException; +import java.io.ObjectInputStream; import java.io.Serializable; import java.util.ArrayList; import java.util.List; @@ -44,9 +46,7 @@ * @version $Revision$ $Date$ */ public class Complex implements FieldElement<Complex>, Serializable { - // TODO: Add Serializable documentation - // TODO: Check Serializable implementation - + /** Serializable version identifier */ private static final long serialVersionUID = -6195664516687396620L; @@ -78,12 +78,12 @@ /** * Record whether this complex number is equal to NaN */ - private final boolean isNaN; + private final transient boolean isNaN; /** * Record whether this complex number is infinite */ - private final boolean isInfinite; + private final transient boolean isInfinite; /** * Create a complex number given the real and imaginary parts. @@ -972,6 +972,34 @@ return new Complex(real, imaginary); } + /** + * Deserialize a Complex Object. + * @param ois The stream to deserialize from. + * @throws IOException If there is an error reading the stream. + * @throws ClassNotFoundException If this class cannot be found. + */ + private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException { + ois.defaultReadObject(); + + try { + final java.lang.reflect.Field fNaN = getClass().getDeclaredField("isNaN"); + fNaN.setAccessible(true); + fNaN.set(this, Double.isNaN(real) || Double.isNaN(imaginary)); + final java.lang.reflect.Field fInf = getClass().getDeclaredField("isInfinite"); + fInf.setAccessible(true); + fInf.set(this, !isNaN && (Double.isInfinite(real) || Double.isInfinite(imaginary))); + } catch (IllegalAccessException iae) { + IOException ioe = new IOException(); + ioe.initCause(iae); + throw ioe; + } catch (NoSuchFieldException nsfe) { + IOException ioe = new IOException(); + ioe.initCause(nsfe); + throw ioe; + } + + } + /** {...@inheritdoc} */ public ComplexField getField() { return ComplexField.getInstance(); Modified: commons/proper/math/trunk/src/test/org/apache/commons/math/complex/ComplexTest.java URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/org/apache/commons/math/complex/ComplexTest.java?rev=786359&r1=786358&r2=786359&view=diff ============================================================================== --- commons/proper/math/trunk/src/test/org/apache/commons/math/complex/ComplexTest.java (original) +++ commons/proper/math/trunk/src/test/org/apache/commons/math/complex/ComplexTest.java Fri Jun 19 03:26:28 2009 @@ -902,5 +902,16 @@ assertEquals(nan, zeroNaN.getArgument()); assertEquals(nan, Complex.NaN.getArgument()); } + + public void testSerial() { + Complex z = new Complex(3.0, 4.0); + assertEquals(z, TestUtils.serializeAndRecover(z)); + Complex ncmplx = (Complex)TestUtils.serializeAndRecover(oneNaN); + assertEquals(nanZero, ncmplx); + assertTrue(ncmplx.isNaN()); + Complex infcmplx = (Complex)TestUtils.serializeAndRecover(infInf); + assertEquals(infInf, infcmplx); + assertTrue(infcmplx.isInfinite()); + } }