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