diff options
author | Adam Carpenter <53hornet@gmail.com> | 2019-03-13 10:02:15 -0400 |
---|---|---|
committer | Adam Carpenter <53hornet@gmail.com> | 2019-03-13 10:02:15 -0400 |
commit | 8a4d2fb922c2c5a9e900b4b836d7787a09a1fe90 (patch) | |
tree | afb760597bf4cc78194892be910febde0209f7f3 /oop/src | |
parent | b71e253b697bae079a0cf2526209334f4b81f9a5 (diff) | |
download | learning-rust-8a4d2fb922c2c5a9e900b4b836d7787a09a1fe90.tar.xz learning-rust-8a4d2fb922c2c5a9e900b4b836d7787a09a1fe90.zip |
Added concurrency, pointers, oop
Diffstat (limited to 'oop/src')
-rw-r--r-- | oop/src/lib.rs | 41 | ||||
-rw-r--r-- | oop/src/main.rs | 56 |
2 files changed, 97 insertions, 0 deletions
diff --git a/oop/src/lib.rs b/oop/src/lib.rs new file mode 100644 index 0000000..91ef2e8 --- /dev/null +++ b/oop/src/lib.rs @@ -0,0 +1,41 @@ +pub trait Draw { + fn draw(&self); +} + +pub struct Screen { + pub components: Vec<Box<dyn Draw>>, +} + +impl Screen { + pub fn run(&self) { + for component in self.components.iter() { + component.draw(); + } + } +} + +pub struct Button { + pub width: u32, + pub height: u32, + pub label: String, +} + +impl Draw for Button { + fn draw(&self) { + dbg!("drew button"); + } +} + +pub struct SelectBox { + pub width: u32, + pub height: u32, + pub options: Vec<String>, +} + +impl Draw for SelectBox { + fn draw(&self) { + dbg!("drew select box"); + } +} + + diff --git a/oop/src/main.rs b/oop/src/main.rs new file mode 100644 index 0000000..e92c07c --- /dev/null +++ b/oop/src/main.rs @@ -0,0 +1,56 @@ +use oop::{Screen, Button, SelectBox}; + +pub struct AveragedCollection { + list: Vec<i32>, + average: f64, +} + +impl AveragedCollection { + pub fn add(&mut self, value: i32) { + self.list.push(value); + self.update_average(); + } + + pub fn remove(&mut self) -> Option<i32> { + let result = self.list.pop(); + match result { + Some(value) => { + self.update_average(); + Some(value) + }, + None => None, + } + } + + pub fn average(&self) -> f64 { + self.average + } + + fn update_average(&mut self) { + let total: i32 = self.list.iter().sum(); + self.average = total as f64 / self.list.len() as f64; + } +} + +fn main() { + let screen = Screen { + components: vec![ + Box::new(SelectBox { + width: 75, + height: 10, + options: vec![ + String::from("Yes"), + String::from("Maybe"), + String::from("No") + ], + }), + Box::new(Button { + width: 50, + height: 10, + label: String::from("OK"), + }), + ], + }; + + screen.run(); +} |