]>
git.proxmox.com Git - rustc.git/blob - vendor/sized-chunks/src/ring_buffer/refpool.rs
1 use core
::mem
::MaybeUninit
;
3 use ::refpool
::{PoolClone, PoolDefault}
;
5 use crate::ring_buffer
::index
::RawIndex
;
6 use crate::types
::ChunkLength
;
9 impl<A
, N
> PoolDefault
for RingBuffer
<A
, N
>
13 unsafe fn default_uninit(target
: &mut MaybeUninit
<Self>) {
14 let ptr
= target
.as_mut_ptr();
15 let origin_ptr
: *mut RawIndex
<N
> = &mut (*ptr
).origin
;
16 let length_ptr
: *mut usize = &mut (*ptr
).length
;
17 origin_ptr
.write(0.into
());
22 impl<A
, N
> PoolClone
for RingBuffer
<A
, N
>
27 unsafe fn clone_uninit(&self, target
: &mut MaybeUninit
<Self>) {
28 let ptr
= target
.as_mut_ptr();
29 let origin_ptr
: *mut RawIndex
<N
> = &mut (*ptr
).origin
;
30 let length_ptr
: *mut usize = &mut (*ptr
).length
;
31 let data_ptr
: *mut _
= &mut (*ptr
).data
;
32 let data_ptr
: *mut A
= (*data_ptr
).as_mut_ptr().cast();
33 origin_ptr
.write(self.origin
);
34 length_ptr
.write(self.length
);
35 for index
in self.range() {
37 .add(index
.to_usize())
38 .write((*self.ptr(index
)).clone());
46 use ::refpool
::{Pool, PoolRef}
;
47 use std
::iter
::FromIterator
;
50 fn default_and_clone() {
51 let pool
: Pool
<RingBuffer
<usize>> = Pool
::new(16);
52 let mut ref1
= PoolRef
::default(&pool
);
54 let chunk
= PoolRef
::make_mut(&pool
, &mut ref1
);
59 let ref2
= PoolRef
::cloned(&pool
, &ref1
);
60 let ref3
= PoolRef
::clone_from(&pool
, &RingBuffer
::from_iter(1..=3));
61 assert_eq
!(RingBuffer
::<usize>::from_iter(1..=3), *ref1
);
62 assert_eq
!(RingBuffer
::<usize>::from_iter(1..=3), *ref2
);
63 assert_eq
!(RingBuffer
::<usize>::from_iter(1..=3), *ref3
);
64 assert_eq
!(ref1
, ref2
);
65 assert_eq
!(ref1
, ref3
);
66 assert_eq
!(ref2
, ref3
);
67 assert
!(!PoolRef
::ptr_eq(&ref1
, &ref2
));