dataflow 0.4.0

Dataflow is a data processing library, primarily for machine learning.
Documentation
use crate::pipeline::Node;
use std::{cmp::Ordering, marker::PhantomData};

pub struct Sort<T, F: Fn(&T, &T) -> Ordering> {
    _phantom: PhantomData<T>,
    sort_fn: F,
}

impl<T, F: Clone + Fn(&T, &T) -> Ordering> Clone for Sort<T, F> {
    fn clone(&self) -> Self {
        Self {
            _phantom: self._phantom,
            sort_fn: self.sort_fn.clone(),
        }
    }
}

impl<T, F: Fn(&T, &T) -> Ordering> Sort<T, F> {
    pub fn new(sort_fn: F) -> Self {
        Sort {
            _phantom: PhantomData::default(),
            sort_fn,
        }
    }
}

impl<T, F: Fn(&T, &T) -> Ordering> Node<Vec<T>> for Sort<T, F> {
    type Output = Vec<T>;

    fn process(&mut self, mut input: Vec<T>) -> Self::Output {
        input.sort_by(&self.sort_fn);
        input
    }
}