Advertisement
Guest User

Untitled

a guest
Aug 21st, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.46 KB | None | 0 0
  1. #[derive(Debug)]
  2. struct Data {
  3. data: Vec<f64>,
  4. ptr: usize,
  5. }
  6.  
  7. impl Data {
  8. fn new(s: &[f64]) -> Data {
  9. Data {
  10. data: s.to_vec(),
  11. ptr: 0,
  12. }
  13. }
  14. }
  15.  
  16. impl Data {
  17. fn add(&self, arg: f64) -> Data {
  18. let mut v = self.data.clone();
  19.  
  20. for (i, x) in self.data.iter().enumerate() {
  21. v[i] = x + arg;
  22. }
  23.  
  24. Data {
  25. data: v,
  26. ptr: 0,
  27. }
  28. }
  29.  
  30. fn add_with_empty_vector(&self, arg:f64) -> Data {
  31. let mut v = vec![];
  32.  
  33. for x in &self.data {
  34. v.push(x.clone() + arg);
  35. }
  36.  
  37. Data {
  38. data: v,
  39. ptr: 0,
  40. }
  41. }
  42. }
  43.  
  44. impl Iterator for Data {
  45. type Item = f64;
  46.  
  47. fn next(&mut self) -> Option<Self::Item> {
  48. let rtn = if self.ptr < self.data.len() {
  49. Some(self.data[self.ptr])
  50. } else {
  51. None
  52. };
  53.  
  54. self.ptr += 1;
  55.  
  56. rtn
  57. }
  58. }
  59.  
  60. trait Add : std::fmt::Debug {
  61. fn add(&self) {
  62. println!("{:?}", self);
  63. }
  64. }
  65.  
  66. impl Add for Vec<f64> {
  67. }
  68.  
  69. impl Add for [f64] {
  70. fn add(&self) {
  71. println!("{:?} as a slice", self);
  72. }
  73. }
  74.  
  75. fn main() {
  76. let v = vec![1.0, 2.0, 3.0];
  77.  
  78. let data = Data::new(&v);
  79.  
  80. println!("{:?}", data.add(2.0));
  81. println!("{:?}", data.add(2.0).data);
  82.  
  83. println!("{:?}", data.add_with_empty_vector(3.0));
  84. println!("{:?}",
  85. data.add_with_empty_vector(3.0).data);
  86.  
  87. v.add();
  88.  
  89. &v[..].add();
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement