aboutsummaryrefslogtreecommitdiff
path: root/src/sys/windows/overlapped.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/sys/windows/overlapped.rs')
-rw-r--r--src/sys/windows/overlapped.rs37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/sys/windows/overlapped.rs b/src/sys/windows/overlapped.rs
new file mode 100644
index 0000000..3708f9e
--- /dev/null
+++ b/src/sys/windows/overlapped.rs
@@ -0,0 +1,37 @@
+use crate::sys::windows::Event;
+
+use std::cell::UnsafeCell;
+use std::fmt;
+
+use winapi::um::minwinbase::OVERLAPPED_ENTRY;
+#[cfg(feature = "os-util")]
+use winapi::um::minwinbase::OVERLAPPED;
+
+#[repr(C)]
+pub(crate) struct Overlapped {
+ inner: UnsafeCell<miow::Overlapped>,
+ pub(crate) callback: fn(&OVERLAPPED_ENTRY, Option<&mut Vec<Event>>),
+}
+
+#[cfg(feature = "os-util")]
+impl Overlapped {
+ pub(crate) fn new(cb: fn(&OVERLAPPED_ENTRY, Option<&mut Vec<Event>>)) -> Overlapped {
+ Overlapped {
+ inner: UnsafeCell::new(miow::Overlapped::zero()),
+ callback: cb,
+ }
+ }
+
+ pub(crate) fn as_ptr(&self) -> *const OVERLAPPED {
+ unsafe { (*self.inner.get()).raw() }
+ }
+}
+
+impl fmt::Debug for Overlapped {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ f.debug_struct("Overlapped").finish()
+ }
+}
+
+unsafe impl Send for Overlapped {}
+unsafe impl Sync for Overlapped {}