Move CFRunLoopSource method to runloop.rs

This commit is contained in:
Linus Färnstrand
2018-01-21 16:32:35 +01:00
parent 8834563793
commit 3aa97e2abe
2 changed files with 24 additions and 15 deletions
+17 -15
View File
@@ -3,7 +3,8 @@ pub use core_foundation_sys::filedescriptor::*;
use core_foundation_sys::base::{Boolean, CFIndex, CFRelease};
use core_foundation_sys::base::{kCFAllocatorDefault, CFOptionFlags};
use base::{TCFType};
use base::TCFType;
use runloop::CFRunLoopSource;
use std::mem;
use std::os::unix::io::{AsRawFd, RawFd};
@@ -72,6 +73,21 @@ impl CFFileDescriptor {
CFFileDescriptorInvalidate(self.0)
}
}
pub fn to_run_loop_source(&self, order: CFIndex) -> Option<CFRunLoopSource> {
unsafe {
let source_ref = CFFileDescriptorCreateRunLoopSource(
kCFAllocatorDefault,
self.0,
order
);
if source_ref.is_null() {
None
} else {
Some(TCFType::wrap_under_create_rule(source_ref))
}
}
}
}
impl AsRawFd for CFFileDescriptor {
@@ -82,20 +98,6 @@ impl AsRawFd for CFFileDescriptor {
}
}
use runloop::{CFRunLoopSource};
impl CFRunLoopSource {
pub fn from_file_descriptor(fd: &CFFileDescriptor, order: CFIndex) -> Option<CFRunLoopSource> {
unsafe {
let source_ref = CFFileDescriptorCreateRunLoopSource(kCFAllocatorDefault, fd.0, order);
if source_ref.is_null() {
None
} else {
Some(TCFType::wrap_under_create_rule(source_ref))
}
}
}
}
#[cfg(test)]
mod test {
+7
View File
@@ -16,6 +16,7 @@ use core_foundation_sys::string::CFStringRef;
use base::{TCFType};
use date::{CFAbsoluteTime, CFTimeInterval};
use filedescriptor::CFFileDescriptor;
use string::{CFString};
pub type CFRunLoopMode = CFStringRef;
@@ -137,6 +138,12 @@ impl CFRunLoopTimer {
declare_TCFType!(CFRunLoopSource, CFRunLoopSourceRef);
impl_TCFType!(CFRunLoopSource, CFRunLoopSourceRef, CFRunLoopSourceGetTypeID);
impl CFRunLoopSource {
pub fn from_file_descriptor(fd: &CFFileDescriptor, order: CFIndex) -> Option<CFRunLoopSource> {
fd.to_run_loop_source(order)
}
}
declare_TCFType!(CFRunLoopObserver, CFRunLoopObserverRef);
impl_TCFType!(CFRunLoopObserver, CFRunLoopObserverRef, CFRunLoopObserverGetTypeID);