/****************************************************************************** * $Id: gdal_java.i 41228 2018-01-08 19:18:49Z rouault $ * * Name: gdal_java.i * Project: GDAL SWIG Interface * Purpose: Typemaps for Java bindings * Author: Benjamin Collins, The MITRE Corporation * */ %include java_exceptions.i %pragma(java) jniclasscode=%{ private static boolean available = false; static { try { System.loadLibrary("gdalalljni"); available = true; if (gdal.HasThreadSupport() == 0) { System.err.println("WARNING : GDAL should be compiled with thread support for safe execution in Java."); } } catch (UnsatisfiedLinkError e) { available = false; System.err.println("Native library load failed."); System.err.println(e); } } public static boolean isAvailable() { return available; } %} /* This hacks turns the gdalJNI class into a package private class */ %pragma(java) jniclassimports=%{ import org.gdal.osr.SpatialReference; import org.gdal.ogr.Geometry; import org.gdal.ogr.StyleTable; import org.gdal.ogr.Layer; import org.gdal.ogr.Feature; %} %pragma(java) moduleimports=%{ import org.gdal.osr.SpatialReference; import org.gdal.ogr.Geometry; import org.gdal.ogr.StyleTable; import org.gdal.ogr.Layer; import org.gdal.ogr.Feature; %} %typemap(javaimports) GDALDatasetShadow %{ import org.gdal.osr.SpatialReference; import org.gdal.ogr.Geometry; import org.gdal.ogr.StyleTable; import org.gdal.ogr.Layer; import org.gdal.ogr.Feature; %} %pragma(java) modulecode=%{ /* Uninstanciable class */ private gdal() { } public static String[] GeneralCmdLineProcessor(String[] args, int nOptions) { java.util.Vector vArgs = new java.util.Vector(); int i; for(i=0;i (INT_MAX / nDataTypeSize) / nBlockYSize) { CPLError(CE_Failure, CPLE_AppDefined, "Integer overflow"); return CE_Failure; } if (nioBufferSize < nBlockXSize * nBlockYSize * nDataTypeSize) { CPLError(CE_Failure, CPLE_AppDefined, "Buffer not big enough"); return CE_Failure; } return CE_None; } %} %{ static GIntBig ComputeDatasetRasterIOSize (int buf_xsize, int buf_ysize, int nPixelSize, int nBands, int* bandMap, int nBandMapArrayLength, GIntBig nPixelSpace, GIntBig nLineSpace, GIntBig nBandSpace, int bSpacingShouldBeMultipleOfPixelSize ); static CPLErr DatasetRasterIO( GDALDatasetH hDS, GDALRWFlag eRWFlag, int xoff, int yoff, int xsize, int ysize, int buf_xsize, int buf_ysize, GDALDataType buf_type, void *regularArray, long nRegularArraySize, int band_list, int *pband_list, int nPixelSpace, int nLineSpace, int nBandSpace, GDALDataType gdal_type, size_t sizeof_ctype) { if ((gdal_type == GDT_Int16 && buf_type != GDT_Int16 && buf_type != GDT_UInt16 && buf_type != GDT_CInt16) || (gdal_type == GDT_Int32 && buf_type != GDT_Int32 && buf_type != GDT_UInt32 && buf_type != GDT_CInt32) || (gdal_type == GDT_Float32 && buf_type != GDT_Float32 && buf_type != GDT_CFloat32) || (gdal_type == GDT_Float64 && buf_type != GDT_Float64 && buf_type != GDT_CFloat64)) { CPLError(CE_Failure, CPLE_AppDefined, "Java array type is not compatible with GDAL data type"); return CE_Failure; } if (band_list == 0) { if (pband_list != NULL) return CE_Failure; band_list = GDALGetRasterCount(hDS); } GIntBig nMinBufferSizeInBytes = ComputeDatasetRasterIOSize ( buf_xsize, buf_ysize, GDALGetDataTypeSize(buf_type) / 8, band_list, pband_list, band_list, nPixelSpace, nLineSpace, nBandSpace, sizeof_ctype > 1 ); if (nMinBufferSizeInBytes > 0x7fffffff) { CPLError(CE_Failure, CPLE_IllegalArg, "Integer overflow"); nMinBufferSizeInBytes = 0; } if (nMinBufferSizeInBytes == 0) return CE_Failure; if (nRegularArraySize < nMinBufferSizeInBytes) { CPLError(CE_Failure, CPLE_AppDefined, "Buffer is too small"); return CE_Failure; } return GDALDatasetRasterIO( hDS, eRWFlag, xoff, yoff, xsize, ysize, regularArray, buf_xsize, buf_ysize, buf_type, band_list, pband_list, nPixelSpace, nLineSpace, nBandSpace ); } %} %extend GDALDatasetShadow { %apply (int nList, int* pList) { (int band_list, int *pband_list) }; %apply (void* nioBuffer, long nioBufferSize) { (void* nioBuffer, long nioBufferSize) }; %apply (char *regularArrayOut, long nRegularArraySizeOut) { (char *regularArrayOut, long nRegularArraySizeOut) }; %apply (short *regularArrayOut, long nRegularArraySizeOut) { (short *regularArrayOut, long nRegularArraySizeOut) }; %apply (int *regularArrayOut, long nRegularArraySizeOut) { (int *regularArrayOut, long nRegularArraySizeOut) }; %apply (float *regularArrayOut, long nRegularArraySizeOut) { (float *regularArrayOut, long nRegularArraySizeOut) }; %apply (double *regularArrayOut, long nRegularArraySizeOut) { (double *regularArrayOut, long nRegularArraySizeOut) }; %apply (char *regularArrayIn, long nRegularArraySizeIn) { (char *regularArrayIn, long nRegularArraySizeIn) }; %apply (short *regularArrayIn, long nRegularArraySizeIn) { (short *regularArrayIn, long nRegularArraySizeIn) }; %apply (int *regularArrayIn, long nRegularArraySizeIn) { (int *regularArrayIn, long nRegularArraySizeIn) }; %apply (float *regularArrayIn, long nRegularArraySizeIn) { (float *regularArrayIn, long nRegularArraySizeIn) }; %apply (double *regularArrayIn, long nRegularArraySizeIn) { (double *regularArrayIn, long nRegularArraySizeIn) }; CPLErr ReadRaster_Direct( int xoff, int yoff, int xsize, int ysize, int buf_xsize, int buf_ysize, GDALDataType buf_type, void *nioBuffer, long nioBufferSize, int band_list, int *pband_list, int nPixelSpace = 0, int nLineSpace = 0, int nBandSpace = 0) { return DatasetRasterIO( (GDALDatasetH)self, GF_Read, xoff, yoff, xsize, ysize, buf_xsize, buf_ysize, buf_type, nioBuffer, nioBufferSize, band_list, pband_list, nPixelSpace, nLineSpace, nBandSpace, GDT_Unknown, 0); } %define DEFINE_DS_READ_RASTER(ctype, gdal_type) CPLErr ReadRaster( int xoff, int yoff, int xsize, int ysize, int buf_xsize, int buf_ysize, GDALDataType buf_type, ctype *regularArrayOut, long nRegularArraySizeOut, int band_list, int *pband_list, int nPixelSpace = 0, int nLineSpace = 0, int nBandSpace = 0) { return DatasetRasterIO( (GDALDatasetH)self, GF_Read, xoff, yoff, xsize, ysize, buf_xsize, buf_ysize, buf_type, regularArrayOut, nRegularArraySizeOut, band_list, pband_list, nPixelSpace, nLineSpace, nBandSpace, gdal_type, sizeof(ctype)); } %enddef DEFINE_DS_READ_RASTER(char, GDT_Byte) DEFINE_DS_READ_RASTER(short, GDT_Int16) DEFINE_DS_READ_RASTER(int, GDT_Int32) DEFINE_DS_READ_RASTER(float, GDT_Float32) DEFINE_DS_READ_RASTER(double, GDT_Float64) CPLErr WriteRaster_Direct( int xoff, int yoff, int xsize, int ysize, int buf_xsize, int buf_ysize, GDALDataType buf_type, void *nioBuffer, long nioBufferSize, int band_list, int *pband_list, int nPixelSpace = 0, int nLineSpace = 0, int nBandSpace = 0) { return DatasetRasterIO( (GDALDatasetH)self, GF_Write, xoff, yoff, xsize, ysize, buf_xsize, buf_ysize, buf_type, nioBuffer, nioBufferSize, band_list, pband_list, nPixelSpace, nLineSpace, nBandSpace, GDT_Unknown, 0); } %define DEFINE_DS_WRITE_RASTER(ctype, gdal_type) CPLErr WriteRaster( int xoff, int yoff, int xsize, int ysize, int buf_xsize, int buf_ysize, GDALDataType buf_type, ctype *regularArrayIn, long nRegularArraySizeIn, int band_list, int *pband_list, int nPixelSpace = 0, int nLineSpace = 0, int nBandSpace = 0) { return DatasetRasterIO( (GDALDatasetH)self, GF_Write, xoff, yoff, xsize, ysize, buf_xsize, buf_ysize, buf_type, regularArrayIn, nRegularArraySizeIn, band_list, pband_list, nPixelSpace, nLineSpace, nBandSpace, gdal_type, sizeof(ctype)); } %enddef DEFINE_DS_WRITE_RASTER(char, GDT_Byte) DEFINE_DS_WRITE_RASTER(short, GDT_Int16) DEFINE_DS_WRITE_RASTER(int, GDT_Int32) DEFINE_DS_WRITE_RASTER(float, GDT_Float32) DEFINE_DS_WRITE_RASTER(double, GDT_Float64) %clear (int band_list, int *pband_list); } /* extend */ %{ static GIntBig ComputeBandRasterIOSize (int buf_xsize, int buf_ysize, int nPixelSize, GIntBig nPixelSpace, GIntBig nLineSpace, int bSpacingShouldBeMultipleOfPixelSize ); static CPLErr BandRasterIO( GDALRasterBandH hBand, GDALRWFlag eRWFlag, int xoff, int yoff, int xsize, int ysize, int buf_xsize, int buf_ysize, GDALDataType buf_type, void *regularArrayOut, long nRegularArraySizeOut, int nPixelSpace, int nLineSpace, GDALDataType gdal_type, size_t sizeof_ctype) { if ((gdal_type == GDT_Int16 && buf_type != GDT_Int16 && buf_type != GDT_UInt16 && buf_type != GDT_CInt16) || (gdal_type == GDT_Int32 && buf_type != GDT_Int32 && buf_type != GDT_UInt32 && buf_type != GDT_CInt32) || (gdal_type == GDT_Float32 && buf_type != GDT_Float32 && buf_type != GDT_CFloat32) || (gdal_type == GDT_Float64 && buf_type != GDT_Float64 && buf_type != GDT_CFloat64)) { CPLError(CE_Failure, CPLE_AppDefined, "Java array type is not compatible with GDAL data type"); return CE_Failure; } GIntBig nMinBufferSizeInBytes = ComputeBandRasterIOSize ( buf_xsize, buf_ysize, GDALGetDataTypeSize(buf_type) / 8, nPixelSpace, nLineSpace, sizeof_ctype > 1 ); if (nMinBufferSizeInBytes > 0x7fffffff) { CPLError(CE_Failure, CPLE_IllegalArg, "Integer overflow"); nMinBufferSizeInBytes = 0; } if (nMinBufferSizeInBytes == 0) return CE_Failure; if (nRegularArraySizeOut < nMinBufferSizeInBytes) { CPLError(CE_Failure, CPLE_AppDefined, "Buffer is too small"); return CE_Failure; } return GDALRasterIO( hBand, eRWFlag, xoff, yoff, xsize, ysize, regularArrayOut, buf_xsize, buf_ysize, buf_type, nPixelSpace, nLineSpace ); } %} %extend GDALRasterBandShadow { CPLErr ReadRaster_Direct( int xoff, int yoff, int xsize, int ysize, int buf_xsize, int buf_ysize, GDALDataType buf_type, void *nioBuffer, long nioBufferSize, int nPixelSpace = 0, int nLineSpace = 0) { return BandRasterIO( self, GF_Read, xoff, yoff, xsize, ysize, buf_xsize, buf_ysize, buf_type, nioBuffer, nioBufferSize, nPixelSpace, nLineSpace, GDT_Unknown, 0 ); } %define DEFINE_READ_RASTER(ctype, gdal_type) CPLErr ReadRaster( int xoff, int yoff, int xsize, int ysize, int buf_xsize, int buf_ysize, GDALDataType buf_type, ctype *regularArrayOut, long nRegularArraySizeOut, int nPixelSpace = 0, int nLineSpace = 0) { return BandRasterIO( self, GF_Read, xoff, yoff, xsize, ysize, buf_xsize, buf_ysize, buf_type, regularArrayOut, nRegularArraySizeOut, nPixelSpace, nLineSpace, gdal_type, sizeof(ctype) ); } %enddef DEFINE_READ_RASTER(char, GDT_Byte) DEFINE_READ_RASTER(short, GDT_Int16) DEFINE_READ_RASTER(int, GDT_Int32) DEFINE_READ_RASTER(float, GDT_Float32) DEFINE_READ_RASTER(double, GDT_Float64) CPLErr WriteRaster_Direct( int xoff, int yoff, int xsize, int ysize, int buf_xsize, int buf_ysize, GDALDataType buf_type, void *nioBuffer, long nioBufferSize, int nPixelSpace = 0, int nLineSpace = 0) { return BandRasterIO( self, GF_Write, xoff, yoff, xsize, ysize, buf_xsize, buf_ysize, buf_type, nioBuffer, nioBufferSize, nPixelSpace, nLineSpace, GDT_Unknown, 0 ); } %define DEFINE_WRITE_RASTER(ctype, gdal_type) CPLErr WriteRaster( int xoff, int yoff, int xsize, int ysize, int buf_xsize, int buf_ysize, GDALDataType buf_type, ctype *regularArrayIn, long nRegularArraySizeIn, int nPixelSpace = 0, int nLineSpace = 0) { return BandRasterIO( self, GF_Write, xoff, yoff, xsize, ysize, buf_xsize, buf_ysize, buf_type, regularArrayIn, nRegularArraySizeIn, nPixelSpace, nLineSpace, gdal_type, sizeof(ctype) ); } %enddef DEFINE_WRITE_RASTER(char, GDT_Byte) DEFINE_WRITE_RASTER(short, GDT_Int16) DEFINE_WRITE_RASTER(int, GDT_Int32) DEFINE_WRITE_RASTER(float, GDT_Float32) DEFINE_WRITE_RASTER(double, GDT_Float64) CPLErr ReadBlock_Direct( int nXBlockOff, int nYBlockOff, void *nioBuffer, long nioBufferSize ) { if (BandBlockReadWrite_Validate((GDALRasterBandH)self, nioBuffer, nioBufferSize) != CE_None) return CE_Failure; return GDALReadBlock(self, nXBlockOff, nYBlockOff, nioBuffer); } CPLErr WriteBlock_Direct( int nXBlockOff, int nYBlockOff, void *nioBuffer, long nioBufferSize ) { if (BandBlockReadWrite_Validate((GDALRasterBandH)self, nioBuffer, nioBufferSize) != CE_None) return CE_Failure; return GDALWriteBlock(self, nXBlockOff, nYBlockOff, nioBuffer); } /* %clear (void *nioBuffer, long nioBufferSize); */ %clear (char *regularArrayOut, long nRegularArraySizeOut); %clear (short *regularArrayOut, long nRegularArraySizeOut); %clear (int *regularArrayOut, long nRegularArraySizeOut); %clear (float *regularArrayOut, long nRegularArraySizeOut); %clear (double *regularArrayOut, long nRegularArraySizeOut); %clear (char *regularArrayIn, long nRegularArraySizeIn); %clear (short *regularArrayIn, long nRegularArraySizeIn); %clear (int *regularArrayIn, long nRegularArraySizeIn); %clear (float *regularArrayIn, long nRegularArraySizeIn); %clear (double *regularArrayIn, long nRegularArraySizeIn); %apply (int nList, int* pListOut) {(int buckets, int *panHistogram)}; %apply Pointer NONNULL { int *panHistogram }; CPLErr GetHistogram(double min, double max, int buckets, int *panHistogram, bool include_out_of_range, bool approx_ok, GDALProgressFunc callback, void* callback_data) { CPLErrorReset(); CPLErr err = GDALGetRasterHistogram( self, min, max, buckets, panHistogram, include_out_of_range, approx_ok, callback, callback_data ); return err; } CPLErr GetHistogram(double min, double max, int buckets, int *panHistogram, bool include_out_of_range, bool approx_ok) { CPLErrorReset(); CPLErr err = GDALGetRasterHistogram( self, min, max, buckets, panHistogram, include_out_of_range, approx_ok, NULL, NULL); return err; } CPLErr GetHistogram(double min, double max, int buckets, int *panHistogram) { CPLErrorReset(); CPLErr err = GDALGetRasterHistogram( self, min, max, buckets, panHistogram, 0, 1, NULL, NULL); return err; } CPLErr GetHistogram(int buckets, int *panHistogram) { CPLErrorReset(); CPLErr err = GDALGetRasterHistogram( self, -0.5, 255.5, buckets, panHistogram, 0, 1, NULL, NULL); return err; } %clear (int buckets, int *panHistogram); %apply (int* pnList, int** ppListOut) {(int* buckets_ret, int **ppanHistogram)}; %apply (double *OUTPUT){double *min_ret, double *max_ret} CPLErr GetDefaultHistogram( double *min_ret, double *max_ret, int* buckets_ret, int **ppanHistogram, bool force = 1, GDALProgressFunc callback = NULL, void* callback_data=NULL ) { return GDALGetDefaultHistogram( self, min_ret, max_ret, buckets_ret, ppanHistogram, force, callback, callback_data ); } %clear (double *min_ret, double *max_ret); %clear (int* buckets_ret, int **ppanHistogram); } /* extend */ #ifdef SWIGANDROID %typemap(javacode) GDALColorTableShadow %{ private Object parentReference; /* Ensure that the GC doesn't collect any parent instance set from Java */ protected void addReference(Object reference) { parentReference = reference; } public Object clone() { return Clone(); } %} #else %typemap(javaimports) GDALColorTableShadow %{ /* imports for getIndexColorModel */ import java.awt.image.IndexColorModel; import java.awt.Color; %} %typemap(javacode) GDALColorTableShadow %{ private Object parentReference; /* Ensure that the GC doesn't collect any parent instance set from Java */ protected void addReference(Object reference) { parentReference = reference; } public Object clone() { return Clone(); } // Convenience method. public IndexColorModel getIndexColorModel(int bits) { int size = GetCount(); byte[] reds = new byte[size]; byte[] greens = new byte[size]; byte[] blues = new byte[size]; byte[] alphas = new byte[size]; int noAlphas = 0; int zeroAlphas = 0; int lastAlphaIndex = -1; Color entry = null; for(int i = 0; i < size; i++) { entry = GetColorEntry(i); reds[i] = (byte)(entry.getRed()&0xff); greens[i] = (byte)(entry.getGreen()&0xff); blues[i] = (byte)(entry.getBlue()&0xff); byte alpha = (byte)(entry.getAlpha()&0xff); // The byte type is -128 to 127 so a normal 255 will be -1. if (alpha == -1) noAlphas ++; else{ if (alpha == 0){ zeroAlphas++; lastAlphaIndex = i; } } alphas[i] = alpha; } if (noAlphas == size) return new IndexColorModel(bits, size, reds, greens, blues); else if (noAlphas == (size - 1) && zeroAlphas == 1) return new IndexColorModel(bits, size, reds, greens, blues, lastAlphaIndex); else return new IndexColorModel(bits, size, reds, greens, blues, alphas); } %} #endif %typemap(javaimports) GDALRasterBandShadow %{ import org.gdal.gdalconst.gdalconstConstants; %} %typemap(javacode) GDALRasterBandShadow %{ // Preferred name to match C++ API public int GetXSize() { return getXSize(); } // Preferred name to match C++ API public int GetYSize() { return getYSize(); } // Preferred name to match C++ API public int GetRasterDataType() { return getDataType(); } public int GetBlockXSize() { int[] anBlockXSize = new int[1]; int[] anBlockYSize = new int[1]; GetBlockSize(anBlockXSize, anBlockYSize); return anBlockXSize[0]; } public int GetBlockYSize() { int[] anBlockXSize = new int[1]; int[] anBlockYSize = new int[1]; GetBlockSize(anBlockXSize, anBlockYSize); return anBlockYSize[0]; } public int Checksum() { return Checksum(0, 0, getXSize(), getYSize()); } public int GetStatistics(boolean approx_ok, boolean force, double[] min, double[] max, double[] mean, double[] stddev) { return GetStatistics((approx_ok) ? 1 : 0, (force) ? 1 : 0, min, max, mean, stddev); } public int ReadRaster_Direct(int xoff, int yoff, int xsize, int ysize, int buf_xsize, int buf_ysize, java.nio.ByteBuffer nioBuffer) { return ReadRaster_Direct(xoff, yoff, xsize, ysize, buf_xsize, buf_ysize, gdalconstConstants.GDT_Byte, nioBuffer); } public int ReadRaster_Direct(int xoff, int yoff, int xsize, int ysize, java.nio.ByteBuffer nioBuffer) { return ReadRaster_Direct(xoff, yoff, xsize, ysize, xsize, ysize, gdalconstConstants.GDT_Byte, nioBuffer); } public java.nio.ByteBuffer ReadRaster_Direct(int xoff, int yoff, int xsize, int ysize, int buf_xsize, int buf_ysize, int buf_type) { long buf_size = buf_xsize * buf_ysize * (gdal.GetDataTypeSize(buf_type) / 8); if ((int)buf_size != buf_size) throw new OutOfMemoryError(); java.nio.ByteBuffer nioBuffer = java.nio.ByteBuffer.allocateDirect((int)buf_size); int ret = ReadRaster_Direct(xoff, yoff, xsize, ysize, buf_xsize, buf_ysize, buf_type, nioBuffer); if (ret == gdalconstConstants.CE_None) return nioBuffer; else return null; } public java.nio.ByteBuffer ReadRaster_Direct(int xoff, int yoff, int xsize, int ysize, int buf_type) { return ReadRaster_Direct(xoff, yoff, xsize, ysize, xsize, ysize, buf_type); } public java.nio.ByteBuffer ReadRaster_Direct(int xoff, int yoff, int xsize, int ysize) { return ReadRaster_Direct(xoff, yoff, xsize, ysize, xsize, ysize, gdalconstConstants.GDT_Byte); } public int ReadRaster(int xoff, int yoff, int xsize, int ysize, int buf_type, byte[] array) { return ReadRaster(xoff, yoff, xsize, ysize, xsize, ysize, buf_type, array); } public int ReadRaster(int xoff, int yoff, int xsize, int ysize, byte[] array) { return ReadRaster(xoff, yoff, xsize, ysize, xsize, ysize, gdalconstConstants.GDT_Byte, array); } public int ReadRaster(int xoff, int yoff, int xsize, int ysize, int buf_type, short[] array) { return ReadRaster(xoff, yoff, xsize, ysize, xsize, ysize, buf_type, array); } public int ReadRaster(int xoff, int yoff, int xsize, int ysize, short[] array) { return ReadRaster(xoff, yoff, xsize, ysize, xsize, ysize, gdalconstConstants.GDT_Int16, array); } public int ReadRaster(int xoff, int yoff, int xsize, int ysize, int buf_type, int[] array) { return ReadRaster(xoff, yoff, xsize, ysize, xsize, ysize, buf_type, array); } public int ReadRaster(int xoff, int yoff, int xsize, int ysize, int[] array) { return ReadRaster(xoff, yoff, xsize, ysize, xsize, ysize, gdalconstConstants.GDT_Int32, array); } public int ReadRaster(int xoff, int yoff, int xsize, int ysize, int buf_type, float[] array) { return ReadRaster(xoff, yoff, xsize, ysize, xsize, ysize, buf_type, array); } public int ReadRaster(int xoff, int yoff, int xsize, int ysize, float[] array) { return ReadRaster(xoff, yoff, xsize, ysize, xsize, ysize, gdalconstConstants.GDT_Float32, array); } public int ReadRaster(int xoff, int yoff, int xsize, int ysize, int buf_type, double[] array) { return ReadRaster(xoff, yoff, xsize, ysize, xsize, ysize, buf_type, array); } public int ReadRaster(int xoff, int yoff, int xsize, int ysize, double[] array) { return ReadRaster(xoff, yoff, xsize, ysize, xsize, ysize, gdalconstConstants.GDT_Float64, array); } public int WriteRaster_Direct(int xoff, int yoff, int xsize, int ysize, int buf_xsize, int buf_ysize, java.nio.ByteBuffer nioBuffer) { return WriteRaster_Direct(xoff, yoff, xsize, ysize, buf_xsize, buf_ysize, gdalconstConstants.GDT_Byte, nioBuffer); } public int WriteRaster_Direct(int xoff, int yoff, int xsize, int ysize, int buf_type, java.nio.ByteBuffer nioBuffer) { return WriteRaster_Direct(xoff, yoff, xsize, ysize, xsize, ysize, buf_type, nioBuffer); } public int WriteRaster_Direct(int xoff, int yoff, int xsize, int ysize, java.nio.ByteBuffer nioBuffer) { return WriteRaster_Direct(xoff, yoff, xsize, ysize, xsize, ysize, gdalconstConstants.GDT_Byte, nioBuffer); } public int WriteRaster(int xoff, int yoff, int xsize, int ysize, int buf_type, byte[] array) { return WriteRaster(xoff, yoff, xsize, ysize, xsize, ysize, buf_type, array); } public int WriteRaster(int xoff, int yoff, int xsize, int ysize, byte[] array) { return WriteRaster(xoff, yoff, xsize, ysize, xsize, ysize, gdalconstConstants.GDT_Byte, array); } public int WriteRaster(int xoff, int yoff, int xsize, int ysize, int buf_type, short[] array) { return WriteRaster(xoff, yoff, xsize, ysize, xsize, ysize, buf_type, array); } public int WriteRaster(int xoff, int yoff, int xsize, int ysize, short[] array) { return WriteRaster(xoff, yoff, xsize, ysize, xsize, ysize, gdalconstConstants.GDT_Int16, array); } public int WriteRaster(int xoff, int yoff, int xsize, int ysize, int buf_type, int[] array) { return WriteRaster(xoff, yoff, xsize, ysize, xsize, ysize, buf_type, array); } public int WriteRaster(int xoff, int yoff, int xsize, int ysize, int[] array) { return WriteRaster(xoff, yoff, xsize, ysize, xsize, ysize, gdalconstConstants.GDT_Int32, array); } public int WriteRaster(int xoff, int yoff, int xsize, int ysize, int buf_type, float[] array) { return WriteRaster(xoff, yoff, xsize, ysize, xsize, ysize, buf_type, array); } public int WriteRaster(int xoff, int yoff, int xsize, int ysize, float[] array) { return WriteRaster(xoff, yoff, xsize, ysize, xsize, ysize, gdalconstConstants.GDT_Float32, array); } public int WriteRaster(int xoff, int yoff, int xsize, int ysize, int buf_type, double[] array) { return WriteRaster(xoff, yoff, xsize, ysize, xsize, ysize, buf_type, array); } public int WriteRaster(int xoff, int yoff, int xsize, int ysize, double[] array) { return WriteRaster(xoff, yoff, xsize, ysize, xsize, ysize, gdalconstConstants.GDT_Float64, array); } %} /* Could be disabled as do nothing, but we keep them for backwards compatibility */ /*%typemap(javadestruct_derived, methodname="delete", methodmodifiers="public") GDALRasterBandShadow "" %typemap(javadestruct_derived, methodname="delete", methodmodifiers="public") GDALDriverShadow "" %typemap(javadestruct, methodname="delete", methodmodifiers="protected") GDALMajorObjectShadow %{ { if(swigCPtr != 0 && swigCMemOwn) { swigCMemOwn = false; throw new UnsupportedOperationException("C++ destructor does not have public access"); } swigCPtr = 0; } %}*/ // Add a Java reference to prevent premature garbage collection and resulting use // of dangling C++ pointer. Intended for methods that return pointers or // references to a member variable. %typemap(javaout) GDALRasterBandShadow* GetRasterBand, GDALRasterBandShadow* GetOverview, GDALRasterBandShadow* GetMaskBand, GDALColorTableShadow* GetColorTable, GDALColorTableShadow* GetRasterColorTable, OGRLayerShadow* CreateLayer, OGRLayerShadow* CopyLayer, OGRLayerShadow* GetLayerByIndex, OGRLayerShadow* GetLayerByName, OGRLayerShadow* ExecuteSQL, CPLXMLNode* getChild, CPLXMLNode* getNext, CPLXMLNode* GetXMLNode, CPLXMLNode* SearchXMLNode { long cPtr = $jnicall; $javaclassname ret = null; if (cPtr != 0) { ret = new $javaclassname(cPtr, $owner); ret.addReference(this); } return ret; } %typemap(javainterfaces) GDALColorTableShadow "Cloneable" %typemap(javainterfaces) GDALRasterAttributeTableShadow "Cloneable" %typemap(javacode) GDALRasterAttributeTableShadow %{ public Object clone() { return Clone(); } %} %typemap(javacode) GDALMajorObjectShadow %{ private Object parentReference; /* Ensure that the GC doesn't collect any parent instance set from Java */ protected void addReference(Object reference) { parentReference = reference; } /* For backward compatibility */ public int SetMetadata(java.util.Hashtable metadata, String domain) { if (metadata == null) return SetMetadata((java.util.Vector)null, domain); java.util.Vector v = new java.util.Vector(); java.util.Enumeration values = metadata.elements(); java.util.Enumeration keys = metadata.keys(); while(keys.hasMoreElements()) { v.add((String)keys.nextElement() + "=" + (String)values.nextElement()); } return SetMetadata(v, domain); } public int SetMetadata(java.util.Hashtable metadata) { return SetMetadata(metadata, null); } %} %include callback.i %include typemaps_java.i