trip planning module
parent
b4796c1566
commit
138a425909
@ -0,0 +1,57 @@
|
||||
use elevator_drivers::{ElevatorDriver, ElevatorDriver1, ElevatorDriver2, ElevatorDriver3};
|
||||
use motor_controllers::{MotorInput, MotorController, newMotorController1, newMotorController2, newMotorController3};
|
||||
|
||||
pub trait Building
|
||||
{
|
||||
fn get_elevator_driver(&self) -> Box<ElevatorDriver>;
|
||||
fn get_motor_controller(&self) -> Box<MotorController>;
|
||||
fn get_floor_heights(&self) -> Vec<f64>;
|
||||
}
|
||||
|
||||
struct Building1;
|
||||
impl Building for Building1 {
|
||||
fn get_elevator_driver(&self) -> Box<ElevatorDriver>
|
||||
{
|
||||
Box::new(ElevatorDriver1)
|
||||
}
|
||||
fn get_motor_controller(&self) -> Box<MotorController>
|
||||
{
|
||||
newMotorController1()
|
||||
}
|
||||
fn get_floor_heights(&self) -> Vec<f64>
|
||||
{
|
||||
vec![8.0, 4.0, 4.0, 4.0, 4.0]
|
||||
}
|
||||
}
|
||||
|
||||
struct Building2;
|
||||
impl Building for Building2 {
|
||||
fn get_elevator_driver(&self) -> Box<ElevatorDriver>
|
||||
{
|
||||
Box::new(ElevatorDriver2)
|
||||
}
|
||||
fn get_motor_controller(&self) -> Box<MotorController>
|
||||
{
|
||||
newMotorController2()
|
||||
}
|
||||
fn get_floor_heights(&self) -> Vec<f64>
|
||||
{
|
||||
vec![5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0]
|
||||
}
|
||||
}
|
||||
|
||||
struct Building3;
|
||||
impl Building for Building3 {
|
||||
fn get_elevator_driver(&self) -> Box<ElevatorDriver>
|
||||
{
|
||||
Box::new(ElevatorDriver3)
|
||||
}
|
||||
fn get_motor_controller(&self) -> Box<MotorController>
|
||||
{
|
||||
newMotorController3()
|
||||
}
|
||||
fn get_floor_heights(&self) -> Vec<f64>
|
||||
{
|
||||
vec![6.0, 4.0, 4.0, 4.0]
|
||||
}
|
||||
}
|
@ -0,0 +1,35 @@
|
||||
|
||||
pub struct FloorRequests
|
||||
{
|
||||
requests: Vec<u64>
|
||||
}
|
||||
|
||||
pub trait RequestQueue
|
||||
{
|
||||
fn add_request(&mut self, req: u64);
|
||||
fn add_requests(&mut self, reqs: Vec<u64>);
|
||||
fn pop_request(&mut self) -> Option<u64>;
|
||||
}
|
||||
|
||||
impl RequestQueue for FloorRequests
|
||||
{
|
||||
fn add_request(&mut self, req: u64)
|
||||
{
|
||||
self.requests.push(req);
|
||||
}
|
||||
fn add_requests(&mut self, reqs: Vec<u64>)
|
||||
{
|
||||
for req in reqs
|
||||
{
|
||||
self.requests.push(req);
|
||||
}
|
||||
}
|
||||
fn pop_request(&mut self) -> Option<u64>
|
||||
{
|
||||
if self.requests.len()>0 {
|
||||
Some(self.requests.remove(0))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue