Skip to content

Commit daef5cc

Browse files
committed
Use addr_of where applicable
1 parent 2796d9d commit daef5cc

17 files changed

+60
-51
lines changed

src/class.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use std::fmt;
22
use std::mem;
3-
use std::ptr;
3+
use std::ptr::{self, addr_of};
44

55
use crate::internal_prelude::*;
66

@@ -53,7 +53,7 @@ pub trait ObjectClass: Sized {
5353
unsafe fn cast_unchecked<T: ObjectClass>(self) -> T {
5454
// This method requires you to be 18 years or older to use it
5555
// (note: if it wasn't a trait method, it could be marked as const)
56-
let obj = ptr::read((&self as *const Self).cast());
56+
let obj = ptr::read(addr_of!(self).cast());
5757
mem::forget(self);
5858
obj
5959
}

src/dim.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ macro_rules! impl_tuple {
7272
#[inline]
7373
fn dims(&self) -> Vec<Ix> {
7474
unsafe {
75-
slice::from_raw_parts(self as *const _ as *const _, self.ndim())
75+
slice::from_raw_parts((self as *const Self).cast(), self.ndim())
7676
}.iter().cloned().collect()
7777
}
7878
}

src/error.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use std::fmt;
44
use std::io;
55
use std::ops::Deref;
66
use std::panic;
7-
use std::ptr;
7+
use std::ptr::{self, addr_of_mut};
88

99
use ndarray::ShapeError;
1010

@@ -96,7 +96,7 @@ impl ErrorStack {
9696
}
9797

9898
let mut data = CallbackData { stack: ExpandedErrorStack::new(), err: None };
99-
let data_ptr: *mut c_void = (&mut data as *mut CallbackData).cast::<c_void>();
99+
let data_ptr: *mut c_void = addr_of_mut!(data).cast::<c_void>();
100100

101101
let stack_id = self.handle().id();
102102
h5lock!({

src/hl/attribute.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use std::fmt::{self, Debug};
22
use std::ops::Deref;
3+
use std::ptr::addr_of_mut;
34

45
use hdf5_sys::{
56
h5::{H5_index_t, H5_iter_order_t},
@@ -62,7 +63,7 @@ impl Attribute {
6263
let callback_fn: H5A_operator2_t = Some(attributes_callback);
6364
let iteration_position: *mut hsize_t = &mut { 0_u64 };
6465
let mut result: Vec<String> = Vec::new();
65-
let other_data: *mut c_void = &mut result as *const _ as *mut c_void;
66+
let other_data: *mut c_void = addr_of_mut!(result).cast();
6667

6768
h5call!(H5Aiterate2(
6869
obj.handle().id(),

src/hl/container.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ impl ByteReader {
371371
if !hdf5_types::USING_H5_ALLOCATOR {
372372
crate::hl::plist::set_vlen_manager_libc(xfer.id())?;
373373
}
374-
Ok(ByteReader { obj, pos: 0, obj_space, dt: mem_dtype, xfer })
374+
Ok(Self { obj, pos: 0, obj_space, dt: mem_dtype, xfer })
375375
}
376376

377377
fn dataset_len(&self) -> usize {
@@ -494,7 +494,7 @@ impl Container {
494494
///
495495
/// ``ByteReader`` only supports 1-D `u8` datasets.
496496
pub fn as_byte_reader(&self) -> Result<ByteReader> {
497-
ByteReader::new(&self)
497+
ByteReader::new(self)
498498
}
499499

500500
/// Returns the datatype of the dataset/attribute.

src/hl/dataset.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -684,7 +684,7 @@ impl DatasetBuilderInner {
684684
///
685685
/// This requires the `lzf` crate feature
686686
pub fn lzf(&mut self) {
687-
self.with_dcpl(|pl| pl.lzf());
687+
self.with_dcpl(DatasetCreateBuilder::lzf);
688688
}
689689

690690
#[cfg(feature = "blosc")]

src/hl/dataspace.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,9 @@ impl Dataspace {
143143
} else {
144144
h5lock!({
145145
let mut len: size_t = 0;
146-
h5try!(H5Sencode1(self.id(), ptr::null_mut(), &mut len as *mut _));
146+
h5try!(H5Sencode1(self.id(), ptr::null_mut(), ptr::addr_of_mut!(len)));
147147
let mut buf = vec![0_u8; len];
148-
h5try!(H5Sencode1(self.id(), buf.as_mut_ptr().cast(), &mut len as *mut _));
148+
h5try!(H5Sencode1(self.id(), buf.as_mut_ptr().cast(), ptr::addr_of_mut!(len)));
149149
Ok(buf)
150150
})
151151
}

src/hl/datatype.rs

+11-8
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use std::borrow::Borrow;
22
use std::cmp::{Ordering, PartialEq, PartialOrd};
33
use std::fmt::{self, Debug, Display};
44
use std::ops::Deref;
5+
use std::ptr::{addr_of, addr_of_mut};
56

67
use hdf5_sys::h5t::{
78
H5T_cdata_t, H5T_class_t, H5T_cset_t, H5T_order_t, H5T_sign_t, H5T_str_t, H5Tarray_create2,
@@ -171,8 +172,8 @@ impl Datatype {
171172
let dst = dst.borrow();
172173
let mut cdata = H5T_cdata_t::default();
173174
h5lock!({
174-
let noop = H5Tfind(*H5T_NATIVE_INT, *H5T_NATIVE_INT, &mut (&mut cdata as *mut _));
175-
if H5Tfind(self.id(), dst.id(), &mut (&mut cdata as *mut _)) == noop {
175+
let noop = H5Tfind(*H5T_NATIVE_INT, *H5T_NATIVE_INT, &mut addr_of_mut!(cdata));
176+
if H5Tfind(self.id(), dst.id(), &mut addr_of_mut!(cdata)) == noop {
176177
Some(Conversion::NoOp)
177178
} else {
178179
match H5Tcompiler_conv(self.id(), dst.id()) {
@@ -235,7 +236,7 @@ impl Datatype {
235236
let mut members: Vec<EnumMember> = Vec::new();
236237
for idx in 0..h5try!(H5Tget_nmembers(id)) as _ {
237238
let mut value: u64 = 0;
238-
h5try!(H5Tget_member_value(id, idx, (&mut value as *mut u64).cast()));
239+
h5try!(H5Tget_member_value(id, idx, addr_of_mut!(value).cast()));
239240
let name = H5Tget_member_name(id, idx);
240241
members.push(EnumMember { name: string_from_cstr(name), value });
241242
h5_free_memory(name.cast());
@@ -277,7 +278,7 @@ impl Datatype {
277278
let ndims = h5try!(H5Tget_array_ndims(id));
278279
if ndims == 1 {
279280
let mut len: hsize_t = 0;
280-
h5try!(H5Tget_array_dims2(id, &mut len as *mut _));
281+
h5try!(H5Tget_array_dims2(id, addr_of_mut!(len)));
281282
Ok(TD::FixedArray(Box::new(base_dt.to_descriptor()?), len as _))
282283
} else {
283284
Err("Multi-dimensional array datatypes are not supported".into())
@@ -344,15 +345,17 @@ impl Datatype {
344345
}),
345346
TD::Boolean => {
346347
let bool_id = h5try!(H5Tenum_create(*H5T_NATIVE_INT8));
348+
let zero = 0_i8;
347349
h5try!(H5Tenum_insert(
348350
bool_id,
349351
b"FALSE\0".as_ptr().cast(),
350-
(&0_i8 as *const i8).cast()
352+
addr_of!(zero).cast(),
351353
));
354+
let one = 1_i8;
352355
h5try!(H5Tenum_insert(
353356
bool_id,
354357
b"TRUE\0".as_ptr().cast(),
355-
(&1_i8 as *const i8).cast()
358+
addr_of!(one).cast(),
356359
));
357360
Ok(bool_id)
358361
}
@@ -364,7 +367,7 @@ impl Datatype {
364367
h5try!(H5Tenum_insert(
365368
enum_id,
366369
name.as_ptr(),
367-
(&member.value as *const u64).cast()
370+
addr_of!(member.value).cast()
368371
));
369372
}
370373
Ok(enum_id)
@@ -383,7 +386,7 @@ impl Datatype {
383386
TD::FixedArray(ref ty, len) => {
384387
let elem_dt = Self::from_descriptor(ty)?;
385388
let dims = len as hsize_t;
386-
Ok(h5try!(H5Tarray_create2(elem_dt.id(), 1, &dims as *const _)))
389+
Ok(h5try!(H5Tarray_create2(elem_dt.id(), 1, addr_of!(dims))))
387390
}
388391
TD::FixedAscii(size) => string_type(Some(size), H5T_cset_t::H5T_CSET_ASCII),
389392
TD::FixedUnicode(size) => string_type(Some(size), H5T_cset_t::H5T_CSET_UTF8),

src/hl/filters.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use std::collections::HashMap;
2-
use std::ptr;
2+
use std::ptr::{self, addr_of_mut};
33

44
use hdf5_sys::h5p::{
55
H5Pget_filter2, H5Pget_nfilters, H5Pset_deflate, H5Pset_filter, H5Pset_fletcher32, H5Pset_nbit,
@@ -180,7 +180,7 @@ impl Filter {
180180
return FilterInfo::default();
181181
}
182182
let mut flags: c_uint = 0;
183-
h5lock!(H5Zget_filter_info(filter_id, &mut flags as *mut _));
183+
h5lock!(H5Zget_filter_info(filter_id, addr_of_mut!(flags)));
184184
FilterInfo {
185185
is_available: true,
186186
encode_enabled: flags & H5Z_FILTER_CONFIG_ENCODE_ENABLED != 0,
@@ -503,8 +503,8 @@ impl Filter {
503503
let filter_id = h5try!(H5Pget_filter2(
504504
plist_id,
505505
idx as _,
506-
&mut flags as *mut _,
507-
&mut cd_nelmts as *mut _,
506+
addr_of_mut!(flags),
507+
addr_of_mut!(cd_nelmts),
508508
cd_values.as_mut_ptr(),
509509
name.len() as _,
510510
name.as_mut_ptr(),

src/hl/filters/blosc.rs

+9-9
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::ptr;
1+
use std::ptr::{self, addr_of_mut};
22
use std::slice;
33

44
use lazy_static::lazy_static;
@@ -25,7 +25,7 @@ const BLOSC_FILTER_NAME: &[u8] = b"blosc\0";
2525
pub const BLOSC_FILTER_ID: H5Z_filter_t = 32001;
2626
const BLOSC_FILTER_VERSION: c_uint = 2;
2727

28-
const BLOSC_FILTER_INFO: H5Z_class2_t = H5Z_class2_t {
28+
const BLOSC_FILTER_INFO: &H5Z_class2_t = &H5Z_class2_t {
2929
version: H5Z_CLASS_T_VERS as _,
3030
id: BLOSC_FILTER_ID,
3131
encoder_present: 1,
@@ -41,7 +41,7 @@ lazy_static! {
4141
unsafe {
4242
blosc_init();
4343
}
44-
let ret = unsafe { H5Zregister((&BLOSC_FILTER_INFO as *const H5Z_class2_t).cast()) };
44+
let ret = unsafe { H5Zregister((BLOSC_FILTER_INFO as *const H5Z_class2_t).cast()) };
4545
if H5ErrorCode::is_err_code(ret) {
4646
return Err("Can't register Blosc filter");
4747
}
@@ -62,8 +62,8 @@ extern "C" fn set_local_blosc(dcpl_id: hid_t, type_id: hid_t, _space_id: hid_t)
6262
H5Pget_filter_by_id2(
6363
dcpl_id,
6464
BLOSC_FILTER_ID,
65-
&mut flags as *mut _,
66-
&mut nelmts as *mut _,
65+
addr_of_mut!(flags),
66+
addr_of_mut!(nelmts),
6767
values.as_mut_ptr(),
6868
0,
6969
ptr::null_mut(),
@@ -158,7 +158,7 @@ fn parse_blosc_cdata(cd_nelmts: size_t, cd_values: *const c_uint) -> Option<Blos
158158
cfg.doshuffle = cdata[5] as _;
159159
}
160160
if cdata.len() >= 7 {
161-
let r = unsafe { blosc_compcode_to_compname(cdata[6] as _, &mut cfg.compname as *mut _) };
161+
let r = unsafe { blosc_compcode_to_compname(cdata[6] as _, addr_of_mut!(cfg.compname)) };
162162
if r == -1 {
163163
let complist = string_from_cstr(unsafe { blosc_list_compressors() });
164164
let errmsg = format!(
@@ -221,9 +221,9 @@ unsafe fn filter_blosc_decompress(
221221
let (mut cbytes, mut blocksize): (size_t, size_t) = (0, 0);
222222
blosc_cbuffer_sizes(
223223
*buf,
224-
&mut outbuf_size as *mut _,
225-
&mut cbytes as *mut _,
226-
&mut blocksize as *mut _,
224+
addr_of_mut!(outbuf_size),
225+
addr_of_mut!(cbytes),
226+
addr_of_mut!(blocksize),
227227
);
228228
let outbuf = libc::malloc(outbuf_size);
229229
if outbuf.is_null() {

src/hl/filters/lzf.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::ptr;
1+
use std::ptr::{self, addr_of_mut};
22
use std::slice;
33

44
use lazy_static::lazy_static;
@@ -15,7 +15,7 @@ const LZF_FILTER_NAME: &[u8] = b"lzf\0";
1515
pub const LZF_FILTER_ID: H5Z_filter_t = 32000;
1616
const LZF_FILTER_VERSION: c_uint = 4;
1717

18-
const LZF_FILTER_INFO: H5Z_class2_t = H5Z_class2_t {
18+
const LZF_FILTER_INFO: &H5Z_class2_t = &H5Z_class2_t {
1919
version: H5Z_CLASS_T_VERS as _,
2020
id: LZF_FILTER_ID,
2121
encoder_present: 1,
@@ -28,7 +28,7 @@ const LZF_FILTER_INFO: H5Z_class2_t = H5Z_class2_t {
2828

2929
lazy_static! {
3030
static ref LZF_INIT: Result<(), &'static str> = {
31-
let ret = unsafe { H5Zregister((&LZF_FILTER_INFO as *const H5Z_class2_t).cast()) };
31+
let ret = unsafe { H5Zregister((LZF_FILTER_INFO as *const H5Z_class2_t).cast()) };
3232
if H5ErrorCode::is_err_code(ret) {
3333
return Err("Can't register LZF filter");
3434
}
@@ -49,8 +49,8 @@ extern "C" fn set_local_lzf(dcpl_id: hid_t, type_id: hid_t, _space_id: hid_t) ->
4949
H5Pget_filter_by_id2(
5050
dcpl_id,
5151
LZF_FILTER_ID,
52-
&mut flags as *mut _,
53-
&mut nelmts as *mut _,
52+
addr_of_mut!(flags),
53+
addr_of_mut!(nelmts),
5454
values.as_mut_ptr(),
5555
0,
5656
ptr::null_mut(),

src/hl/group.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use std::fmt::{self, Debug};
22
use std::ops::Deref;
33
use std::panic;
4+
use std::ptr::addr_of_mut;
45

56
use hdf5_sys::{
67
h5::{hsize_t, H5_index_t, H5_iter_order_t},
@@ -339,7 +340,7 @@ impl Group {
339340

340341
// Store our references on the heap
341342
let mut vtable = Vtable { f: &mut op, d: &mut val };
342-
let other_data = (&mut vtable as *mut Vtable<_, _>).cast::<c_void>();
343+
let other_data = addr_of_mut!(vtable).cast::<c_void>();
343344

344345
h5call!(H5Literate(
345346
self.id(),

src/hl/plist.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::fmt::{self, Debug, Display};
22
use std::ops::Deref;
33
use std::panic;
4-
use std::ptr;
4+
use std::ptr::{self, addr_of_mut};
55
use std::str::FromStr;
66

77
use hdf5_sys::h5p::{
@@ -184,7 +184,7 @@ impl PropertyList {
184184
}
185185

186186
let mut data = Vec::new();
187-
let data_ptr: *mut c_void = (&mut data as *mut Vec<_>).cast();
187+
let data_ptr: *mut c_void = addr_of_mut!(data).cast();
188188

189189
h5lock!(H5Piterate(self.id(), ptr::null_mut(), Some(callback), data_ptr));
190190
data

src/hl/plist/dataset_create.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
33
use std::fmt::{self, Debug};
44
use std::ops::Deref;
5-
use std::ptr;
5+
use std::ptr::{self, addr_of_mut};
66

77
#[cfg(feature = "1.10.0")]
88
use bitflags::bitflags;
@@ -809,8 +809,8 @@ impl DatasetCreate {
809809
idx as _,
810810
NAME_LEN as _,
811811
name.as_mut_ptr(),
812-
&mut offset as *mut _,
813-
&mut size as *mut _,
812+
addr_of_mut!(offset),
813+
addr_of_mut!(size),
814814
));
815815
#[allow(clippy::absurd_extreme_comparisons)]
816816
external.push(ExternalFile {

0 commit comments

Comments
 (0)