nonempty icon indicating copy to clipboard operation
nonempty copied to clipboard

Flesh out functionality

Open FintanH opened this issue 5 years ago • 5 comments

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 use from_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 have from_slice but a Copy version would be good~ Looking into the semantics of this, I think it doesn't suit NonEmpty after all.
  • [ ] copy_within
  • [ ] clear - we probably don't want this
  • [ ] dedup
  • [ ] dedup_by
  • [ ] drain - wouldn't make sense for NonEmpty unless it returned a Vec rather than Drain
  • [ ] 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 back Vec
  • [ ] remove_item - should give back Vec
  • [ ] repeat
  • [ ] reserve
  • [ ] reserve_exact
  • [ ] resize - possibly just work on the tail Vec
  • [ ] 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 - the Into impl 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

FintanH avatar Mar 17 '20 16:03 FintanH

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.

FintanH avatar Mar 17 '20 17:03 FintanH

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

FintanH avatar Mar 17 '20 18:03 FintanH

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 :/

FintanH avatar Mar 17 '20 18:03 FintanH

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.

fritzrehde avatar Dec 09 '23 21:12 fritzrehde

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.

cloudhead avatar Dec 19 '23 12:12 cloudhead