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
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
|
|
}
|
|
}
|
|
}
|
|
}
|