#slice #string #data-structure #debug-assert

no-std odds

Odds and ends — collection miscellania. Extra functionality for slices (.find(), RevSlice), strings and other things. Things in odds may move to more appropriate crates if we find them.

33 releases

Uses old Rust 2015

0.4.0 Apr 11, 2020
0.3.1 Nov 27, 2017
0.2.26 Nov 19, 2017
0.2.25 Nov 20, 2016
0.2.3 Jun 12, 2015

#37 in No standard library

Download history 4807/week @ 2023-11-20 4683/week @ 2023-11-27 5175/week @ 2023-12-04 6564/week @ 2023-12-11 7530/week @ 2023-12-18 2749/week @ 2023-12-25 4858/week @ 2024-01-01 4529/week @ 2024-01-08 6796/week @ 2024-01-15 5327/week @ 2024-01-22 9376/week @ 2024-01-29 6580/week @ 2024-02-05 7814/week @ 2024-02-12 4622/week @ 2024-02-19 7570/week @ 2024-02-26 6918/week @ 2024-03-04

27,165 downloads per month
Used in 207 crates (14 directly)

MIT/Apache

75KB
1.5K SLoC

odds

Odds and ends — collection miscellania. Extra functionality related to slices, strings and other things.

Please read the API documentation here

build_status

Recent Changes

  • 0.4.0
    • Remove MendSlices
    • Remove deprecated items
    • Updated rawpointer dependency
    • Updated dev-dependencies
  • 0.3.1
    • Go back to the 0.2.x formulation of the fix function, because the new fancy version relied on a type system detail that has been changed in Rust — closures must not be able to use their own type in their arguments. Fair enough.
  • 0.3.0
    • Update the fix and Fix closure combinator to not use dynamic dispatch! new formulation was an idea by @talchas
    • Implement Error for EncodeUtf8Error by George Burton
    • Depend on crate rawslice for its SliceIter.
    • More features for SliceIter and SliceCopyIter: access start/end pointer, implement Index.
    • Add BlockedIter
    • Remove functionality that is unused or directly conflicts with other new features, for example in std:
      • Vec::splice. Use the std splice.
    • Deprecate functionality that has been added to std:
      • String::insert_str
      • str::rep
      • ptr_eq, ref_eq: use std::ptr::eq
    • Deprecate functionality that has moved:
      • get_unchecked, slice_unchecked: use unchecked-index crate instead
    • Vec functionality is now opt-in under feature std-vec. String functionality the same under std-string. The crate is now no_std by default.
    • Proper license files added to the repo, thanks @raphlinus!
  • 0.2.26
    • Proper license files by @raphlinus
  • 0.2.25
    • Add UnalignedIter
    • Add SliceCopyIter
    • CharStr now implements more traits.
  • 0.2.24
    • Add CharStr
  • 0.2.23
    • Add RevSlice, a reversed view of a slice
    • Add encode_utf8 for encoding chars
  • 0.2.22
    • Improve slice's .find() and .rfind() and related methods by explicitly unrolling their search loop.
  • 0.2.21
    • Add slice::rotate_left to cyclically rotate elements in a slice.
  • 0.2.20
    • Add SliceFindSplit with .find_split, .rfind_split, .find_split_mut, .rfind_split_mut.
    • Add VecFindRemove with .find_remove(), .rfind_remove().
  • 0.2.19
    • Add trait SliceFind with methods .find(&T), .rfind(&T) for slices.
    • Add function vec(iterable) -> Vec
    • Add prelude module
  • 0.2.18
    • Correct split_aligned_for<T> to use the trait bound.
  • 0.2.17
    • Add split_aligned_for<T> function that splits a byte slice into head and tail slices and a main slice that is a well aligned block of type &[T]. Where T is a pod type like for example u64.
    • Add Stride, StrideMut that moved here from itertools
    • Add mend_slices iterator extension that moved here from itertools
  • 0.2.16
    • Add fix function that makes it much easier to use the Fix combinator. Type inference works much better for the closure this way.
  • 0.2.15
    • Add std::slice::shared_prefix to efficiently compute the shared prefix of two byte slices
    • Add str extension methods .char_chunks(n) and char_windows(n) that are iterators that do the char-wise equivalent of slice's chunks and windows iterators.
  • 0.2.14
    • Fix get_slice to check start <= end as well.
  • 0.2.13
    • Add extension trait StrSlice with method get_slice that is a slicing method that returns an optional slice.
  • 0.2.12
    • Add default feature "std". odds uses no_std if you opt out of this feature.
  • 0.2.11
    • Add type parameter to IndexRange (that defaults to usize, so that it's non-breaking).
    • Drop dep on unreachable (provided in a simpler implementation locally).
  • 0.2.10
    • Fix feature flags when using cargo feature unstable
  • 0.2.9
    • Add slice_unchecked_mut
    • Add ref_slice, ref_slice_mut
  • 0.2.8
    • Add VecExt::retain_mut
  • 0.2.7
    • inline(always) on debug_assert_unreachable
  • 0.2.6
    • Add lifetime bounds for Fix for well-formedness (Rust RFC 1214)
    • Add StrExt::is_acceptable_index
  • 0.2.5
    • Add StringExt::insert_str and VecExt::splice
  • 0.2.4
    • Add odds::string::StrExt, extensions to &str.
  • 0.2.3
    • Add default for Fix so that Fix<T> == Fix<T, T>
  • 0.2.2
    • Add ptr_eq, ref_eq
  • 0.2.1
    • Add slice_unchecked
  • 0.2.0
    • Removed Void, see void crate instead.

License

Dual-licensed to be compatible with the Rust project.

Licensed under the Apache License, Version 2.0 http://www.apache.org/licenses/LICENSE-2.0 or the MIT license http://opensource.org/licenses/MIT, at your option. This file may not be copied, modified, or distributed except according to those terms.

Dependencies

~36KB