Skip to content

Commit 3627a4d

Browse files
Last few things
1 parent fae5016 commit 3627a4d

File tree

2 files changed

+35
-25
lines changed

2 files changed

+35
-25
lines changed

demo/main_demo.rs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -117,23 +117,22 @@ static BLOCKY: StaticVec<MyOtherStruct, 6> = const {
117117
MyOtherStruct { s: "f" }
118118
];
119119
let mut b = StaticVec::<MyOtherStruct, 6>::new();
120-
let c = staticvec![
120+
let iter_slice = staticvec![
121121
MyOtherStruct { s: "a" },
122122
MyOtherStruct { s: "b" },
123123
MyOtherStruct { s: "c" },
124-
];
125-
let c_slice = c.as_slice();
126-
b.insert(0, c_slice[0].clone());
127-
b.insert(1, c_slice[1].clone());
128-
b.insert(2, c_slice[2].clone());
124+
]
125+
.iter()
126+
.as_slice();
127+
b.insert(0, iter_slice[0].clone());
128+
b.insert(1, iter_slice[1].clone());
129+
b.insert(2, iter_slice[2].clone());
129130
b.append(&mut a);
130131
// `a` is now empty, but we have to "forget" it anyways to make this work in a const context in
131132
// conjunction with the `const_precise_live_drops` feature currently. Note that the reason the
132133
// `build` const fn did not require any use of `mem::forget` is that we only created a single
133134
// StaticVec instance within it which was directly used as the return value.
134135
forget(a);
135-
// `c` must be "forgotten" for the same reasons as `a`.
136-
forget(c);
137136
b
138137
};
139138

src/iterators.rs

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ impl<'a, T: 'a, const N: usize> DoubleEndedIterator for StaticVecIterConst<'a, T
216216
}
217217
}
218218

219-
impl<'a, T: 'a, const N: usize> ExactSizeIterator for StaticVecIterConst<'a, T, N> {
219+
impl<'a, T: 'a, const N: usize> const ExactSizeIterator for StaticVecIterConst<'a, T, N> {
220220
#[inline(always)]
221221
fn len(&self) -> usize {
222222
distance_between(self.end, self.start)
@@ -413,7 +413,7 @@ impl<'a, T: 'a, const N: usize> DoubleEndedIterator for StaticVecIterMut<'a, T,
413413
}
414414
}
415415

416-
impl<'a, T: 'a, const N: usize> ExactSizeIterator for StaticVecIterMut<'a, T, N> {
416+
impl<'a, T: 'a, const N: usize> const ExactSizeIterator for StaticVecIterMut<'a, T, N> {
417417
#[inline(always)]
418418
fn len(&self) -> usize {
419419
distance_between(self.end, self.start)
@@ -618,7 +618,7 @@ impl<T, const N: usize> DoubleEndedIterator for StaticVecIntoIter<T, N> {
618618
}
619619
}
620620

621-
impl<T, const N: usize> ExactSizeIterator for StaticVecIntoIter<T, N> {
621+
impl<T, const N: usize> const ExactSizeIterator for StaticVecIntoIter<T, N> {
622622
#[inline(always)]
623623
fn len(&self) -> usize {
624624
self.end - self.start
@@ -630,8 +630,8 @@ impl<T, const N: usize> ExactSizeIterator for StaticVecIntoIter<T, N> {
630630
}
631631
}
632632

633-
impl<T, const N: usize> FusedIterator for StaticVecIntoIter<T, N> {}
634-
unsafe impl<T, const N: usize> TrustedLen for StaticVecIntoIter<T, N> {}
633+
impl<T, const N: usize> const FusedIterator for StaticVecIntoIter<T, N> {}
634+
unsafe impl<T, const N: usize> const TrustedLen for StaticVecIntoIter<T, N> {}
635635
// We hide this one just in case it gets removed from `std` later, so no one relies on us relying on
636636
// it.
637637
#[doc(hidden)]
@@ -642,8 +642,8 @@ unsafe impl<T: Copy, const N: usize> const TrustedRandomAccessNoCoerce for Stati
642642
self.end - self.start
643643
}
644644
}
645-
unsafe impl<T: Sync, const N: usize> Sync for StaticVecIntoIter<T, N> {}
646-
unsafe impl<T: Send, const N: usize> Send for StaticVecIntoIter<T, N> {}
645+
unsafe impl<T: Sync, const N: usize> const Sync for StaticVecIntoIter<T, N> {}
646+
unsafe impl<T: Send, const N: usize> const Send for StaticVecIntoIter<T, N> {}
647647

