From 8a4d2fb922c2c5a9e900b4b836d7787a09a1fe90 Mon Sep 17 00:00:00 2001 From: Adam Carpenter <53hornet@gmail.com> Date: Wed, 13 Mar 2019 10:02:15 -0400 Subject: Added concurrency, pointers, oop --- oop/Cargo.toml | 7 +++++++ oop/src/lib.rs | 41 +++++++++++++++++++++++++++++++++++++++++ oop/src/main.rs | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 104 insertions(+) create mode 100644 oop/Cargo.toml create mode 100644 oop/src/lib.rs create mode 100644 oop/src/main.rs (limited to 'oop') diff --git a/oop/Cargo.toml b/oop/Cargo.toml new file mode 100644 index 0000000..28311ff --- /dev/null +++ b/oop/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "oop" +version = "0.1.0" +authors = ["Adam Carpenter <53hornet@gmail.com>"] +edition = "2018" + +[dependencies] 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>, +} + +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, +} + +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, + average: f64, +} + +impl AveragedCollection { + pub fn add(&mut self, value: i32) { + self.list.push(value); + self.update_average(); + } + + pub fn remove(&mut self) -> Option { + 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(); +} -- cgit v1.2.3