You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
1.2 KiB
Rust

use libc::c_int;
#[link(name = "elevator1")]
extern {
pub fn elevator1_poll_floor_request() -> c_int;
}
#[link(name = "elevator2")]
extern {
pub fn elevator2_poll_floor_request() -> c_int;
}
#[link(name = "elevator3")]
extern {
pub fn elevator3_poll_floor_request() -> c_int;
}
pub trait ElevatorDriver
{
fn poll_floor_request(&self) -> Option<u64>;
}
pub struct ElevatorDriver1;
impl ElevatorDriver for ElevatorDriver1
{
fn poll_floor_request(&self) -> Option<u64>
{
unsafe {
let req = elevator1_poll_floor_request();
if req > 0 {
Some(req as u64)
} else {
None
}
}
}
}
pub struct ElevatorDriver2;
impl ElevatorDriver for ElevatorDriver2
{
fn poll_floor_request(&self) -> Option<u64>
{
unsafe {
let req = elevator2_poll_floor_request();
if req > 0 {
Some(req as u64)
} else {
None
}
}
}
}
pub struct ElevatorDriver3;
impl ElevatorDriver for ElevatorDriver3
{
fn poll_floor_request(&self) -> Option<u64>
{
unsafe {
let req = elevator3_poll_floor_request();
if req > 0 {
Some(req as u64)
} else {
None
}
}
}
}