nonempty
nonempty copied to clipboard
Flesh out functionality
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:
- [x]
append - [x] ~~
as_mut_ptr~~ N/A (memory is not contiguous) - [x] ~~
as_mut_slice~~ N/A - [x] ~~
as_ptr~~ N/A - [x] ~~
as_slice~~ N/A - [x]
capacity - [ ]
chunks - [ ]
chunks_exact - [ ]
chunks_exact_mut - [ ]
chunks_mut - [x]
clone_from_slice- ~we usefrom_slice, we should rename~ This 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. - [ ]
concat - [ ]
connect - [x]
contains - [x]
copy_from_slice- ~we havefrom_slicebut aCopyversion would be good~ Looking into the semantics of this, I think it doesn't suitNonEmptyafter 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 - [x]
first - [x]
first_mut - [ ]
from_raw_parts- this seems unecessary - [x]
get - [x]
get_mut - [ ]
get_unchecked - [ ]
get_unchecked_mut - [x]
insert - [x]
into_boxed_slice - [ ]
into_raw_parts- not sure about this one - [ ]
is_ascii - [x]
is_empty - [ ]
is_sorted - [ ]
is_sorted_by_key - [x]
iter - [x]
iter_mut - [ ]
join - [x]
last - [x]
last_mut - [ ]
leak- seems specialised - [x]
len - [ ]
make_ascii_lowercase - [ ]
make_ascii_uppercase - [x]
new - [ ]
partition_at_index - [ ]
partition_at_index_by - [ ]
partition_at_index_by_key - [ ]
partition_deup - [ ]
partition_deup_by - [ ]
partition_deup_by_key - [x]
pop - [x]
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 - [x]
split - [ ]
split_at - [ ]
split_at_mut - [x]
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 - [x]
to_vec- theIntoimpl does this - [ ]
try_reserve - [ ]
try_reserve_exact - [ ]
windows - [ ]
with_capacity - [ ]
From<NonEmpty<T>> for Vec<T>- https://github.com/cloudhead/nonempty/pull/17#issuecomment-600217655
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 implement Deref<Target=Vec<T>>? :thinking:
Otherwise, I think the way to go about it is go through the list of functions and see if they're possible to implement.
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_capacity
Something I'd also be interested in is split functions that own the T, I'm not sure if this is possible though. I tend to split and consume, but I end up having to clone :/
In the checklist it says as_mut_slice is implemented, but I can't find that method anywhere in the repo or in the documentation.
I think it's checked for the same reason as_slice is checked: it's actually not possible to implement these since the memory isn't contiguous. I'll update the todo.