pub mod distributed_iterator;
use std::pin::Pin;
use distributed_iterator::DistributedIterator;
pub mod local_iterator;
use local_iterator::LocalIterator;
pub mod one_sided_iterator;
use one_sided_iterator::OneSidedIterator;
pub mod consumer;
use crate::memregion::Dist;
use futures_util::Future;
pub(crate) type IterLockFuture = Pin<Box<dyn Future<Output = ()> + Send>>;
pub(crate) mod private {
use super::IterLockFuture;
#[derive(Debug, Clone, Copy)]
pub struct Sealed;
pub trait InnerIter: Sized {
fn lock_if_needed(&self, _s: Sealed) -> Option<IterLockFuture>;
fn iter_clone(&self, _s: Sealed) -> Self;
}
}
#[derive(Debug, Clone)]
pub enum Schedule {
Static,
Dynamic,
Chunk(usize),
Guided,
WorkStealing,
}
pub trait LamellarArrayIterators<T: Dist> {
type DistIter: DistributedIterator;
type LocalIter: LocalIterator;
type OnesidedIter: OneSidedIterator;
#[doc(alias = "Collective")]
fn dist_iter(&self) -> Self::DistIter;
#[doc(alias("One-sided", "onesided"))]
fn local_iter(&self) -> Self::LocalIter;
#[doc(alias("One-sided", "onesided"))]
fn onesided_iter(&self) -> Self::OnesidedIter;
#[doc(alias("One-sided", "onesided"))]
fn buffered_onesided_iter(&self, buf_size: usize) -> Self::OnesidedIter;
}
pub trait LamellarArrayMutIterators<T: Dist> {
type DistIter: DistributedIterator;
type LocalIter: LocalIterator;
#[doc(alias = "Collective")]
fn dist_iter_mut(&self) -> Self::DistIter;
#[doc(alias("One-sided", "onesided"))]
fn local_iter_mut(&self) -> Self::LocalIter;
}