648648
impl<T: Clone, const N: usize> Clone for StaticVecIntoIter<T, N> {
649649
#[inline(always)]
@@ -749,7 +749,7 @@ impl<'a, T: 'a, const N: usize> DoubleEndedIterator for StaticVecDrain<'a, T, N>
749749
}
750750
}
751751

752-
impl<'a, T: 'a, const N: usize> ExactSizeIterator for StaticVecDrain<'a, T, N> {
752+
impl<'a, T: 'a, const N: usize> const ExactSizeIterator for StaticVecDrain<'a, T, N> {
753753
#[inline(always)]
754754
fn len(&self) -> usize {
755755
self.iter.len()
@@ -761,8 +761,8 @@ impl<'a, T: 'a, const N: usize> ExactSizeIterator for StaticVecDrain<'a, T, N> {
761761
}
762762
}
763763

764-
impl<'a, T: 'a, const N: usize> FusedIterator for StaticVecDrain<'a, T, N> {}
765-
unsafe impl<'a, T: 'a, const N: usize> TrustedLen for StaticVecDrain<'a, T, N> {}
764+
impl<'a, T: 'a, const N: usize> const FusedIterator for StaticVecDrain<'a, T, N> {}
765+
unsafe impl<'a, T: 'a, const N: usize> const TrustedLen for StaticVecDrain<'a, T, N> {}
766766
// We hide this one just in case it gets removed from `std` later, so no one relies on us relying on
767767
// it.
768768
#[doc(hidden)]
@@ -774,8 +774,8 @@ unsafe impl<'a, T: Copy + 'a, const N: usize> const TrustedRandomAccessNoCoerce
774774
distance_between(self.iter.end, self.iter.start)
775775
}
776776
}
777-
unsafe impl<'a, T: 'a + Sync, const N: usize> Sync for StaticVecDrain<'a, T, N> {}
778-
unsafe impl<'a, T: 'a + Send, const N: usize> Send for StaticVecDrain<'a, T, N> {}
777+
unsafe impl<'a, T: 'a + Sync, const N: usize> const Sync for StaticVecDrain<'a, T, N> {}
778+
unsafe impl<'a, T: 'a + Send, const N: usize> const Send for StaticVecDrain<'a, T, N> {}
779779

780780
impl<'a, T: 'a + Debug, const N: usize> Debug for StaticVecDrain<'a, T, N> {
781781
#[inline(always)]
@@ -871,7 +871,9 @@ impl<T, I: Iterator<Item = T> + DoubleEndedIterator, const N: usize> DoubleEnded
871871
}
872872
}
873873

874-
impl<T, I: Iterator<Item = T>, const N: usize> ExactSizeIterator for StaticVecSplice<T, I, N> {
874+
impl<T, I: Iterator<Item = T>, const N: usize> const ExactSizeIterator
875+
for StaticVecSplice<T, I, N>
876+
{
875877
#[inline(always)]
876878
fn len(&self) -> usize {
877879
self.end - self.start
@@ -883,10 +885,19 @@ impl<T, I: Iterator<Item = T>, const N: usize> ExactSizeIterator for StaticVecSp
883885
}
884886
}
885887

886-
impl<T, I: Iterator<Item = T>, const N: usize> FusedIterator for StaticVecSplice<T, I, N> {}
887-
unsafe impl<T, I: Iterator<Item = T>, const N: usize> TrustedLen for StaticVecSplice<T, I, N> {}
888-
unsafe impl<T: Sync, I: Iterator<Item = T>, const N: usize> Sync for StaticVecSplice<T, I, N> {}
889-
unsafe impl<T: Send, I: Iterator<Item = T>, const N: usize> Send for StaticVecSplice<T, I, N> {}
888+
impl<T, I: Iterator<Item = T>, const N: usize> const FusedIterator for StaticVecSplice<T, I, N> {}
889+
unsafe impl<T, I: Iterator<Item = T>, const N: usize> const TrustedLen
890+
for StaticVecSplice<T, I, N>
891+
{
892+
}
893+
unsafe impl<T: Sync, I: Iterator<Item = T>, const N: usize> const Sync
894+
for StaticVecSplice<T, I, N>
895+
{
896+
}
897+
unsafe impl<T: Send, I: Iterator<Item = T>, const N: usize> const Send
898+
for StaticVecSplice<T, I, N>
899+
{
900+
}
890901

891902
impl<T: Debug, I: Iterator<Item = T>, const N: usize> Debug for StaticVecSplice<T, I, N> {
892903
#[inline(always)]

0 commit comments

Comments
 (0)