diff options
author | Michael Koch <mkoch@gcc.gnu.org> | 2003-09-26 19:59:56 +0000 |
---|---|---|
committer | Michael Koch <mkoch@gcc.gnu.org> | 2003-09-26 19:59:56 +0000 |
commit | fc56f7acc1f6e1d32c601054c3af3ede4d82a6db (patch) | |
tree | 8052669bcc18adae7ef9f0eb86a5e740e8fd05b0 /libjava | |
parent | 8aa43dd09b78afbb4b2c7b08f7f4b3f1fe68517e (diff) | |
download | gcc-fc56f7acc1f6e1d32c601054c3af3ede4d82a6db.zip gcc-fc56f7acc1f6e1d32c601054c3af3ede4d82a6db.tar.gz gcc-fc56f7acc1f6e1d32c601054c3af3ede4d82a6db.tar.bz2 |
[multiple changes]
2003-09-26 Sascha Brawer <brawer@dandelis.ch>
* java/awt/image/SinglePixelPackedSampleModel.java (createDataBuffer):
Save space for some pixels at the buffer end. Added Javadoc.
2003-09-26 Tom Tromey <tromey@redhat.com>
* java/io/ObjectOutputStream.java (writeFields): Fixed
indentation.
(putFields): Likewise.
From-SVN: r71829
Diffstat (limited to 'libjava')
-rw-r--r-- | libjava/ChangeLog | 11 | ||||
-rw-r--r-- | libjava/java/awt/image/SinglePixelPackedSampleModel.java | 18 | ||||
-rw-r--r-- | libjava/java/io/ObjectOutputStream.java | 274 |
3 files changed, 162 insertions, 141 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 2d4e17d..a3ebdb3 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,14 @@ +2003-09-26 Sascha Brawer <brawer@dandelis.ch> + + * java/awt/image/SinglePixelPackedSampleModel.java (createDataBuffer): + Save space for some pixels at the buffer end. Added Javadoc. + +2003-09-26 Tom Tromey <tromey@redhat.com> + + * java/io/ObjectOutputStream.java (writeFields): Fixed + indentation. + (putFields): Likewise. + 2003-09-26 Michael Koch <konqueror@gmx.de> * java/nio/ByteBufferHelper.java: diff --git a/libjava/java/awt/image/SinglePixelPackedSampleModel.java b/libjava/java/awt/image/SinglePixelPackedSampleModel.java index 77edf3d..e67353c4 100644 --- a/libjava/java/awt/image/SinglePixelPackedSampleModel.java +++ b/libjava/java/awt/image/SinglePixelPackedSampleModel.java @@ -1,4 +1,4 @@ -/* Copyright (C) 2000, 2002 Free Software Foundation +/* Copyright (C) 2000, 2002, 2003 Free Software Foundation This file is part of GNU Classpath. @@ -88,13 +88,25 @@ public class SinglePixelPackedSampleModel extends SampleModel return new SinglePixelPackedSampleModel(dataType, w, h, bitMasks); } + + /** + * Creates a DataBuffer for holding pixel data in the format and + * layout described by this SampleModel. The returned buffer will + * consist of one single bank. + */ public DataBuffer createDataBuffer() { - // Important: use scanlineStride here, not width! - int size = scanlineStride*height; + int size; + + // We can save (scanlineStride - width) pixels at the very end of + // the buffer. The Sun reference implementation (J2SE 1.3.1 and + // 1.4.1_01) seems to do this; tested with Mauve test code. + size = scanlineStride * (height - 1) + width; + return Buffers.createBuffer(getDataType(), size); } + public int[] getSampleSize() { return sampleSize; diff --git a/libjava/java/io/ObjectOutputStream.java b/libjava/java/io/ObjectOutputStream.java index 3e47e70..f79ac3e 100644 --- a/libjava/java/io/ObjectOutputStream.java +++ b/libjava/java/io/ObjectOutputStream.java @@ -868,140 +868,139 @@ public class ObjectOutputStream extends OutputStream { if (currentPutField == null) { - currentPutField = new PutField () - { - private byte[] prim_field_data - = new byte[currentObjectStreamClass.primFieldSize]; - private Object[] objs - = new Object[currentObjectStreamClass.objectFieldCount]; - - public void put (String name, boolean value) - { - ObjectStreamField field - = currentObjectStreamClass.getField (name); - checkType (field, 'Z'); - prim_field_data[field.getOffset ()] = (byte)(value ? 1 : 0); - } - - public void put (String name, byte value) - { - ObjectStreamField field - = currentObjectStreamClass.getField (name); - checkType (field, 'B'); - prim_field_data[field.getOffset ()] = value; - } - - public void put (String name, char value) - { - ObjectStreamField field - = currentObjectStreamClass.getField (name); - checkType (field, 'C'); - int off = field.getOffset (); - prim_field_data[off++] = (byte)(value >>> 8); - prim_field_data[off] = (byte)value; - } - - public void put (String name, double value) - { - ObjectStreamField field - = currentObjectStreamClass.getField (name); - checkType (field, 'D'); - int off = field.getOffset (); - long l_value = Double.doubleToLongBits (value); - prim_field_data[off++] = (byte)(l_value >>> 52); - prim_field_data[off++] = (byte)(l_value >>> 48); - prim_field_data[off++] = (byte)(l_value >>> 40); - prim_field_data[off++] = (byte)(l_value >>> 32); - prim_field_data[off++] = (byte)(l_value >>> 24); - prim_field_data[off++] = (byte)(l_value >>> 16); - prim_field_data[off++] = (byte)(l_value >>> 8); - prim_field_data[off] = (byte)l_value; - } - - public void put (String name, float value) - { - ObjectStreamField field - = currentObjectStreamClass.getField (name); - checkType (field, 'F'); - int off = field.getOffset (); - int i_value = Float.floatToIntBits (value); - prim_field_data[off++] = (byte)(i_value >>> 24); - prim_field_data[off++] = (byte)(i_value >>> 16); - prim_field_data[off++] = (byte)(i_value >>> 8); - prim_field_data[off] = (byte)i_value; - } - - public void put (String name, int value) - { - ObjectStreamField field - = currentObjectStreamClass.getField (name); - checkType (field, 'I'); - int off = field.getOffset (); - prim_field_data[off++] = (byte)(value >>> 24); - prim_field_data[off++] = (byte)(value >>> 16); - prim_field_data[off++] = (byte)(value >>> 8); - prim_field_data[off] = (byte)value; - } - - public void put (String name, long value) - { - ObjectStreamField field - = currentObjectStreamClass.getField (name); - checkType (field, 'J'); - int off = field.getOffset (); - prim_field_data[off++] = (byte)(value >>> 52); - prim_field_data[off++] = (byte)(value >>> 48); - prim_field_data[off++] = (byte)(value >>> 40); - prim_field_data[off++] = (byte)(value >>> 32); - prim_field_data[off++] = (byte)(value >>> 24); - prim_field_data[off++] = (byte)(value >>> 16); - prim_field_data[off++] = (byte)(value >>> 8); - prim_field_data[off] = (byte)value; - } - - public void put (String name, short value) - { - ObjectStreamField field - = currentObjectStreamClass.getField (name); - checkType (field, 'S'); - int off = field.getOffset (); - prim_field_data[off++] = (byte)(value >>> 8); - prim_field_data[off] = (byte)value; - } - - public void put (String name, Object value) - { - ObjectStreamField field - = currentObjectStreamClass.getField (name); - if (field == null) - throw new IllegalArgumentException (); - if (value != null && - ! field.getType ().isAssignableFrom (value.getClass ())) - throw new IllegalArgumentException (); - objs[field.getOffset ()] = value; - } - - public void write (ObjectOutput out) throws IOException - { - // Apparently Block data is not used with PutField as per - // empirical evidence against JDK 1.2. Also see Mauve test - // java.io.ObjectInputOutput.Test.GetPutField. - boolean oldmode = setBlockDataMode (false); - out.write (prim_field_data); - for (int i = 0; i < objs.length; ++ i) - out.writeObject (objs[i]); - setBlockDataMode (oldmode); - } - - private void checkType (ObjectStreamField field, char type) - throws IllegalArgumentException - { - if (TypeSignature.getEncodingOfClass (field.getType ()).charAt (0) - != type) - throw new IllegalArgumentException (); - } - }; - // end PutFieldImpl + currentPutField = new PutField () + { + private byte[] prim_field_data = + new byte[currentObjectStreamClass.primFieldSize]; + private Object[] objs = + new Object[currentObjectStreamClass.objectFieldCount]; + + public void put (String name, boolean value) + { + ObjectStreamField field + = currentObjectStreamClass.getField (name); + checkType (field, 'Z'); + prim_field_data[field.getOffset ()] = (byte)(value ? 1 : 0); + } + + public void put (String name, byte value) + { + ObjectStreamField field + = currentObjectStreamClass.getField (name); + checkType (field, 'B'); + prim_field_data[field.getOffset ()] = value; + } + + public void put (String name, char value) + { + ObjectStreamField field + = currentObjectStreamClass.getField (name); + checkType (field, 'C'); + int off = field.getOffset (); + prim_field_data[off++] = (byte)(value >>> 8); + prim_field_data[off] = (byte)value; + } + + public void put (String name, double value) + { + ObjectStreamField field + = currentObjectStreamClass.getField (name); + checkType (field, 'D'); + int off = field.getOffset (); + long l_value = Double.doubleToLongBits (value); + prim_field_data[off++] = (byte)(l_value >>> 52); + prim_field_data[off++] = (byte)(l_value >>> 48); + prim_field_data[off++] = (byte)(l_value >>> 40); + prim_field_data[off++] = (byte)(l_value >>> 32); + prim_field_data[off++] = (byte)(l_value >>> 24); + prim_field_data[off++] = (byte)(l_value >>> 16); + prim_field_data[off++] = (byte)(l_value >>> 8); + prim_field_data[off] = (byte)l_value; + } + + public void put (String name, float value) + { + ObjectStreamField field + = currentObjectStreamClass.getField (name); + checkType (field, 'F'); + int off = field.getOffset (); + int i_value = Float.floatToIntBits (value); + prim_field_data[off++] = (byte)(i_value >>> 24); + prim_field_data[off++] = (byte)(i_value >>> 16); + prim_field_data[off++] = (byte)(i_value >>> 8); + prim_field_data[off] = (byte)i_value; + } + + public void put (String name, int value) + { + ObjectStreamField field + = currentObjectStreamClass.getField (name); + checkType (field, 'I'); + int off = field.getOffset (); + prim_field_data[off++] = (byte)(value >>> 24); + prim_field_data[off++] = (byte)(value >>> 16); + prim_field_data[off++] = (byte)(value >>> 8); + prim_field_data[off] = (byte)value; + } + + public void put (String name, long value) + { + ObjectStreamField field + = currentObjectStreamClass.getField (name); + checkType (field, 'J'); + int off = field.getOffset (); + prim_field_data[off++] = (byte)(value >>> 52); + prim_field_data[off++] = (byte)(value >>> 48); + prim_field_data[off++] = (byte)(value >>> 40); + prim_field_data[off++] = (byte)(value >>> 32); + prim_field_data[off++] = (byte)(value >>> 24); + prim_field_data[off++] = (byte)(value >>> 16); + prim_field_data[off++] = (byte)(value >>> 8); + prim_field_data[off] = (byte)value; + } + + public void put (String name, short value) + { + ObjectStreamField field + = currentObjectStreamClass.getField (name); + checkType (field, 'S'); + int off = field.getOffset (); + prim_field_data[off++] = (byte)(value >>> 8); + prim_field_data[off] = (byte)value; + } + + public void put (String name, Object value) + { + ObjectStreamField field + = currentObjectStreamClass.getField (name); + if (field == null) + throw new IllegalArgumentException (); + if (value != null && + ! field.getType ().isAssignableFrom (value.getClass ())) + throw new IllegalArgumentException (); + objs[field.getOffset ()] = value; + } + + public void write (ObjectOutput out) throws IOException + { + // Apparently Block data is not used with PutField as per + // empirical evidence against JDK 1.2. Also see Mauve test + // java.io.ObjectInputOutput.Test.GetPutField. + boolean oldmode = setBlockDataMode (false); + out.write (prim_field_data); + for (int i = 0; i < objs.length; ++ i) + out.writeObject (objs[i]); + setBlockDataMode (oldmode); + } + + private void checkType (ObjectStreamField field, char type) + throws IllegalArgumentException + { + if (TypeSignature.getEncodingOfClass(field.getType ()).charAt(0) + != type) + throw new IllegalArgumentException (); + } + }; } return currentPutField; @@ -1013,10 +1012,9 @@ public class ObjectOutputStream extends OutputStream if (currentPutField == null) throw new NotActiveException ("writeFields can only be called after putFields has been called"); - // moved here from putFields since putFields - // may be called more than once, but not writeFields - markFieldsWritten(); - + // putFields may be called more than once, but not writeFields. + markFieldsWritten(); + currentPutField.write (this); currentPutField = null; } |