Repository navigation
Flesh out functionality #18
Copy link
Copy link
Open
Description
We should flesh out the functionality of nonempty. A lot of it would just be the Vec implementation.
Enumerating these for clarity and also to comment on which ones we may not want:
-
append -
N/A (memory is not contiguous)as_mut_ptr -
N/Aas_mut_slice -
N/Aas_ptr -
N/Aas_slice -
capacity -
chunks -
chunks_exact -
chunks_exact_mut -
chunks_mut -
clone_from_slice-we useThis doesn't make sense either since it's just copying a slice's contents in, but we can't guarantee a length of 1 without panicing.from_slice, we should rename -
concat -
connect -
contains -
copy_from_slice-we haveLooking into the semantics of this, I think it doesn't suitfrom_slicebut aCopyversion would be goodNonEmptyafter all. -
copy_within -
clear- we probably don't want this -
dedup -
dedup_by -
drain- wouldn't make sense forNonEmptyunless it returned aVecrather thanDrain -
drain_filter- same as above -
ends_with -
eq_ignore_ascii_case -
extend_from_slice -
first -
first_mut -
from_raw_parts- this seems unecessary -
get -
get_mut -
get_unchecked -
get_unchecked_mut -
insert -
into_boxed_slice -
into_raw_parts- not sure about this one -
is_ascii -
is_empty -
is_sorted -
is_sorted_by_key -
iter -
iter_mut -
join -
last -
last_mut -
leak- seems specialised -
len -
make_ascii_lowercase -
make_ascii_uppercase -
new -
partition_at_index -
partition_at_index_by -
partition_at_index_by_key -
partition_deup -
partition_deup_by -
partition_deup_by_key -
pop -
push -
rchunks -
rchunks_exact -
rchunks_exact_mut -
rchunks_mut -
remove- should give backVec -
remove_item- should give backVec -
repeat -
reserve -
reserve_exact -
resize- possibly just work on the tailVec -
resize_default -
resize_wtih -
retain- unsure if this should be kept -
reverse -
rotate_left -
rotate_right -
rsplit -
rsplit_mut -
rsplitn -
rsplitn_mut -
set_len -
shrink_to- should be greater than 1 -
shrink_to_fit -
sort -
sort_by -
sort_by_cahced_key -
sort_by_key -
sort_unstable -
sort_unstable_by -
sort_unstable_by_key -
splice -
split -
split_at -
split_at_mut -
split_first -
split_first_mut -
split_last -
split_last -
split_last_mut -
split_mut -
split_off -
splitn -
splitn_mut -
starts_with -
swap -
swap_with_slice -
to_ascii_lowercase -
to_ascii_uppercase -
to_vec- theIntoimpl does this -
try_reserve -
try_reserve_exact -
windows -
with_capacity -
From<NonEmpty<T>> for Vec<T>- Implement and test IntoIterator #17 (comment)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels
Activity
FintanH commentedon Mar 17, 2020
Hmmmm so something I'd like to discuss is the functions that come "Methods from Deref<Target = [T]>". Is this something that's possible with
NonEmpty? Also, this makes me think, could we implementDeref<Target=Vec<T>>? 🤔Otherwise, I think the way to go about it is go through the list of functions and see if they're possible to implement.
FintanH commentedon Mar 17, 2020
As discussed async, we should use https://doc.rust-lang.org/std/num/struct.NonZeroUsize.html for things that take a length, e.g.
with_capacityFintanH commentedon Mar 17, 2020
Something I'd also be interested in is
splitfunctions that own theT, I'm not sure if this is possible though. I tend to split and consume, but I end up having to clone :/fritzrehde commentedon Dec 9, 2023
In the checklist it says
as_mut_sliceis implemented, but I can't find that method anywhere in the repo or in the documentation.cloudhead commentedon Dec 19, 2023
I think it's checked for the same reason
as_sliceis checked: it's actually not possible to implement these since the memory isn't contiguous. I'll update the todo.bbstilson commentedon Mar 17, 2026
@FintanH is it cool if I open a PR for
with_capacity? I have a use-case that would benefit, and I'm happy to contribute 🙂Branch is up here: https://github.com/cloudhead/nonempty/compare/master...bbstilson:nonempty:feature/new_with_capacity?expand=1
FintanH commentedon Mar 17, 2026
Hey @bbstilson! Yes please do, I’ll get around to merging it when I can☺️
FintanH commentedon Mar 17, 2026
I’m just looking at your branch and have two questions:
bbstilson commentedon Mar 17, 2026
Great questions. I think my brain just checked out for a bit because I originally implemented with NonZeroUsize, then deleted it. Anyways, I added it back in and opened a PR haha: #84
bbstilson commentedon Mar 21, 2026
How desirable is it to modify the NonEmpty struct such that memory is contiguous? The current implementation prevents a lot of Vec operations (all the chunks, for example).
(edit)
I did this locally (happy to push a branch); it was pretty straightforward. The biggest consequence is constructors are no longer const compatible because you can't instantiate a vec at compile time.
bbstilson commentedon Apr 6, 2026
@FintanH bumping ☝🏻