197g / 197g/static-alloc

Eccentric `FixedVec` interfaces–A wish list

Open
#11 0 comments 0 reactions 0 assignees View on GitHub
enhancement help wanted
Dominant language
Rust
Stars
62
Forks
11
Avg merge
3h 45m
Merged PRs (30d)
5

Description

Not managing the allocation within `FixedVec` makes some rather outlandish interfaces necessary but also possible. Each should get forked into a separate issue when it gets a better draft or is being worked on. This is a quick sketch/wish list.

* ~~`impl DoubleEndedIterator for Drain<'_, T> { }`~~ (closed in #19)
* `fn FixedVec::extend_from_within(&mut self, idx: impl SliceIndex<[T]>)`
`fn FixedVec::fill_from_within(&mut self, f: impl FnOnce(&[T]) -> impl Iterator)`
The elements can be borrowed when extend the `FixedVec` as we *never* have to relocate them. That's quite awesome.
* `Drain::skip(&mut self)`. Move an element to the start, then advance over it as if it were not part of the original `drain(..)` invocation. This would be a useful precursor to `DrainFilter` as well. An symmetric operation may put it in-front of the tail but needs some naming discussion (`skip_back` is confusing when double ended iterator should provide the same for the other side).
* ```rust
struct SpliceVec<'a, T> {
// A vector view on the contents but forgotten instead of dropped.
vec: ManuallyDrop>,
// Unused tail and capacity of the underlying vec.
tail_len: usize,
tail_capacity: usize,
}

impl FixedVec<'_, T> {
splice_vec(&mut self) -> SpliceVec<'_, T>;
}

impl<'a, T> Deref for SpliceVec<'a, T> {
type Target = FixedVec<'a, T>;
// ..
}
```

A splice that works strictly in-place. The elements in the tail of the original `FixedVec` may be manually shifted backwards to provide more capacity to the splice. No more work is involved exactly if the vector within the `Splice` is empty when it is dropped.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.