Guest User

Untitled

a guest
May 24th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.04 KB | None | 0 0
  1. trait MyTrait {
  2. fn render(&self);
  3. fn change(&mut self, pos: f32);
  4. }
  5.  
  6. struct Object {
  7. pos: f32
  8. }
  9.  
  10. impl Object {
  11. pub fn new() -> Object {
  12. Object{ pos: 0. }
  13. }
  14. }
  15.  
  16. impl MyTrait for Object {
  17. fn render(&self) {
  18. println!("Func render from trait... ({})", self.pos);
  19. }
  20. fn change(&mut self, pos: f32) {
  21. self.pos = pos;
  22. }
  23. }
  24.  
  25. struct Scene<T: MyTrait> {
  26. list: Vec<Box<T>>
  27. }
  28.  
  29. impl<T: MyTrait> Scene<T> {
  30. pub fn new() -> Scene<T> {
  31. Scene{ list: vec![] }
  32. }
  33.  
  34. pub fn add(&mut self, object: T) {
  35. let obj = Box::new(object);
  36. self.list.push(obj);
  37. }
  38.  
  39. pub fn render_all(&self) {
  40. for obj in &self.list {
  41. obj.render();
  42. }
  43. }
  44.  
  45. pub fn get_mut(&mut self) -> &mut Box<T> {
  46. unsafe { self.list.get_unchecked_mut(0) }
  47. }
  48. }
  49.  
  50. fn main() {
  51. let mut scene = Scene::new();
  52. let object = Object::new();
  53. scene.add(object);
  54. scene.render_all();
  55. scene.get_mut().change(42.);
  56. scene.render_all();
  57. println!("End...");
  58. }
Add Comment
Please, Sign In to add comment