1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
use std::fmt; use crate::sys; use crate::{Token, Ready}; pub struct Events { pub inner: sys::Events } impl Events { #[inline] pub fn with_capacity(size: usize) -> Events { Events { inner: sys::Events::with_capacity(size) } } #[inline] pub fn get(&self, idx: usize) -> Option<Event> { self.inner.get(idx) } #[inline] pub fn len(&self) -> usize { self.inner.len() } #[inline] pub fn capacity(&self) -> usize { self.inner.capacity() } #[inline] pub fn is_empty(&self) -> bool { self.inner.is_empty() } pub fn iter(&self) -> Iter { Iter { inner: self, pos: 0 } } } impl fmt::Debug for Events { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { f.debug_struct("Events") .field("len", &self.len()) .field("capacity", &self.capacity()) .finish() } } #[derive(Copy, Clone, Eq, PartialEq, Debug)] pub struct Event { kind: Ready, token: Token } impl Event { #[inline] pub fn new(readiness: Ready, token: Token) -> Event { Event { kind: readiness, token } } #[inline] pub fn readiness(&self) -> Ready { self.kind } #[inline] pub fn token(&self) -> Token { self.token } } #[derive(Debug, Clone)] pub struct Iter<'a> { inner: &'a Events, pos: usize, } impl<'a> Iterator for Iter<'a> { type Item = Event; fn next(&mut self) -> Option<Event> { let ret = self.inner.get(self.pos); self.pos += 1; ret } } impl<'a> IntoIterator for &'a Events { type Item = Event; type IntoIter = Iter<'a>; fn into_iter(self) -> Self::IntoIter { self.iter() } } #[derive(Debug)] pub struct IntoIter { inner: Events, pos: usize } impl Iterator for IntoIter { type Item = Event; fn next(&mut self) -> Option<Event> { let ret = self.inner.get(self.pos); self.pos += 1; ret } } impl IntoIterator for Events { type Item = Event; type IntoIter = IntoIter; fn into_iter(self) -> self::IntoIter { IntoIter { inner: self, pos: 0 } } }