Advertisement
Guest User

Untitled

a guest
Aug 18th, 2019
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.64 KB | None | 0 0
  1. fn translate_original(renderables: &mut Vec<f32>, tx: f32, ty: f32) {
  2. // This works
  3. let mut i = 0;
  4. while i < renderables.len() {
  5. translate_renderable(renderables, i, tx, ty);
  6. i = next_renderable(renderables, i);
  7. }
  8. }
  9.  
  10. fn translate_iterator(renderables: &mut Vec<f32>, tx: f32, ty: f32) {
  11. // This fails
  12. RenderableIterator::new(renderables)
  13. .for_each(|i| translate_renderable(renderables, i, tx, ty));
  14. }
  15.  
  16. fn main() {
  17. let mut data_1: Vec<f32> = vec![
  18. // renderable 1
  19. 2., 10., 10., 20., 20.,
  20. // renderable 2
  21. 3., 30., 30., 40., 40., 50., 50.
  22. ];
  23. let mut data_2 = data_1.clone();
  24. translate_original(&mut data_1, 5., 5.);
  25. translate_iterator(&mut data_2, 5., 5.);
  26. }
  27.  
  28. fn next_renderable(renderables: &Vec<f32>, i: usize) -> usize {
  29. i + 1 + (renderables[i] as usize)
  30. }
  31.  
  32. fn translate_renderable(renderables: &mut Vec<f32>, i: usize, tx: f32, ty: f32) {
  33. let from = i + 1;
  34. let to = next_renderable(renderables, i);
  35. for i in (from..to).step_by(2) {
  36. renderables[i] += tx;
  37. renderables[i + 1] += ty;
  38. }
  39. }
  40.  
  41. pub struct RenderableIterator<'a> {
  42. renderables: &'a Vec<f32>,
  43. i: usize,
  44. }
  45.  
  46. impl RenderableIterator<'_> {
  47. pub fn new(renderables: &Vec<f32>) -> RenderableIterator {
  48. RenderableIterator { renderables, i: 0 }
  49. }
  50. }
  51.  
  52. impl Iterator for RenderableIterator<'_> {
  53. type Item = usize;
  54.  
  55. fn next(&mut self) -> Option<usize> {
  56. if self.i < self.renderables.len() {
  57. let out = Some(self.i);
  58. self.i = next_renderable(&self.renderables, self.i);
  59. out
  60. } else {
  61. None
  62. }
  63. }
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement