Skip to content

Commit cfcc1f1

Browse files
committed
Fixes
1 parent 2fb16b4 commit cfcc1f1

File tree

7 files changed

+95
-84
lines changed

7 files changed

+95
-84
lines changed

Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,3 +108,6 @@ required-features = []
108108
[[example]]
109109
name = "schedule"
110110
required-features = ["scheduler", "std"]
111+
112+
[package.metadata.docs.rs]
113+
all-features = true

README.md

Lines changed: 71 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ In multi-server or p2p architecture [`IdRangeAllocator`] would need to communica
8383
### Ergonomic entity types
8484

8585
Using ECS may lead to lots of `.unwrap()` calls or excessive error handling.
86-
There a lot of situations when entity is guaranteed to exist (for example it just returned from a view).
86+
There are lots of situations when entity is guaranteed to exist (for example it just returned from a view).
8787
To avoid handling [`NoSuchEntity`] error when it is unreachable, Edict provides [`AliveEntity`] trait that extends [`Entity`] trait.
8888
Various methods require [`AliveEntity`] handle and skip existence check.
8989

@@ -92,15 +92,15 @@ Various methods require [`AliveEntity`] handle and skip existence check.
9292
[`EntityId`] implements only [`Entity`] as it doesn't provide any guaranties.
9393

9494
[`EntityBound`] is guaranteed to be alive, allowing using it in methods that doesn't handle entity absence.
95-
It keeps lifetime of [`World`] borrow, making it impossible to despawn any entity from the world.
96-
Using it with wrong [`World`] may cause panic.
97-
[`EntityBound`] can be acquire from relation queries.
95+
It keeps lifetime of a [`World`] borrow, making it impossible to despawn any entity from the world.
96+
*Using it with wrong [`World`] may cause panic*.
97+
[`EntityBound`] can be acquired from relation queries.
9898

99-
[`EntityLoc`] not only guarantees entity existence but also contains location of the entity in the archetypes,
100-
allowing to skip lookup step when accessing its components.
101-
Similarly to [`EntityBound`], it keeps lifetime of [`World`] borrow, making it impossible to despawn any entity from the world.
102-
Using it with wrong [`World`] may cause panic.
103-
[`EntityLoc`] can be acquire from [`Entities`] query.
99+
[`EntityLoc`] not only guarantees entity existence, but also contains location of the entity in the archetypes,
100+
allowing functions to skip lookup step when accessing entity's components.
101+
Similarly to [`EntityBound`], it keeps lifetime of a [`World`] borrow, making it impossible to despawn any entity from the world.
102+
*Using it with wrong [`World`] may cause panic*.
103+
[`EntityLoc`] can be acquired from [`Entities`] query.
104104

105105
[`EntityRef`] is special.
106106
It doesn't implement [`Entity`] or [`AliveEntity`] traits since it should not be used in world methods.
@@ -299,75 +299,79 @@ If "std" feature is not enabled error types will not implement [`std::error::Err
299299
When "flow" feature is enabled and "std" is not, extern functions are used to implement TLS.
300300
Application must provide implementation for these functions or linking will fail.
301301

302-
When "scheduler" feature is enabled and "std" is not, external functions are used to implement thread parking.
303-
Application must provide implementation for these functions or linking will fail.
302+
"scheduler" feature enables [`Scheduler`] type.
303+
"threaded-scheduler" feature enables multithreaded execution for [`Scheduler`], using [`Scheduler::run_with`] and [`Scheduler::run_threaded`].
304+
"rayon-scheduler" feature enables also rayon based execution for [`Scheduler`] using [`Scheduler::run_rayon`].
304305

305306
[`!Send`]: https://doc.rust-lang.org/std/marker/trait.Send.html
306307
[`!Sized`]: https://doc.rust-lang.org/std/marker/trait.Sized.html
307308
[`!Sync`]: https://doc.rust-lang.org/std/marker/trait.Sync.html
308-
[`ActionEncoder`]: https://docs.rs/edict/1.0.0-rc4/edict/action/struct.ActionEncoder.html
309-
[`AliveEntity`]: https://docs.rs/edict/1.0.0-rc4/edict/entity/trait.AliveEntity.html
310-
[`BorrowAll`]: https://docs.rs/edict/1.0.0-rc4/edict/query/struct.BorrowAll.html
311-
[`BorrowAny`]: https://docs.rs/edict/1.0.0-rc4/edict/query/struct.BorrowAny.html
312-
[`BorrowOne`]: https://docs.rs/edict/1.0.0-rc4/edict/query/struct.BorrowOne.html
313-
[`Component`]: https://docs.rs/edict/1.0.0-rc4/edict/component/trait.Component.html
314-
[`Component::on_drop`]: https://docs.rs/edict/1.0.0-rc4/edict/component/trait.Component.html#method.on_drop
315-
[`Component::on_replace`]: https://docs.rs/edict/1.0.0-rc4/edict/component/trait.Component.html#method.on_replace
309+
[`ActionEncoder`]: https://docs.rs/edict/1.0.0-rc6/edict/action/struct.ActionEncoder.html
310+
[`AliveEntity`]: https://docs.rs/edict/1.0.0-rc6/edict/entity/trait.AliveEntity.html
311+
[`BorrowAll`]: https://docs.rs/edict/1.0.0-rc6/edict/query/struct.BorrowAll.html
312+
[`BorrowAny`]: https://docs.rs/edict/1.0.0-rc6/edict/query/struct.BorrowAny.html
313+
[`BorrowOne`]: https://docs.rs/edict/1.0.0-rc6/edict/query/struct.BorrowOne.html
314+
[`Component`]: https://docs.rs/edict/1.0.0-rc6/edict/component/trait.Component.html
315+
[`Component::on_drop`]: https://docs.rs/edict/1.0.0-rc6/edict/component/trait.Component.html#method.on_drop
316+
[`Component::on_replace`]: https://docs.rs/edict/1.0.0-rc6/edict/component/trait.Component.html#method.on_replace
316317
[`Context`]: https://doc.rust-lang.org/std/task/struct.Context.html
317-
[`Entities`]: https://docs.rs/edict/1.0.0-rc4/edict/query/struct.Entities.html
318-
[`Entity`]: https://docs.rs/edict/1.0.0-rc4/edict/entity/trait.Entity.html
319-
[`EntityBound`]: https://docs.rs/edict/1.0.0-rc4/edict/entity/trait.EntityBound.html
320-
[`EntityId`]: https://docs.rs/edict/1.0.0-rc4/edict/entity/struct.EntityId.html
321-
[`EntityLoc`]: https://docs.rs/edict/1.0.0-rc4/edict/entity/struct.EntityLoc.html
322-
[`EntityRef`]: https://docs.rs/edict/1.0.0-rc4/edict/entity/struct.EntityRef.html
323-
[`EntityRef::spawn_flow`]: https://docs.rs/edict/1.0.0-rc4/edict/entity/struct.EntityRef.html#method.spawn_flow
324-
[`flow`]: https://docs.rs/edict/1.0.0-rc4/edict/flow/index.html
325-
[`FlowEntity`]: https://docs.rs/edict/1.0.0-rc4/edict/flow/struct.FlowEntity.html
326-
[`FlowEntity::spawn_flow`]: https://docs.rs/edict/1.0.0-rc4/edict/flow/struct.FlowEntity.html#method.spawn_flow
327-
[`FlowEntity::wait_despawned`]: https://docs.rs/edict/1.0.0-rc4/edict/flow/struct.FlowEntity.html#method.wait_despawned
328-
[`FlowEntity::wait_has_component`]: https://docs.rs/edict/1.0.0-rc4/edict/flow/struct.FlowEntity.html#method.wait_has_component
329-
[`Flows`]: https://docs.rs/edict/1.0.0-rc4/edict/flow/struct.Flows.html
330-
[`Flows::execute`]: https://docs.rs/edict/1.0.0-rc4/edict/flow/struct.Flows.html#method.execute
331-
[`FlowWorld`]: https://docs.rs/edict/1.0.0-rc4/edict/flow/struct.FlowWorld.html
332-
[`FlowWorld::spawn_flow`]: https://docs.rs/edict/1.0.0-rc4/edict/flow/struct.FlowWorld.html#method.spawn_flow
333-
[`FlowWorld::spawn_flow_for`]: https://docs.rs/edict/1.0.0-rc4/edict/flow/struct.FlowWorld.html#method.spawn_flow_for
334-
[`FnArg`]: https://docs.rs/edict/1.0.0-rc4/edict/system/trait.FnArg.html
335-
[`IdRange`]: https://docs.rs/edict/1.0.0-rc4/edict/entity/struct.IdRange.html
336-
[`IdRangeAllocator`]: https://docs.rs/edict/1.0.0-rc4/edict/entity/trait.IdRangeAllocator.html
337-
[`IntoSystem`]: https://docs.rs/edict/1.0.0-rc4/edict/system/trait.IntoSystem.html
338-
[`LocalActionEncoder`]: https://docs.rs/edict/1.0.0-rc4/edict/action/struct.LocalActionEncoder.html
339-
[`Modified`]: https://docs.rs/edict/1.0.0-rc4/edict/query/struct.Modified.html
340-
[`NoSuchEntity`]: https://docs.rs/edict/1.0.0-rc4/edict/struct.NoSuchEntity.html
341-
[`Query`]: https://docs.rs/edict/1.0.0-rc4/edict/query/trait.Query.html
342-
[`Relation`]: https://docs.rs/edict/1.0.0-rc4/edict/relation/trait.Relation.html
343-
[`Res`]: https://docs.rs/edict/1.0.0-rc4/edict/resources/struct.Res.html
344-
[`ResMut`]: https://docs.rs/edict/1.0.0-rc4/edict/resources/struct.ResMut.html
345-
[`ResLocal`]: https://docs.rs/edict/1.0.0-rc4/edict/system/struct.ResLocal.html
346-
[`ResMutLocal`]: https://docs.rs/edict/1.0.0-rc4/edict/system/struct.ResMutLocal.html
347-
[`Scheduler`]: https://docs.rs/edict/1.0.0-rc4/edict/scheduler/struct.Scheduler.html
348-
[`ScopedExecutor`]: https://docs.rs/edict/1.0.0-rc4/edict/executor/trait.ScopedExecutor.html
318+
[`Entities`]: https://docs.rs/edict/1.0.0-rc6/edict/query/struct.Entities.html
319+
[`Entity`]: https://docs.rs/edict/1.0.0-rc6/edict/entity/trait.Entity.html
320+
[`EntityBound`]: https://docs.rs/edict/1.0.0-rc6/edict/entity/trait.EntityBound.html
321+
[`EntityId`]: https://docs.rs/edict/1.0.0-rc6/edict/entity/struct.EntityId.html
322+
[`EntityLoc`]: https://docs.rs/edict/1.0.0-rc6/edict/entity/struct.EntityLoc.html
323+
[`EntityRef`]: https://docs.rs/edict/1.0.0-rc6/edict/entity/struct.EntityRef.html
324+
[`EntityRef::spawn_flow`]: https://docs.rs/edict/1.0.0-rc6/edict/entity/struct.EntityRef.html#method.spawn_flow
325+
[`flow`]: https://docs.rs/edict/1.0.0-rc6/edict/flow/index.html
326+
[`FlowEntity`]: https://docs.rs/edict/1.0.0-rc6/edict/flow/struct.FlowEntity.html
327+
[`FlowEntity::spawn_flow`]: https://docs.rs/edict/1.0.0-rc6/edict/flow/struct.FlowEntity.html#method.spawn_flow
328+
[`FlowEntity::wait_despawned`]: https://docs.rs/edict/1.0.0-rc6/edict/flow/struct.FlowEntity.html#method.wait_despawned
329+
[`FlowEntity::wait_has_component`]: https://docs.rs/edict/1.0.0-rc6/edict/flow/struct.FlowEntity.html#method.wait_has_component
330+
[`Flows`]: https://docs.rs/edict/1.0.0-rc6/edict/flow/struct.Flows.html
331+
[`Flows::execute`]: https://docs.rs/edict/1.0.0-rc6/edict/flow/struct.Flows.html#method.execute
332+
[`FlowWorld`]: https://docs.rs/edict/1.0.0-rc6/edict/flow/struct.FlowWorld.html
333+
[`FlowWorld::spawn_flow`]: https://docs.rs/edict/1.0.0-rc6/edict/flow/struct.FlowWorld.html#method.spawn_flow
334+
[`FlowWorld::spawn_flow_for`]: https://docs.rs/edict/1.0.0-rc6/edict/flow/struct.FlowWorld.html#method.spawn_flow_for
335+
[`FnArg`]: https://docs.rs/edict/1.0.0-rc6/edict/system/trait.FnArg.html
336+
[`IdRange`]: https://docs.rs/edict/1.0.0-rc6/edict/entity/struct.IdRange.html
337+
[`IdRangeAllocator`]: https://docs.rs/edict/1.0.0-rc6/edict/entity/trait.IdRangeAllocator.html
338+
[`IntoSystem`]: https://docs.rs/edict/1.0.0-rc6/edict/system/trait.IntoSystem.html
339+
[`LocalActionEncoder`]: https://docs.rs/edict/1.0.0-rc6/edict/action/struct.LocalActionEncoder.html
340+
[`Modified`]: https://docs.rs/edict/1.0.0-rc6/edict/query/struct.Modified.html
341+
[`NoSuchEntity`]: https://docs.rs/edict/1.0.0-rc6/edict/struct.NoSuchEntity.html
342+
[`Query`]: https://docs.rs/edict/1.0.0-rc6/edict/query/trait.Query.html
343+
[`Relation`]: https://docs.rs/edict/1.0.0-rc6/edict/relation/trait.Relation.html
344+
[`Res`]: https://docs.rs/edict/1.0.0-rc6/edict/resources/struct.Res.html
345+
[`ResMut`]: https://docs.rs/edict/1.0.0-rc6/edict/resources/struct.ResMut.html
346+
[`ResLocal`]: https://docs.rs/edict/1.0.0-rc6/edict/system/struct.ResLocal.html
347+
[`ResMutLocal`]: https://docs.rs/edict/1.0.0-rc6/edict/system/struct.ResMutLocal.html
348+
[`Scheduler`]: https://docs.rs/edict/1.0.0-rc6/edict/scheduler/struct.Scheduler.html
349+
[`Scheduler::run_rayon`]: https://docs.rs/edict/1.0.0-rc6/edict/scheduler/struct.Scheduler.html#method.run_rayon
350+
[`Scheduler::run_threaded`]: https://docs.rs/edict/1.0.0-rc6/edict/scheduler/struct.Scheduler.html#method.run_threaded
351+
[`Scheduler::run_with`]: https://docs.rs/edict/1.0.0-rc6/edict/scheduler/struct.Scheduler.html#method.run_with
352+
[`ScopedExecutor`]: https://docs.rs/edict/1.0.0-rc6/edict/scheduler/trait.ScopedExecutor.html
349353
[`Send`]: https://doc.rust-lang.org/std/marker/trait.Send.html
350354
[`Sized`]: https://doc.rust-lang.org/std/marker/trait.Sized.html
351-
[`State`]: https://docs.rs/edict/1.0.0-rc4/edict/system/struct.State.html
355+
[`State`]: https://docs.rs/edict/1.0.0-rc6/edict/system/struct.State.html
352356
[`std::error::Error`]: https://doc.rust-lang.org/std/error/trait.Error.html
353357
[`Sync`]: https://doc.rust-lang.org/std/marker/trait.Sync.html
354-
[`System`]: https://docs.rs/edict/1.0.0-rc4/edict/system/trait.System.html
358+
[`System`]: https://docs.rs/edict/1.0.0-rc6/edict/system/trait.System.html
355359
[`TypeId`]: https://doc.rust-lang.org/std/any/struct.TypeId.html
356360
[`Vec`]: https://doc.rust-lang.org/std/vec/struct.Vec.html
357-
[`View`]: https://docs.rs/edict/1.0.0-rc4/edict/view/type.View.html
358-
[`ViewCell`]: https://docs.rs/edict/1.0.0-rc4/edict/view/type.ViewCell.html
359-
[`ViewMut`]: https://docs.rs/edict/1.0.0-rc4/edict/view/type.ViewMut.html
360-
[`ViewRef`]: https://docs.rs/edict/1.0.0-rc4/edict/view/type.ViewRef.html
361-
[`WakeOnDrop`]: https://docs.rs/edict/1.0.0-rc4/edict/flow/struct.WakeOnDrop.html
362-
[`World`]: https://docs.rs/edict/1.0.0-rc4/edict/world/struct.World.html
363-
[`World::drop`]: https://docs.rs/edict/1.0.0-rc4/edict/world/struct.World.html#method.drop
364-
[`World::epoch`]: https://docs.rs/edict/1.0.0-rc4/edict/world/struct.World.html#method.epoch
365-
[`World::spawn_flow`]: https://docs.rs/edict/1.0.0-rc4/edict/world/struct.World.html#method.spawn_flow
366-
[`World::spawn_flow_for`]: https://docs.rs/edict/1.0.0-rc4/edict/world/struct.World.html#method.spawn_flow_for
367-
[`WorldBuilder`]: https://docs.rs/edict/1.0.0-rc4/edict/world/struct.WorldBuilder.html
368-
[`WorldLocal`]: https://docs.rs/edict/1.0.0-rc4/edict/world/struct.WorldLocal.html
369-
[`WorldLocal::defer*`]: https://docs.rs/edict/1.0.0-rc4/edict/world/struct.WorldLocal.html#method.defer
370-
[`yield_now!`]: https://docs.rs/edict/1.0.0-rc4/edict/flow/macro.yield_now.html
361+
[`View`]: https://docs.rs/edict/1.0.0-rc6/edict/view/type.View.html
362+
[`ViewCell`]: https://docs.rs/edict/1.0.0-rc6/edict/view/type.ViewCell.html
363+
[`ViewMut`]: https://docs.rs/edict/1.0.0-rc6/edict/view/type.ViewMut.html
364+
[`ViewRef`]: https://docs.rs/edict/1.0.0-rc6/edict/view/type.ViewRef.html
365+
[`WakeOnDrop`]: https://docs.rs/edict/1.0.0-rc6/edict/flow/struct.WakeOnDrop.html
366+
[`World`]: https://docs.rs/edict/1.0.0-rc6/edict/world/struct.World.html
367+
[`World::drop`]: https://docs.rs/edict/1.0.0-rc6/edict/world/struct.World.html#method.drop
368+
[`World::epoch`]: https://docs.rs/edict/1.0.0-rc6/edict/world/struct.World.html#method.epoch
369+
[`World::spawn_flow`]: https://docs.rs/edict/1.0.0-rc6/edict/world/struct.World.html#method.spawn_flow
370+
[`World::spawn_flow_for`]: https://docs.rs/edict/1.0.0-rc6/edict/world/struct.World.html#method.spawn_flow_for
371+
[`WorldBuilder`]: https://docs.rs/edict/1.0.0-rc6/edict/world/struct.WorldBuilder.html
372+
[`WorldLocal`]: https://docs.rs/edict/1.0.0-rc6/edict/world/struct.WorldLocal.html
373+
[`WorldLocal::defer*`]: https://docs.rs/edict/1.0.0-rc6/edict/world/struct.WorldLocal.html#method.defer
374+
[`yield_now!`]: https://docs.rs/edict/1.0.0-rc6/edict/flow/macro.yield_now.html
371375

372376
## License
373377

src/component.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,13 @@ pub trait Component: Sized + 'static {
373373
core::any::type_name::<Self>()
374374
}
375375

376-
/// Hook that is executed when entity with component is dropped.
376+
/// Hook that is executed when component is dropped.
377+
/// Either due to entity being despawned or [`World::drop`], [`World::drop_erased`], [`World::drop_batch`] or [`World::drop_erased_batch`]
378+
///
379+
/// [`World::drop`]: edict::world::World::drop
380+
/// [`World::drop_erased`]: edict::world::World::drop_erased
381+
/// [`World::drop_batch`]: edict::world::World::drop_batch
382+
/// [`World::drop_erased_batch`]: edict::world::World::drop_erased_batch
377383
#[inline(always)]
378384
fn on_drop(&mut self, id: EntityId, encoder: LocalActionEncoder) {
379385
let _ = id;

src/lib.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -306,8 +306,9 @@
306306
//! When "flow" feature is enabled and "std" is not, extern functions are used to implement TLS.
307307
//! Application must provide implementation for these functions or linking will fail.
308308
//!
309-
//! When "scheduler" feature is enabled and "std" is not, external functions are used to implement thread parking.
310-
//! Application must provide implementation for these functions or linking will fail.
309+
//! "scheduler" feature enables [`Scheduler`] type.
310+
//! "threaded-scheduler" feature enables multithreaded execution for [`Scheduler`], using [`Scheduler::run_with`] and [`Scheduler::run_threaded`].
311+
//! "rayon-scheduler" feature enables rayon based execution for [`Scheduler`] using [`Scheduler::run_rayon`].
311312
//!
312313
//! [`!Send`]: core::marker::Send
313314
//! [`!Sized`]: core::marker::Sized
@@ -351,7 +352,10 @@
351352
//! [`ResLocal`]: crate::system::ResLocal
352353
//! [`ResMutLocal`]: crate::system::ResMutLocal
353354
//! [`Scheduler`]: crate::scheduler::Scheduler
354-
//! [`ScopedExecutor`]: crate::executor::ScopedExecutor
355+
//! [`Scheduler::run_rayon`]: crate::scheduler::Scheduler::run_rayon
356+
//! [`Scheduler::run_threaded`]: crate::scheduler::Scheduler::run_threaded
357+
//! [`Scheduler::run_with`]: crate::scheduler::Scheduler::run_with
358+
//! [`ScopedExecutor`]: crate::scheduler::ScopedExecutor
355359
//! [`State`]: crate::system::State
356360
//! [`System`]: crate::system::System
357361
//! [`TypeId`]: core::any::TypeId

src/relation/components.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ where
209209
#[inline(always)]
210210
fn on_drop(&mut self, origin: EntityId, mut encoder: LocalActionEncoder) {
211211
if !self.targets().is_empty() {
212-
R::on_origin_despawn(origin, self.targets(), encoder.reborrow());
212+
R::on_origin_drop(origin, self.targets(), encoder.reborrow());
213213

214214
if R::SYMMETRIC {
215215
Self::on_target_drop(
@@ -343,7 +343,7 @@ where
343343
debug_assert!(!R::SYMMETRIC);
344344

345345
if !self.origins.is_empty() {
346-
R::on_target_despawn(&self.origins, target, encoder.reborrow());
346+
R::on_target_drop(&self.origins, target, encoder.reborrow());
347347

348348
OriginComponent::<R>::on_target_drop(
349349
self.origins.iter().map(|r| r.0),

src/relation/mod.rs

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ pub trait Relation: Copy + 'static {
101101
}
102102

103103
/// Hook that is called when relation is dropped
104-
/// via [`World::drop_relation`] or similar method
104+
/// via [`World::drop_relation`](crate::world::World::drop_relation) or similar method
105105
/// or is replaced and [`Relation::on_replace`] returns `true`.
106106
#[inline(always)]
107107
fn on_drop(self, origin: EntityId, target: EntityId, encoder: LocalActionEncoder) {
@@ -112,23 +112,15 @@ pub trait Relation: Copy + 'static {
112112

113113
/// Hook that is called when origin is despawned.
114114
#[inline(always)]
115-
fn on_origin_despawn(
116-
origin: EntityId,
117-
targets: &[(EntityId, Self)],
118-
encoder: LocalActionEncoder,
119-
) {
115+
fn on_origin_drop(origin: EntityId, targets: &[(EntityId, Self)], encoder: LocalActionEncoder) {
120116
let _ = origin;
121117
let _ = targets;
122118
let _ = encoder;
123119
}
124120

125121
/// Hook that is called when target is despawned.
126122
#[inline(always)]
127-
fn on_target_despawn(
128-
origins: &[(EntityId, Self)],
129-
target: EntityId,
130-
encoder: LocalActionEncoder,
131-
) {
123+
fn on_target_drop(origins: &[(EntityId, Self)], target: EntityId, encoder: LocalActionEncoder) {
132124
let _ = origins;
133125
let _ = target;
134126
let _ = encoder;

src/scheduler/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ use crate::{
3333
#[cfg(feature = "threaded-scheduler")]
3434
mod threaded;
3535

36+
pub use self::threaded::ScopedExecutor;
37+
3638
/// Scheduler that starts systems in order of their registration.
3739
/// And executes as many non-conflicting systems in parallel as possible.
3840
///

0 commit comments

Comments
 (0)