Skip to content

Commit

Permalink
Make raster index usize
Browse files Browse the repository at this point in the history
  • Loading branch information
lnicola committed Oct 7, 2023
1 parent 57db2d3 commit 5b6ed09
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 7 deletions.
4 changes: 4 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

## Unreleased

- **Breaking**: `Dataset::raster_count` now returns an `usize` and `Dataset::rasterband` now takes `usize` instead of `isize`

- <https://github.com/georust/gdal/pull/433>

- **Breaking**: `ExtendedDataType` no longer implements `Clone`, `PartialEq` and `Eq`

- <https://github.com/georust/gdal/pull/451>
Expand Down
17 changes: 12 additions & 5 deletions src/raster/rasterband.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,16 @@ use crate::errors::*;
impl Dataset {
/// Fetch a band object for a dataset.
///
/// Applies to raster datasets, and fetches the
/// rasterband at the given _1-based_ index.
pub fn rasterband(&self, band_index: isize) -> Result<RasterBand> {
/// Applies to raster datasets, and fetches the band at the given _1-based_ index.
///
/// # Errors
/// Returns an error if the band cannot be read, including in the case the index is 0.
///
/// # Panics
/// Panics if the band index is greater than `c_int::MAX`.
pub fn rasterband(&self, band_index: usize) -> Result<RasterBand> {
assert!(band_index <= c_int::MAX as usize);

unsafe {
let c_band = gdal_sys::GDALGetRasterBand(self.c_dataset(), band_index as c_int);
if c_band.is_null() {
Expand Down Expand Up @@ -69,8 +76,8 @@ impl Dataset {
}

/// Fetch the number of raster bands on this dataset.
pub fn raster_count(&self) -> isize {
(unsafe { gdal_sys::GDALGetRasterCount(self.c_dataset()) }) as isize
pub fn raster_count(&self) -> usize {
(unsafe { gdal_sys::GDALGetRasterCount(self.c_dataset()) }) as usize
}

/// Returns the raster dimensions: (width, height).
Expand Down
5 changes: 3 additions & 2 deletions src/raster/rasterize.rs
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ mod tests {
/// may be of any GDAL supported datatype.
pub fn rasterize(
dataset: &mut Dataset,
bands: &[isize],
bands: &[usize],
geometries: &[Geometry],
burn_values: &[f64],
options: Option<RasterizeOptions>,
Expand All @@ -178,8 +178,9 @@ pub fn rasterize(
geometries.len()
)));
}
let raster_count = dataset.raster_count();
for band in bands {
let is_good = *band > 0 && *band <= dataset.raster_count();
let is_good = *band > 0 && *band <= raster_count;
if !is_good {
return Err(GdalError::BadArgument(format!(
"Band index {} is out of bounds",
Expand Down

0 comments on commit 5b6ed09

Please sign in to comment.