array-ops 0.1.0

Automatic method implementations for array data types
Documentation
  • Coverage
  • 100%
    27 out of 27 items documented1 out of 1 items with examples
  • Size
  • Source code size: 44.03 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 1.99 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 10s Average build duration of successful builds.
  • all releases: 10s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • Documentation
  • bodil/array-ops
    7 1 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • bodil

array-ops

Ready made default method implementations for array data types.

Overview

This crate provides a number of traits with default implementations for most of the standard library's methods on array like data structures. All you need to do to apply them to your own array like data structure is to implement HasLength and Index<usize> (and IndexMut<usize> for mutable operations), which means you need a len() method and an index() method, and the Array trait will provide default methods for everything else, implemented using just those two methods.

Documentation

Example

# use array_ops::*;
# use std::ops::{Index, IndexMut};
#[derive(PartialEq, Eq, Debug)]
struct MyNewtypedVec<A>(Vec<A>);

impl<A> From<Vec<A>> for MyNewtypedVec<A> {
    fn from(vec: Vec<A>) -> Self {
        Self(vec)
    }
}

impl<A> HasLength for MyNewtypedVec<A> {
    fn len(&self) -> usize {
        self.0.len()
    }
}

impl<A> Index<usize> for MyNewtypedVec<A> {
    type Output = A;
    fn index(&self, index: usize) -> &A {
        self.0.index(index)
    }
}

impl<A> IndexMut<usize> for MyNewtypedVec<A> {
    fn index_mut(&mut self, index: usize) -> &mut A {
        self.0.index_mut(index)
    }
}

impl<A> Array for MyNewtypedVec<A> {}
impl<A> ArrayMut for MyNewtypedVec<A> {}

# fn main() {
let mut my_vec = MyNewtypedVec::from(vec![3, 1, 3, 3, 7]);
assert!(my_vec.starts_with(&[3, 1, 3]));
my_vec.sort_unstable();
let expected = MyNewtypedVec::from(vec![1, 3, 3, 3, 7]);
assert_eq!(expected, my_vec);
# }

Licence

Copyright 2020 Bodil Stokke

This software is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.

Code of Conduct

Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.