use objc2::rc::Retained;
use objc2::Message;
use crate::{iter, NSEnumerator};
impl<ObjectType: Message> NSEnumerator<ObjectType> {
#[inline]
pub fn iter(&self) -> Iter<'_, ObjectType> {
Iter(iter::Iter::new(self))
}
#[inline]
pub unsafe fn iter_unchecked(&self) -> IterUnchecked<'_, ObjectType> {
IterUnchecked(iter::IterUnchecked::new(self))
}
}
unsafe impl<ObjectType: Message> iter::FastEnumerationHelper for NSEnumerator<ObjectType> {
type Item = ObjectType;
#[inline]
fn maybe_len(&self) -> Option<usize> {
None
}
}
#[derive(Debug)]
pub struct Iter<'a, ObjectType: Message>(iter::Iter<'a, NSEnumerator<ObjectType>>);
__impl_iter! {
impl<'a, ObjectType: Message> Iterator<Item = Retained<ObjectType>> for Iter<'a, ObjectType> { ... }
}
#[derive(Debug)]
pub struct IterUnchecked<'a, ObjectType: Message + 'a>(
iter::IterUnchecked<'a, NSEnumerator<ObjectType>>,
);
__impl_iter! {
impl<'a, ObjectType: Message> Iterator<Item = &'a ObjectType> for IterUnchecked<'a, ObjectType> { ... }
}
#[derive(Debug)]
pub struct IntoIter<ObjectType: Message>(iter::IntoIter<NSEnumerator<ObjectType>>);
__impl_iter! {
impl<ObjectType: Message> Iterator<Item = Retained<ObjectType>> for IntoIter<ObjectType> { ... }
}
__impl_into_iter! {
impl<ObjectType: Message> IntoIterator for &NSEnumerator<ObjectType> {
type IntoIter = Iter<'_, ObjectType>;
}
impl<ObjectType: Message> IntoIterator for Retained<NSEnumerator<ObjectType>> {
#[uses(new)]
type IntoIter = IntoIter<ObjectType>;
}
}