Guest User

Untitled

a guest
Jul 20th, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.22 KB | None | 0 0
  1. #[derive(Debug)]
  2. #[derive(Clone)]
  3. pub struct DataIn {
  4. v: Option<Vec<f32>>,
  5. default: f32,
  6. name: String
  7. }
  8.  
  9. impl DataIn {
  10. pub fn new(name: String, default: f32) -> DataIn {
  11. DataIn { name, v: None, default }
  12. }
  13.  
  14. pub fn get(&mut self) -> Vec<f32> {
  15. let v = self.v.take();
  16. v.unwrap_or(vec![self.default])
  17. }
  18.  
  19. pub fn set(&mut self, v: Vec<f32>) {
  20. self.v = Some(v);
  21. }
  22. }
  23.  
  24. pub trait MisoWorker {
  25. fn get_data(&self) -> Vec<DataIn>;
  26. fn extract(&mut self, vals: &[f32]) -> f32;
  27. }
  28.  
  29. pub struct MisoModule<T: MisoWorker> {
  30. data: Vec<DataIn>,
  31. worker: T
  32. }
  33.  
  34. impl <T: MisoWorker> MisoModule<T> {
  35. fn extract(&mut self, output: usize, len: usize) -> Vec<f32> {
  36. assert_eq!(output, 0);
  37. let mut val = Vec::with_capacity(len);
  38. let vecs = self.data.iter_mut().map(|d| d.get());
  39. let mut cycles = vecs.map(|item| item.into_iter().cycle()).collect::<Vec<_>>();
  40.  
  41. let mut inputs = Vec::with_capacity(cycles.len());
  42. for i in 0..len {
  43. inputs.clear();
  44. inputs.extend(cycles.iter_mut().map(|c| c.next().unwrap()));
  45. val.push(self.worker.extract(&inputs));
  46. }
  47. val
  48. }
  49. }
  50.  
  51. fn main() {
  52. return ();
  53. }
Add Comment
Please, Sign In to add comment