Skip to content

Commit 38954dc

Browse files
committed
Make Array Consumer/Builder methods unsafe
1 parent 31af451 commit 38954dc

File tree

2 files changed

+17
-17
lines changed

2 files changed

+17
-17
lines changed

src/lib.rs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -169,16 +169,16 @@ pub struct ArrayBuilder<T, N: ArrayLength<T>> {
169169

170170
impl<T, N: ArrayLength<T>> ArrayBuilder<T, N> {
171171
#[doc(hidden)]
172-
pub fn new() -> ArrayBuilder<T, N> {
172+
pub unsafe fn new() -> ArrayBuilder<T, N> {
173173
ArrayBuilder {
174-
array: ManuallyDrop::new(unsafe { mem::uninitialized() }),
174+
array: ManuallyDrop::new(mem::uninitialized()),
175175
position: 0,
176176
}
177177
}
178178

179179
#[doc(hidden)]
180-
pub fn into_inner(self) -> GenericArray<T, N> {
181-
let array = unsafe { ptr::read(&self.array) };
180+
pub unsafe fn into_inner(self) -> GenericArray<T, N> {
181+
let array = ptr::read(&self.array);
182182

183183
mem::forget(self);
184184

@@ -204,7 +204,7 @@ pub struct ArrayConsumer<T, N: ArrayLength<T>> {
204204

205205
impl<T, N: ArrayLength<T>> ArrayConsumer<T, N> {
206206
#[doc(hidden)]
207-
pub fn new(array: GenericArray<T, N>) -> ArrayConsumer<T, N> {
207+
pub unsafe fn new(array: GenericArray<T, N>) -> ArrayConsumer<T, N> {
208208
ArrayConsumer {
209209
array: ManuallyDrop::new(array),
210210
position: 0,
@@ -254,7 +254,7 @@ where
254254
where
255255
I: IntoIterator<Item = T>,
256256
{
257-
let mut destination = ArrayBuilder::new();
257+
let mut destination = unsafe { ArrayBuilder::new() };
258258

259259
for (src, dst) in iter.into_iter().zip(destination.array.iter_mut()) {
260260
unsafe {
@@ -268,7 +268,7 @@ where
268268
from_iter_length_fail(destination.position, N::to_usize());
269269
}
270270

271-
destination.into_inner()
271+
unsafe { destination.into_inner() }
272272
}
273273
}
274274

@@ -293,7 +293,7 @@ where
293293
where
294294
F: FnMut(usize) -> T,
295295
{
296-
let mut destination = ArrayBuilder::new();
296+
let mut destination = unsafe { ArrayBuilder::new() };
297297

298298
for (i, dst) in destination.array.iter_mut().enumerate() {
299299
unsafe {
@@ -303,7 +303,7 @@ where
303303
destination.position += 1;
304304
}
305305

306-
destination.into_inner()
306+
unsafe { destination.into_inner() }
307307
}
308308

309309
#[doc(hidden)]
@@ -319,8 +319,8 @@ where
319319
Self::Length: ArrayLength<B> + ArrayLength<U>,
320320
F: FnMut(B, Self::Item) -> U,
321321
{
322-
let mut left = ArrayConsumer::new(lhs);
323-
let mut right = ArrayConsumer::new(self);
322+
let mut left = unsafe { ArrayConsumer::new(lhs) };
323+
let mut right = unsafe { ArrayConsumer::new(self) };
324324

325325
let ArrayConsumer {
326326
array: ref left_array,
@@ -350,7 +350,7 @@ where
350350
Self::Length: ArrayLength<B> + ArrayLength<U>,
351351
F: FnMut(Lhs::Item, Self::Item) -> U,
352352
{
353-
let mut right = ArrayConsumer::new(self);
353+
let mut right = unsafe { ArrayConsumer::new(self) };
354354

355355
let ArrayConsumer {
356356
array: ref right_array,
@@ -390,7 +390,7 @@ where
390390
Self: MappedGenericSequence<T, U>,
391391
F: FnMut(T) -> U,
392392
{
393-
let mut source = ArrayConsumer::new(self);
393+
let mut source = unsafe { ArrayConsumer::new(self) };
394394

395395
let ArrayConsumer {
396396
ref array,
@@ -422,7 +422,7 @@ where
422422
where
423423
F: FnMut(U, T) -> U,
424424
{
425-
let mut source = ArrayConsumer::new(self);
425+
let mut source = unsafe { ArrayConsumer::new(self) };
426426

427427
let ArrayConsumer {
428428
ref array,
@@ -525,7 +525,7 @@ where
525525
let iter = iter.into_iter();
526526

527527
if iter.len() == N::to_usize() {
528-
let mut destination = ArrayBuilder::new();
528+
let mut destination = unsafe { ArrayBuilder::new() };
529529

530530
for (dst, src) in destination.array.iter_mut().zip(iter.into_iter()) {
531531
unsafe {
@@ -535,7 +535,7 @@ where
535535
destination.position += 1;
536536
}
537537

538-
Some(destination.into_inner())
538+
Some(unsafe { destination.into_inner() })
539539
} else {
540540
None
541541
}

src/sequence.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ pub unsafe trait GenericSequence<T>: Sized + IntoIterator {
3636
Self::Length: ArrayLength<B> + ArrayLength<U>,
3737
F: FnMut(B, Self::Item) -> U,
3838
{
39-
let mut left = ArrayConsumer::new(lhs);
39+
let mut left = unsafe { ArrayConsumer::new(lhs) };
4040

4141
let ArrayConsumer {
4242
array: ref left_array,

0 commit comments

Comments
 (0)