pub use libc::{c_long, c_float, c_int};
use std::ops::{Add, Sub, Mul, Div};
use std::cmp::Ordering;
use traits::Wrappable;
use csfml_system_sys as ffi;
#[derive(Copy, Clone)]
pub struct Time {
time: ffi::sfTime
}
impl Time {
pub fn with_seconds(seconds: f32) -> Time {
Time {
time: unsafe { ffi::sfSeconds(seconds as c_float) }
}
}
pub fn with_milliseconds(milliseconds: i32) -> Time {
Time {
time: unsafe { ffi::sfMilliseconds(milliseconds as c_int) }
}
}
pub fn with_microseconds(microseconds: i64) -> Time {
Time {
time: unsafe { ffi::sfMicroseconds(microseconds) }
}
}
pub fn as_seconds(&self) -> f32 {
unsafe {
ffi::sfTime_asSeconds(self.time)
}
}
pub fn as_milliseconds(&self) -> i32 {
unsafe {
ffi::sfTime_asMilliseconds(self.time)
}
}
pub fn as_microseconds(&self) -> i64 {
unsafe {
ffi::sfTime_asMicroseconds(self.time)
}
}
}
impl PartialEq for Time {
fn eq(&self, other: &Time) -> bool {
self.as_microseconds() == other.as_microseconds()
}
fn ne(&self, other: &Time) -> bool {
self.as_microseconds() != other.as_microseconds()
}
}
impl PartialOrd for Time {
fn partial_cmp(&self, other: &Time) -> Option<Ordering> {
self.as_microseconds().partial_cmp(&other.as_microseconds())
}
}
impl Add for Time {
type Output = Time;
fn add(self, other: Time) -> Time {
Time::with_microseconds(self.as_microseconds() + other.as_microseconds())
}
}
impl Sub for Time {
type Output = Time;
fn sub(self, other: Time) -> Time {
Time::with_microseconds(self.as_microseconds() - other.as_microseconds())
}
}
impl Mul for Time {
type Output = Time;
fn mul(self, other: Time) -> Time {
Time::with_microseconds(self.as_microseconds() * other.as_microseconds())
}
}
impl Div for Time {
type Output = Time;
fn div(self, other: Time) -> Time {
Time::with_microseconds(self.as_microseconds() / other.as_microseconds())
}
}
impl Wrappable<ffi::sfTime> for Time {
fn wrap(time: ffi::sfTime) -> Time {
Time {
time: time
}
}
fn unwrap(&self) -> ffi::sfTime {
self.time
}
}