--- old/src/java.desktop/macosx/classes/sun/java2d/IntegerNIORaster.java 2016-03-15 19:16:05.649091778 +0530 +++ new/src/java.desktop/macosx/classes/sun/java2d/IntegerNIORaster.java 2016-03-15 19:16:05.452993785 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -40,7 +40,7 @@ ") cannot be <= 0"); } // This is cribbed from java.awt.image.Raster. - DataBuffer db = new DataBufferNIOInt(w * h); + DataBufferNIOInt db = new DataBufferNIOInt(w * h); if (location == null) { location = new Point(0, 0); } @@ -48,13 +48,11 @@ return new IntegerNIORaster(sppsm, db, location); } - public IntegerNIORaster(SampleModel sampleModel, DataBuffer dataBuffer, Point origin) { + public IntegerNIORaster(SampleModel sampleModel, DataBufferNIOInt dataBuffer, Point origin) { // This is all cribbed from sun.awt.image.IntegerInterleavedRaster & sun.awt.image.IntegerComponentRaster super(sampleModel, dataBuffer, new Rectangle(origin.x, origin.y, sampleModel.getWidth(), sampleModel.getHeight()), origin, null); - if (!(dataBuffer instanceof DataBufferNIOInt)) { - throw new RasterFormatException("IntegerNIORasters must have DataBufferNIOInt DataBuffers"); - } - this.data = ((DataBufferNIOInt)dataBuffer).getBuffer(); + + this.data = dataBuffer.getBuffer(); } public WritableRaster createCompatibleWritableRaster() { --- old/src/java.desktop/share/classes/java/awt/image/Raster.java 2016-03-15 19:16:06.245389756 +0530 +++ new/src/java.desktop/share/classes/java/awt/image/Raster.java 2016-03-15 19:16:06.057295763 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -645,15 +645,26 @@ bandOffsets); switch(dataType) { case DataBuffer.TYPE_BYTE: - return new ByteInterleavedRaster(csm, dataBuffer, location); + if (dataBuffer instanceof DataBufferByte) { + return new ByteInterleavedRaster(csm, + (DataBufferByte)dataBuffer, location); + } + break; case DataBuffer.TYPE_USHORT: - return new ShortInterleavedRaster(csm, dataBuffer, location); + if (dataBuffer instanceof DataBufferUShort) { + return new ShortInterleavedRaster(csm, + (DataBufferUShort)dataBuffer, location); + } + break; default: throw new IllegalArgumentException("Unsupported data type " + dataType); } + + // Create the generic raster + return new SunWritableRaster(csm, dataBuffer, location); } /** @@ -713,18 +724,33 @@ switch(dataType) { case DataBuffer.TYPE_BYTE: - return new ByteBandedRaster(bsm, dataBuffer, location); + if (dataBuffer instanceof DataBufferByte) { + return new ByteBandedRaster(bsm, + (DataBufferByte)dataBuffer, location); + } + break; case DataBuffer.TYPE_USHORT: - return new ShortBandedRaster(bsm, dataBuffer, location); + if (dataBuffer instanceof DataBufferUShort) { + return new ShortBandedRaster(bsm, + (DataBufferUShort)dataBuffer, location); + } + break; case DataBuffer.TYPE_INT: - return new SunWritableRaster(bsm, dataBuffer, location); + if (dataBuffer instanceof DataBufferInt) { + return new SunWritableRaster(bsm, + (DataBufferInt)dataBuffer, location); + } + break; default: throw new IllegalArgumentException("Unsupported data type " + dataType); } + + // Create the generic raster + return new SunWritableRaster(bsm, dataBuffer, location); } /** @@ -776,18 +802,33 @@ switch(dataType) { case DataBuffer.TYPE_BYTE: - return new ByteInterleavedRaster(sppsm, dataBuffer, location); + if(dataBuffer instanceof DataBufferByte) { + return new ByteInterleavedRaster(sppsm, + (DataBufferByte)dataBuffer, location); + } + break; case DataBuffer.TYPE_USHORT: - return new ShortInterleavedRaster(sppsm, dataBuffer, location); + if(dataBuffer instanceof DataBufferUShort) { + return new ShortInterleavedRaster(sppsm, + (DataBufferUShort) dataBuffer, location); + } + break; case DataBuffer.TYPE_INT: - return new IntegerInterleavedRaster(sppsm, dataBuffer, location); + if(dataBuffer instanceof DataBufferInt) { + return new IntegerInterleavedRaster(sppsm, + (DataBufferInt) dataBuffer, location); + } + break; default: throw new IllegalArgumentException("Unsupported data type " + dataType); } + + // Create the generic raster + return new SunWritableRaster(sppsm, dataBuffer, location); } /** @@ -847,8 +888,9 @@ new MultiPixelPackedSampleModel(dataType, w, h, bitsPerPixel); if (dataType == DataBuffer.TYPE_BYTE && + dataBuffer instanceof DataBufferByte && (bitsPerPixel == 1 || bitsPerPixel == 2 || bitsPerPixel == 4)) { - return new BytePackedRaster(mppsm, dataBuffer, location); + return new BytePackedRaster(mppsm, (DataBufferByte)dataBuffer, location); } else { return new SunWritableRaster(mppsm, dataBuffer, location); } @@ -891,31 +933,51 @@ if (sm instanceof PixelInterleavedSampleModel) { switch(dataType) { case DataBuffer.TYPE_BYTE: - return new ByteInterleavedRaster(sm, db, location); + if(db instanceof DataBufferByte) { + return new ByteInterleavedRaster(sm, + (DataBufferByte)db, location); + } + break; case DataBuffer.TYPE_USHORT: - return new ShortInterleavedRaster(sm, db, location); + if(db instanceof DataBufferUShort) { + return new ShortInterleavedRaster(sm, + (DataBufferUShort)db, location); + } + break; } } else if (sm instanceof SinglePixelPackedSampleModel) { switch(dataType) { case DataBuffer.TYPE_BYTE: - return new ByteInterleavedRaster(sm, db, location); + if(db instanceof DataBufferByte) { + return new ByteInterleavedRaster(sm, + (DataBufferByte)db, location); + } + break; case DataBuffer.TYPE_USHORT: - return new ShortInterleavedRaster(sm, db, location); + if(db instanceof DataBufferUShort) { + return new ShortInterleavedRaster(sm, + (DataBufferUShort)db, location); + } + break; case DataBuffer.TYPE_INT: - return new IntegerInterleavedRaster(sm, db, location); + if(db instanceof DataBufferInt) { + return new IntegerInterleavedRaster(sm, + (DataBufferInt)db, location); + } + break; } } else if (sm instanceof MultiPixelPackedSampleModel && dataType == DataBuffer.TYPE_BYTE && + db instanceof DataBufferByte && sm.getSampleSize(0) < 8) { - return new BytePackedRaster(sm, db, location); + return new BytePackedRaster(sm, (DataBufferByte)db, location); } // we couldn't do anything special - do the generic thing - - return new Raster(sm,db,location); + return new Raster(sm, db, location); } /** @@ -977,30 +1039,50 @@ if (sm instanceof PixelInterleavedSampleModel) { switch(dataType) { case DataBuffer.TYPE_BYTE: - return new ByteInterleavedRaster(sm, db, location); + if (db instanceof DataBufferByte) { + return new ByteInterleavedRaster(sm, + (DataBufferByte)db, location); + } + break; case DataBuffer.TYPE_USHORT: - return new ShortInterleavedRaster(sm, db, location); + if (db instanceof DataBufferUShort) { + return new ShortInterleavedRaster(sm, + (DataBufferUShort)db, location); + } + break; } } else if (sm instanceof SinglePixelPackedSampleModel) { switch(dataType) { case DataBuffer.TYPE_BYTE: - return new ByteInterleavedRaster(sm, db, location); + if (db instanceof DataBufferByte) { + return new ByteInterleavedRaster(sm, + (DataBufferByte)db, location); + } + break; case DataBuffer.TYPE_USHORT: - return new ShortInterleavedRaster(sm, db, location); + if (db instanceof DataBufferUShort) { + return new ShortInterleavedRaster(sm, + (DataBufferUShort)db, location); + } + break; case DataBuffer.TYPE_INT: - return new IntegerInterleavedRaster(sm, db, location); + if (db instanceof DataBufferInt) { + return new IntegerInterleavedRaster(sm, + (DataBufferInt)db, location); + } + break; } } else if (sm instanceof MultiPixelPackedSampleModel && dataType == DataBuffer.TYPE_BYTE && + db instanceof DataBufferByte && sm.getSampleSize(0) < 8) { - return new BytePackedRaster(sm, db, location); + return new BytePackedRaster(sm, (DataBufferByte)db, location); } // we couldn't do anything special - do the generic thing - return new SunWritableRaster(sm,db,location); } --- old/src/java.desktop/share/classes/sun/awt/image/ByteBandedRaster.java 2016-03-15 19:16:06.901717732 +0530 +++ new/src/java.desktop/share/classes/sun/awt/image/ByteBandedRaster.java 2016-03-15 19:16:06.697615740 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,7 +29,6 @@ import java.awt.image.RasterFormatException; import java.awt.image.SampleModel; import java.awt.image.BandedSampleModel; -import java.awt.image.DataBuffer; import java.awt.image.DataBufferByte; import java.awt.Rectangle; import java.awt.Point; @@ -77,7 +76,7 @@ public ByteBandedRaster(SampleModel sampleModel, Point origin) { this(sampleModel, - sampleModel.createDataBuffer(), + (DataBufferByte)sampleModel.createDataBuffer(), new Rectangle(origin.x, origin.y, sampleModel.getWidth(), @@ -93,11 +92,11 @@ * initialized and must be a DataBufferShort compatible with SampleModel. * SampleModel must be of type BandedSampleModel. * @param sampleModel The SampleModel that specifies the layout. - * @param dataBuffer The DataBufferShort that contains the image data. + * @param dataBuffer The DataBufferByte that contains the image data. * @param origin The Point that specifies the origin. */ public ByteBandedRaster(SampleModel sampleModel, - DataBuffer dataBuffer, + DataBufferByte dataBuffer, Point origin) { this(sampleModel, dataBuffer, new Rectangle(origin.x , origin.y, @@ -119,13 +118,13 @@ * Note that this constructor should generally be called by other * constructors or create methods, it should not be used directly. * @param sampleModel The SampleModel that specifies the layout. - * @param dataBuffer The DataBufferShort that contains the image data. + * @param dataBuffer The DataBufferByte that contains the image data. * @param aRegion The Rectangle that specifies the image area. * @param origin The Point that specifies the origin. * @param parent The parent (if any) of this raster. */ public ByteBandedRaster(SampleModel sampleModel, - DataBuffer dataBuffer, + DataBufferByte dataBuffer, Rectangle aRegion, Point origin, ByteBandedRaster parent) { @@ -134,24 +133,18 @@ this.maxX = minX + width; this.maxY = minY + height; - if (!(dataBuffer instanceof DataBufferByte)) { - throw new RasterFormatException("ByteBandedRaster must have" + - "byte DataBuffers"); - } - DataBufferByte dbb = (DataBufferByte)dataBuffer; - if (sampleModel instanceof BandedSampleModel) { BandedSampleModel bsm = (BandedSampleModel)sampleModel; this.scanlineStride = bsm.getScanlineStride(); int bankIndices[] = bsm.getBankIndices(); int bandOffsets[] = bsm.getBandOffsets(); - int dOffsets[] = dbb.getOffsets(); + int dOffsets[] = dataBuffer.getOffsets(); dataOffsets = new int[bankIndices.length]; data = new byte[bankIndices.length][]; int xOffset = aRegion.x - origin.x; int yOffset = aRegion.y - origin.y; for (int i = 0; i < bankIndices.length; i++) { - data[i] = stealData(dbb, bankIndices[i]); + data[i] = stealData(dataBuffer, bankIndices[i]); dataOffsets[i] = dOffsets[bankIndices[i]] + xOffset + yOffset*scanlineStride + bandOffsets[i]; } @@ -672,7 +665,7 @@ int deltaY = y0 - y; return new ByteBandedRaster(sm, - dataBuffer, + (DataBufferByte)dataBuffer, new Rectangle(x0,y0,width,height), new Point(sampleModelTranslateX+deltaX, sampleModelTranslateY+deltaY), --- old/src/java.desktop/share/classes/sun/awt/image/ByteComponentRaster.java 2016-03-15 19:16:07.506019711 +0530 +++ new/src/java.desktop/share/classes/sun/awt/image/ByteComponentRaster.java 2016-03-15 19:16:07.301917718 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,7 +30,6 @@ import java.awt.image.SampleModel; import java.awt.image.ComponentSampleModel; import java.awt.image.SinglePixelPackedSampleModel; -import java.awt.image.DataBuffer; import java.awt.image.DataBufferByte; import java.awt.Rectangle; import java.awt.Point; @@ -94,7 +93,7 @@ */ public ByteComponentRaster(SampleModel sampleModel, Point origin) { this(sampleModel, - sampleModel.createDataBuffer(), + (DataBufferByte)sampleModel.createDataBuffer(), new Rectangle(origin.x, origin.y, sampleModel.getWidth(), @@ -111,11 +110,11 @@ * SampleModel must be of type SinglePixelPackedSampleModel * or ComponentSampleModel. * @param sampleModel The SampleModel that specifies the layout. - * @param dataBuffer The DataBufferShort that contains the image data. + * @param dataBuffer The DataBufferByte that contains the image data. * @param origin The Point that specifies the origin. */ public ByteComponentRaster(SampleModel sampleModel, - DataBuffer dataBuffer, + DataBufferByte dataBuffer, Point origin) { this(sampleModel, dataBuffer, @@ -141,13 +140,13 @@ * Note that this constructor should generally be called by other * constructors or create methods, it should not be used directly. * @param sampleModel The SampleModel that specifies the layout. - * @param dataBuffer The DataBufferShort that contains the image data. + * @param dataBuffer The DataBufferByte that contains the image data. * @param aRegion The Rectangle that specifies the image area. * @param origin The Point that specifies the origin. * @param parent The parent (if any) of this raster. */ public ByteComponentRaster(SampleModel sampleModel, - DataBuffer dataBuffer, + DataBufferByte dataBuffer, Rectangle aRegion, Point origin, ByteComponentRaster parent) { @@ -155,19 +154,13 @@ this.maxX = minX + width; this.maxY = minY + height; - if (!(dataBuffer instanceof DataBufferByte)) { - throw new RasterFormatException("ByteComponentRasters must have " + - "byte DataBuffers"); - } - - DataBufferByte dbb = (DataBufferByte)dataBuffer; - this.data = stealData(dbb, 0); - if (dbb.getNumBanks() != 1) { + this.data = stealData(dataBuffer, 0); + if (dataBuffer.getNumBanks() != 1) { throw new RasterFormatException("DataBuffer for ByteComponentRasters"+ " must only have 1 bank."); } - int dbOffset = dbb.getOffset(); + int dbOffset = dataBuffer.getOffset(); if (sampleModel instanceof ComponentSampleModel) { ComponentSampleModel ism = (ComponentSampleModel)sampleModel; @@ -823,7 +816,7 @@ int deltaY = y0 - y; return new ByteComponentRaster(sm, - dataBuffer, + (DataBufferByte)dataBuffer, new Rectangle(x0, y0, width, height), new Point(sampleModelTranslateX+deltaX, sampleModelTranslateY+deltaY), --- old/src/java.desktop/share/classes/sun/awt/image/ByteInterleavedRaster.java 2016-03-15 19:16:08.118325688 +0530 +++ new/src/java.desktop/share/classes/sun/awt/image/ByteInterleavedRaster.java 2016-03-15 19:16:07.922227696 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,7 +31,6 @@ import java.awt.image.ComponentSampleModel; import java.awt.image.PixelInterleavedSampleModel; import java.awt.image.SinglePixelPackedSampleModel; -import java.awt.image.DataBuffer; import java.awt.image.DataBufferByte; import java.awt.Rectangle; import java.awt.Point; @@ -87,7 +86,7 @@ */ public ByteInterleavedRaster(SampleModel sampleModel, Point origin) { this(sampleModel, - sampleModel.createDataBuffer(), + (DataBufferByte)sampleModel.createDataBuffer(), new Rectangle(origin.x, origin.y, sampleModel.getWidth(), @@ -104,11 +103,11 @@ * SampleModel must be of type SinglePixelPackedSampleModel * or InterleavedSampleModel. * @param sampleModel The SampleModel that specifies the layout. - * @param dataBuffer The DataBufferShort that contains the image data. + * @param dataBuffer The DataBufferByte that contains the image data. * @param origin The Point that specifies the origin. */ public ByteInterleavedRaster(SampleModel sampleModel, - DataBuffer dataBuffer, + DataBufferByte dataBuffer, Point origin) { this(sampleModel, dataBuffer, @@ -178,13 +177,13 @@ * Note that this constructor should generally be called by other * constructors or create methods, it should not be used directly. * @param sampleModel The SampleModel that specifies the layout. - * @param dataBuffer The DataBufferShort that contains the image data. + * @param dataBuffer The DataBufferByte that contains the image data. * @param aRegion The Rectangle that specifies the image area. * @param origin The Point that specifies the origin. * @param parent The parent (if any) of this raster. */ public ByteInterleavedRaster(SampleModel sampleModel, - DataBuffer dataBuffer, + DataBufferByte dataBuffer, Rectangle aRegion, Point origin, ByteInterleavedRaster parent) { @@ -192,13 +191,7 @@ this.maxX = minX + width; this.maxY = minY + height; - if (!(dataBuffer instanceof DataBufferByte)) { - throw new RasterFormatException("ByteInterleavedRasters must have " + - "byte DataBuffers"); - } - - DataBufferByte dbb = (DataBufferByte)dataBuffer; - this.data = stealData(dbb, 0); + this.data = stealData(dataBuffer, 0); int xOffset = aRegion.x - origin.x; int yOffset = aRegion.y - origin.y; @@ -221,7 +214,7 @@ this.scanlineStride = sppsm.getScanlineStride(); this.pixelStride = 1; this.dataOffsets = new int[1]; - this.dataOffsets[0] = dbb.getOffset(); + this.dataOffsets[0] = dataBuffer.getOffset(); dataOffsets[0] += xOffset*pixelStride+yOffset*scanlineStride; } else { throw new RasterFormatException("ByteInterleavedRasters must " + @@ -1259,7 +1252,7 @@ int deltaY = y0 - y; return new ByteInterleavedRaster(sm, - dataBuffer, + (DataBufferByte)dataBuffer, new Rectangle(x0, y0, width, height), new Point(sampleModelTranslateX+deltaX, sampleModelTranslateY+deltaY), --- old/src/java.desktop/share/classes/sun/awt/image/BytePackedRaster.java 2016-03-15 19:16:08.750641666 +0530 +++ new/src/java.desktop/share/classes/sun/awt/image/BytePackedRaster.java 2016-03-15 19:16:08.542537673 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,7 +29,6 @@ import java.awt.image.RasterFormatException; import java.awt.image.SampleModel; import java.awt.image.MultiPixelPackedSampleModel; -import java.awt.image.DataBuffer; import java.awt.image.DataBufferByte; import java.awt.Rectangle; import java.awt.Point; @@ -92,7 +91,7 @@ public BytePackedRaster(SampleModel sampleModel, Point origin) { this(sampleModel, - sampleModel.createDataBuffer(), + (DataBufferByte)sampleModel.createDataBuffer(), new Rectangle(origin.x, origin.y, sampleModel.getWidth(), @@ -108,11 +107,11 @@ * initialized and must be a DataBufferByte compatible with SampleModel. * SampleModel must be of type MultiPixelPackedSampleModel. * @param sampleModel The SampleModel that specifies the layout. - * @param dataBuffer The DataBufferShort that contains the image data. + * @param dataBuffer The DataBufferByte that contains the image data. * @param origin The Point that specifies the origin. */ public BytePackedRaster(SampleModel sampleModel, - DataBuffer dataBuffer, + DataBufferByte dataBuffer, Point origin) { this(sampleModel, dataBuffer, @@ -137,7 +136,7 @@ * Note that this constructor should generally be called by other * constructors or create methods, it should not be used directly. * @param sampleModel The SampleModel that specifies the layout. - * @param dataBuffer The DataBufferShort that contains the image data. + * @param dataBuffer The DataBufferByte that contains the image data. * @param aRegion The Rectangle that specifies the image area. * @param origin The Point that specifies the origin. * @param parent The parent (if any) of this raster. @@ -146,7 +145,7 @@ * to requirements of this Raster type. */ public BytePackedRaster(SampleModel sampleModel, - DataBuffer dataBuffer, + DataBufferByte dataBuffer, Rectangle aRegion, Point origin, BytePackedRaster parent){ @@ -154,18 +153,13 @@ this.maxX = minX + width; this.maxY = minY + height; - if (!(dataBuffer instanceof DataBufferByte)) { - throw new RasterFormatException("BytePackedRasters must have" + - "byte DataBuffers"); - } - DataBufferByte dbb = (DataBufferByte)dataBuffer; - this.data = stealData(dbb, 0); - if (dbb.getNumBanks() != 1) { + this.data = stealData(dataBuffer, 0); + if (dataBuffer.getNumBanks() != 1) { throw new RasterFormatException("DataBuffer for BytePackedRasters"+ " must only have 1 bank."); } - int dbOffset = dbb.getOffset(); + int dbOffset = dataBuffer.getOffset(); if (sampleModel instanceof MultiPixelPackedSampleModel) { MultiPixelPackedSampleModel mppsm = @@ -1322,7 +1316,7 @@ int deltaY = y0 - y; return new BytePackedRaster(sm, - dataBuffer, + (DataBufferByte)dataBuffer, new Rectangle(x0, y0, width, height), new Point(sampleModelTranslateX+deltaX, sampleModelTranslateY+deltaY), --- old/src/java.desktop/share/classes/sun/awt/image/IntegerComponentRaster.java 2016-03-15 19:16:09.358945643 +0530 +++ new/src/java.desktop/share/classes/sun/awt/image/IntegerComponentRaster.java 2016-03-15 19:16:09.158845651 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,7 +29,6 @@ import java.awt.image.RasterFormatException; import java.awt.image.SampleModel; import java.awt.image.SinglePixelPackedSampleModel; -import java.awt.image.DataBuffer; import java.awt.image.DataBufferInt; import java.awt.Rectangle; import java.awt.Point; @@ -110,7 +109,7 @@ public IntegerComponentRaster(SampleModel sampleModel, Point origin) { this(sampleModel, - sampleModel.createDataBuffer(), + (DataBufferInt)sampleModel.createDataBuffer(), new Rectangle(origin.x, origin.y, sampleModel.getWidth(), @@ -130,7 +129,7 @@ * @param origin The Point that specifies the origin. */ public IntegerComponentRaster(SampleModel sampleModel, - DataBuffer dataBuffer, + DataBufferInt dataBuffer, Point origin) { this(sampleModel, dataBuffer, @@ -161,24 +160,20 @@ * @param parent The parent (if any) of this raster. */ public IntegerComponentRaster(SampleModel sampleModel, - DataBuffer dataBuffer, + DataBufferInt dataBuffer, Rectangle aRegion, Point origin, IntegerComponentRaster parent){ super(sampleModel,dataBuffer,aRegion,origin,parent); this.maxX = minX + width; this.maxY = minY + height; - if (!(dataBuffer instanceof DataBufferInt)) { - throw new RasterFormatException("IntegerComponentRasters must have" + - "integer DataBuffers"); - } - DataBufferInt dbi = (DataBufferInt)dataBuffer; - if (dbi.getNumBanks() != 1) { + + if (dataBuffer.getNumBanks() != 1) { throw new RasterFormatException("DataBuffer for IntegerComponentRasters"+ " must only have 1 bank."); } - this.data = stealData(dbi, 0); + this.data = stealData(dataBuffer, 0); if (sampleModel instanceof SinglePixelPackedSampleModel) { SinglePixelPackedSampleModel sppsm = @@ -197,7 +192,7 @@ this.scanlineStride = sppsm.getScanlineStride(); this.pixelStride = 1; this.dataOffsets = new int[1]; - this.dataOffsets[0] = dbi.getOffset(); + this.dataOffsets[0] = dataBuffer.getOffset(); this.bandOffset = this.dataOffsets[0]; int xOffset = aRegion.x - origin.x; int yOffset = aRegion.y - origin.y; @@ -569,7 +564,7 @@ int deltaY = y0 - y; return new IntegerComponentRaster(sm, - dataBuffer, + (DataBufferInt)dataBuffer, new Rectangle(x0,y0,width,height), new Point(sampleModelTranslateX+deltaX, sampleModelTranslateY+deltaY), --- old/src/java.desktop/share/classes/sun/awt/image/IntegerInterleavedRaster.java 2016-03-15 19:16:09.959245622 +0530 +++ new/src/java.desktop/share/classes/sun/awt/image/IntegerInterleavedRaster.java 2016-03-15 19:16:09.763147629 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,7 +29,6 @@ import java.awt.image.RasterFormatException; import java.awt.image.SampleModel; import java.awt.image.SinglePixelPackedSampleModel; -import java.awt.image.DataBuffer; import java.awt.image.DataBufferInt; import java.awt.Rectangle; import java.awt.Point; @@ -70,7 +69,7 @@ public IntegerInterleavedRaster(SampleModel sampleModel, Point origin) { this(sampleModel, - sampleModel.createDataBuffer(), + (DataBufferInt)sampleModel.createDataBuffer(), new Rectangle(origin.x, origin.y, sampleModel.getWidth(), @@ -90,7 +89,7 @@ * @param origin The Point that specifies the origin. */ public IntegerInterleavedRaster(SampleModel sampleModel, - DataBuffer dataBuffer, + DataBufferInt dataBuffer, Point origin) { this(sampleModel, dataBuffer, @@ -121,19 +120,15 @@ * @param parent The parent (if any) of this raster. */ public IntegerInterleavedRaster(SampleModel sampleModel, - DataBuffer dataBuffer, + DataBufferInt dataBuffer, Rectangle aRegion, Point origin, IntegerInterleavedRaster parent){ super(sampleModel,dataBuffer,aRegion,origin,parent); this.maxX = minX + width; this.maxY = minY + height; - if (!(dataBuffer instanceof DataBufferInt)) { - throw new RasterFormatException("IntegerInterleavedRasters must have" + - "integer DataBuffers"); - } - DataBufferInt dbi = (DataBufferInt)dataBuffer; - this.data = stealData(dbi, 0); + + this.data = stealData(dataBuffer, 0); if (sampleModel instanceof SinglePixelPackedSampleModel) { SinglePixelPackedSampleModel sppsm = @@ -141,7 +136,7 @@ this.scanlineStride = sppsm.getScanlineStride(); this.pixelStride = 1; this.dataOffsets = new int[1]; - this.dataOffsets[0] = dbi.getOffset(); + this.dataOffsets[0] = dataBuffer.getOffset(); this.bandOffset = this.dataOffsets[0]; int xOffset = aRegion.x - origin.x; int yOffset = aRegion.y - origin.y; @@ -481,7 +476,7 @@ int deltaY = y0 - y; return new IntegerInterleavedRaster(sm, - dataBuffer, + (DataBufferInt)dataBuffer, new Rectangle(x0,y0,width,height), new Point(sampleModelTranslateX+deltaX, sampleModelTranslateY+deltaY), --- old/src/java.desktop/share/classes/sun/awt/image/ShortBandedRaster.java 2016-03-15 19:16:10.559545600 +0530 +++ new/src/java.desktop/share/classes/sun/awt/image/ShortBandedRaster.java 2016-03-15 19:16:10.367449607 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,7 +29,6 @@ import java.awt.image.RasterFormatException; import java.awt.image.SampleModel; import java.awt.image.BandedSampleModel; -import java.awt.image.DataBuffer; import java.awt.image.DataBufferUShort; import java.awt.Rectangle; import java.awt.Point; @@ -75,7 +74,7 @@ public ShortBandedRaster(SampleModel sampleModel, Point origin) { this(sampleModel, - sampleModel.createDataBuffer(), + (DataBufferUShort)sampleModel.createDataBuffer(), new Rectangle(origin.x, origin.y, sampleModel.getWidth(), @@ -95,7 +94,7 @@ * @param origin The Point that specifies the origin. */ public ShortBandedRaster(SampleModel sampleModel, - DataBuffer dataBuffer, + DataBufferUShort dataBuffer, Point origin) { this(sampleModel, dataBuffer, new Rectangle(origin.x, origin.y, @@ -123,7 +122,7 @@ * @param parent The parent (if any) of this raster. */ public ShortBandedRaster(SampleModel sampleModel, - DataBuffer dataBuffer, + DataBufferUShort dataBuffer, Rectangle aRegion, Point origin, ShortBandedRaster parent) { @@ -131,24 +130,19 @@ super(sampleModel, dataBuffer, aRegion, origin, parent); this.maxX = minX + width; this.maxY = minY + height; - if (!(dataBuffer instanceof DataBufferUShort)) { - throw new RasterFormatException("ShortBandedRaster must have " + - "ushort DataBuffers"); - } - DataBufferUShort dbus = (DataBufferUShort)dataBuffer; if (sampleModel instanceof BandedSampleModel) { BandedSampleModel bsm = (BandedSampleModel)sampleModel; this.scanlineStride = bsm.getScanlineStride(); int bankIndices[] = bsm.getBankIndices(); int bandOffsets[] = bsm.getBandOffsets(); - int dOffsets[] = dbus.getOffsets(); + int dOffsets[] = dataBuffer.getOffsets(); dataOffsets = new int[bankIndices.length]; data = new short[bankIndices.length][]; int xOffset = aRegion.x - origin.x; int yOffset = aRegion.y - origin.y; for (int i = 0; i < bankIndices.length; i++) { - data[i] = stealData(dbus, bankIndices[i]); + data[i] = stealData(dataBuffer, bankIndices[i]); dataOffsets[i] = dOffsets[bankIndices[i]] + xOffset + yOffset*scanlineStride + bandOffsets[i]; } @@ -670,7 +664,7 @@ int deltaY = y0 - y; return new ShortBandedRaster(sm, - dataBuffer, + (DataBufferUShort)dataBuffer, new Rectangle(x0, y0, width, height), new Point(sampleModelTranslateX+deltaX, sampleModelTranslateY+deltaY), --- old/src/java.desktop/share/classes/sun/awt/image/ShortComponentRaster.java 2016-03-15 19:16:11.155843578 +0530 +++ new/src/java.desktop/share/classes/sun/awt/image/ShortComponentRaster.java 2016-03-15 19:16:10.971751585 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,7 +30,6 @@ import java.awt.image.SampleModel; import java.awt.image.ComponentSampleModel; import java.awt.image.SinglePixelPackedSampleModel; -import java.awt.image.DataBuffer; import java.awt.image.DataBufferUShort; import java.awt.Rectangle; import java.awt.Point; @@ -94,7 +93,7 @@ */ public ShortComponentRaster(SampleModel sampleModel, Point origin) { this(sampleModel, - sampleModel.createDataBuffer(), + (DataBufferUShort)sampleModel.createDataBuffer(), new Rectangle(origin.x, origin.y, sampleModel.getWidth(), @@ -115,7 +114,7 @@ * @param origin The Point that specifies the origin. */ public ShortComponentRaster(SampleModel sampleModel, - DataBuffer dataBuffer, + DataBufferUShort dataBuffer, Point origin) { this(sampleModel, dataBuffer, @@ -146,7 +145,7 @@ * @param parent The parent (if any) of this raster. */ public ShortComponentRaster(SampleModel sampleModel, - DataBuffer dataBuffer, + DataBufferUShort dataBuffer, Rectangle aRegion, Point origin, ShortComponentRaster parent) { @@ -155,19 +154,13 @@ this.maxX = minX + width; this.maxY = minY + height; - if(!(dataBuffer instanceof DataBufferUShort)) { - throw new RasterFormatException("ShortComponentRasters must have "+ - "short DataBuffers"); - } - - DataBufferUShort dbus = (DataBufferUShort)dataBuffer; - this.data = stealData(dbus, 0); - if (dbus.getNumBanks() != 1) { + this.data = stealData(dataBuffer, 0); + if (dataBuffer.getNumBanks() != 1) { throw new RasterFormatException("DataBuffer for ShortComponentRasters"+ " must only have 1 bank."); } - int dbOffset = dbus.getOffset(); + int dbOffset = dataBuffer.getOffset(); if (sampleModel instanceof ComponentSampleModel) { ComponentSampleModel csm = (ComponentSampleModel)sampleModel; @@ -758,7 +751,7 @@ int deltaY = y0 - y; return new ShortComponentRaster(sm, - dataBuffer, + (DataBufferUShort)dataBuffer, new Rectangle(x0, y0, width, height), new Point(sampleModelTranslateX+deltaX, sampleModelTranslateY+deltaY), --- old/src/java.desktop/share/classes/sun/awt/image/ShortInterleavedRaster.java 2016-03-15 19:16:11.800165555 +0530 +++ new/src/java.desktop/share/classes/sun/awt/image/ShortInterleavedRaster.java 2016-03-15 19:16:11.596063562 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -71,7 +71,7 @@ */ public ShortInterleavedRaster(SampleModel sampleModel, Point origin) { this(sampleModel, - sampleModel.createDataBuffer(), + (DataBufferUShort)sampleModel.createDataBuffer(), new Rectangle(origin.x, origin.y, sampleModel.getWidth(), @@ -92,7 +92,7 @@ * @param origin The Point that specifies the origin. */ public ShortInterleavedRaster(SampleModel sampleModel, - DataBuffer dataBuffer, + DataBufferUShort dataBuffer, Point origin) { this(sampleModel, dataBuffer, @@ -123,7 +123,7 @@ * @param parent The parent (if any) of this raster. */ public ShortInterleavedRaster(SampleModel sampleModel, - DataBuffer dataBuffer, + DataBufferUShort dataBuffer, Rectangle aRegion, Point origin, ShortInterleavedRaster parent) { @@ -132,13 +132,7 @@ this.maxX = minX + width; this.maxY = minY + height; - if(!(dataBuffer instanceof DataBufferUShort)) { - throw new RasterFormatException("ShortInterleavedRasters must "+ - "have ushort DataBuffers"); - } - - DataBufferUShort dbus = (DataBufferUShort)dataBuffer; - this.data = stealData(dbus, 0); + this.data = stealData(dataBuffer, 0); // REMIND: need case for interleaved ComponentSampleModel if ((sampleModel instanceof PixelInterleavedSampleModel) || @@ -160,7 +154,7 @@ this.scanlineStride = sppsm.getScanlineStride(); this.pixelStride = 1; this.dataOffsets = new int[1]; - this.dataOffsets[0] = dbus.getOffset(); + this.dataOffsets[0] = dataBuffer.getOffset(); int xOffset = aRegion.x - origin.x; int yOffset = aRegion.y - origin.y; dataOffsets[0] += xOffset+yOffset*scanlineStride; @@ -730,7 +724,7 @@ int deltaY = y0 - y; return new ShortInterleavedRaster(sm, - dataBuffer, + (DataBufferUShort)dataBuffer, new Rectangle(x0, y0, width, height), new Point(sampleModelTranslateX+deltaX, sampleModelTranslateY+deltaY), --- /dev/null 2016-03-15 14:33:29.248596000 +0530 +++ new/test/java/awt/image/RasterCreationTest.java 2016-03-15 19:16:12.220375540 +0530 @@ -0,0 +1,346 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.Point; +import java.awt.image.DataBuffer; +import java.awt.image.DataBufferByte; +import java.awt.image.DataBufferDouble; +import java.awt.image.DataBufferFloat; +import java.awt.image.DataBufferInt; +import java.awt.image.DataBufferShort; +import java.awt.image.DataBufferUShort; +import java.awt.image.Raster; +import java.awt.image.SampleModel; +import java.awt.image.MultiPixelPackedSampleModel; +import java.awt.image.PixelInterleavedSampleModel; +import java.awt.image.SinglePixelPackedSampleModel; + +/* + * @test + * @bug 6353518 + * @summary Test possible combinations of Raster creation + * Test fails if any of Raster.createXXX() method throws exception. + */ +public class RasterCreationTest { + + public static void main(String[] args) { + + final int width = 10; + final int height = 5; + final int imageSize = width * height; + Point location = new Point(0, 0); + int bandOffsets[] = {0}; + int bitMask[] = {0x00ff0000, 0x0000ff00, 0xff, 0x0}; + + SampleModel inputSampleModels[] = { + new PixelInterleavedSampleModel(DataBuffer.TYPE_BYTE, + 1, 1, 1, 1, bandOffsets), + new PixelInterleavedSampleModel(DataBuffer.TYPE_USHORT, + 1, 1, 1, 1, bandOffsets), + new PixelInterleavedSampleModel(DataBuffer.TYPE_INT, + 1, 1, 1, 1, bandOffsets), + new SinglePixelPackedSampleModel(DataBuffer.TYPE_BYTE, + width, height, bitMask), + new SinglePixelPackedSampleModel(DataBuffer.TYPE_USHORT, + width, height, bitMask), + new SinglePixelPackedSampleModel(DataBuffer.TYPE_INT, + width, height, bitMask), + new MultiPixelPackedSampleModel(DataBuffer.TYPE_BYTE, + width, height, 4) + }; + + // --------------------------------------------------------------------- + // Test ability to create Raster & WritableRaster with DataBuffer + // classes + // --------------------------------------------------------------------- + DataBuffer inputDataBuffer[] = { + new DataBufferByte(imageSize), + new DataBufferUShort(imageSize), + new DataBufferInt(imageSize, 1), + new DataBufferShort(imageSize), + new DataBufferFloat(imageSize), + new DataBufferDouble(imageSize) + }; + + for (SampleModel sm : inputSampleModels) { + for (DataBuffer db : inputDataBuffer) { + // Test Raster creation + Raster.createRaster(sm, db, location); + + // Test writableRaster creation + Raster.createWritableRaster(sm, db, location); + Raster.createWritableRaster(sm, location); + } + } + + // --------------------------------------------------------------------- + // Test ability to create Raster & WritableRaster with custom DataBuffer + // classes + // --------------------------------------------------------------------- + DataBuffer myDataBuffer[] = { + new MyDataBufferByte(imageSize), + new MyDataBufferUShort(imageSize), + new MyDataBufferInt(imageSize), + new MyDataBufferShort(imageSize), + new MyDataBufferDouble(imageSize), + new MyDataBufferFloat(imageSize) + }; + + for (SampleModel sm : inputSampleModels) { + for (DataBuffer db : myDataBuffer) { + // Test Raster creation + Raster.createRaster(sm, db, location); + + // Test writableRaster creation + Raster.createWritableRaster(sm, db, location); + Raster.createWritableRaster(sm, location); + } + } + + // --------------------------------------------------------------------- + // Test ability to create InterleavedRaster + // --------------------------------------------------------------------- + int interleavedInputDataTypes[] = + {DataBuffer.TYPE_BYTE, DataBuffer.TYPE_USHORT}; + + int numBands = 1; + + for (int i : interleavedInputDataTypes) { + Raster.createInterleavedRaster(i, width, height, 1, location); + Raster.createInterleavedRaster(i, width, height, width * numBands, + numBands, bandOffsets, location); + } + + for (int i = 0; i < interleavedInputDataTypes.length ; i++) { + DataBuffer d1 = inputDataBuffer[i]; + DataBuffer d2 = myDataBuffer[i]; + + Raster.createInterleavedRaster(d1, width, height, width * numBands, + numBands, bandOffsets, location); + Raster.createInterleavedRaster(d2, width, height, width * numBands, + numBands, bandOffsets, location); + } + + // --------------------------------------------------------------------- + // Test ability to create BandedRaster + // --------------------------------------------------------------------- + int[] bankIndices = new int[numBands]; + bankIndices[0] = 0; + + int bandedInputDataTypes[] = { + DataBuffer.TYPE_BYTE, + DataBuffer.TYPE_USHORT, + DataBuffer.TYPE_INT + }; + + for (int i : bandedInputDataTypes) { + Raster.createBandedRaster(i, width, height, 1, location); + Raster.createBandedRaster(i, width, height, width, + bankIndices, bandOffsets, location); + } + + for (int i = 0; i < bandedInputDataTypes.length; i++) { + DataBuffer d1 = inputDataBuffer[i]; + DataBuffer d2 = myDataBuffer[i]; + + Raster.createBandedRaster(d1, width, height, width, + bankIndices, bandOffsets, location); + Raster.createBandedRaster(d2, width, height, width, + bankIndices, bandOffsets, location); + } + + // --------------------------------------------------------------------- + // Test ability to create PackedRaster + // --------------------------------------------------------------------- + int[] bandMasks = new int[numBands]; + bandMasks[0] = 0; + + int packedInputDataTypes[] = { + DataBuffer.TYPE_BYTE, + DataBuffer.TYPE_USHORT, + DataBuffer.TYPE_INT + }; + + for (int i : packedInputDataTypes) { + Raster.createPackedRaster(i, width, height, bandMasks, location); + + for (int bits = 1; bits < 5; bits *= 2) { + Raster.createPackedRaster(i, width, height, 1, bits, location); + } + } + + for (int i = 0; i < packedInputDataTypes.length; i++) { + DataBuffer d1 = inputDataBuffer[i]; + DataBuffer d2 = myDataBuffer[i]; + + for (int bits = 1; bits < 5; bits *= 2) { + Raster.createPackedRaster(d1, width, height, bits, location); + Raster.createPackedRaster(d2, width, height, bits, location); + } + + Raster.createPackedRaster(d1, width, height, 1,bandMasks, location); + Raster.createPackedRaster(d2, width, height, 1,bandMasks, location); + } + } +} + +// --------------------------------------------------------------------- +// Custom DataBuffer classes for testing purpose +// --------------------------------------------------------------------- +final class MyDataBufferByte extends DataBuffer { + + byte data[]; + byte bankdata[][]; + + public MyDataBufferByte(int size) { + super(TYPE_BYTE, size); + data = new byte[size]; + bankdata = new byte[1][]; + bankdata[0] = data; + } + + @Override + public int getElem(int bank, int i) { + return bankdata[bank][i + offsets[bank]]; + } + + @Override + public void setElem(int bank, int i, int val) { + bankdata[bank][i + offsets[bank]] = (byte) val; + } +} + +final class MyDataBufferDouble extends DataBuffer { + + double data[]; + double bankdata[][]; + + public MyDataBufferDouble(int size) { + super(TYPE_DOUBLE, size); + data = new double[size]; + bankdata = new double[1][]; + bankdata[0] = data; + } + + @Override + public int getElem(int bank, int i) { + return (int) bankdata[bank][i + offsets[bank]]; + } + + @Override + public void setElem(int bank, int i, int val) { + bankdata[bank][i + offsets[bank]] = (double) val; + } +} + +final class MyDataBufferFloat extends DataBuffer { + + float data[]; + float bankdata[][]; + + public MyDataBufferFloat(int size) { + super(TYPE_FLOAT, size); + data = new float[size]; + bankdata = new float[1][]; + bankdata[0] = data; + } + + @Override + public int getElem(int bank, int i) { + return (int) bankdata[bank][i + offsets[bank]]; + } + + @Override + public void setElem(int bank, int i, int val) { + bankdata[bank][i + offsets[bank]] = (float) val; + } +} + +final class MyDataBufferShort extends DataBuffer { + + short data[]; + short bankdata[][]; + + public MyDataBufferShort(int size) { + super(TYPE_SHORT, size); + data = new short[size]; + bankdata = new short[1][]; + bankdata[0] = data; + } + + @Override + public int getElem(int bank, int i) { + return bankdata[bank][i + offsets[bank]]; + } + + @Override + public void setElem(int bank, int i, int val) { + bankdata[bank][i + offsets[bank]] = (short) val; + } +} + +final class MyDataBufferUShort extends DataBuffer { + + short data[]; + short bankdata[][]; + + public MyDataBufferUShort(int size) { + super(TYPE_USHORT, size); + data = new short[size]; + bankdata = new short[1][]; + bankdata[0] = data; + } + + @Override + public int getElem(int bank, int i) { + return bankdata[bank][i + offsets[bank]]; + } + + @Override + public void setElem(int bank, int i, int val) { + bankdata[bank][i + offsets[bank]] = (short) val; + } +} + +final class MyDataBufferInt extends DataBuffer { + + int data[]; + int bankdata[][]; + + public MyDataBufferInt(int size) { + super(TYPE_INT, size); + data = new int[size]; + bankdata = new int[1][]; + bankdata[0] = data; + } + + @Override + public int getElem(int bank, int i) { + return bankdata[bank][i + offsets[bank]]; + } + + @Override + public void setElem(int bank, int i, int val) { + bankdata[bank][i + offsets[bank]] = (int) val; + } +}