Skip to main content

Events

Struct Events 

Source
pub struct Events<T> { /* private fields */ }
Expand description

The events of type T: a resource of the World with two buffers, the events of the last two updates (DECISIONS #26).

A Schedule updates it at its sync point, at the end of every run: the older buffer is dropped, then the events the systems’ writers sent during the frame are appended in system registration order. Every event has a running id, so a reader that keeps an EventCursor sees every event once, as long as it reads at least once every two updates. The schedule creates the resource for every event type its systems use; World::send_event creates it on the first event.

use pragma_ecs::{EventCursor, Events};

let mut events = Events::<&str>::new();
let mut cursor = EventCursor::default();
events.send("hello")?;
assert_eq!(cursor.read(&events).copied().collect::<Vec<_>>(), ["hello"]);

events.update(); // "hello" is still kept for one more update
events.send("world")?;
assert_eq!(events.len(), 2);
assert_eq!(cursor.read(&events).copied().collect::<Vec<_>>(), ["world"]);

events.update();
events.update(); // both are gone
assert!(events.is_empty());

Implementations§

Source§

impl<T> Events<T>

Source

pub const fn new() -> Self

No events. Does not allocate.

Source

pub fn send(&mut self, event: T) -> Result<(), EcsError>

Appends event to the current buffer.

§Errors

EcsError::OutOfMemory if the buffer cannot grow; the event is dropped.

Source

pub fn update(&mut self)

Drops the events of the previous update and keeps the current ones as the previous. Does not allocate: the two buffers trade places.

Source

pub fn len(&self) -> usize

Number of events kept (both buffers).

Source

pub fn is_empty(&self) -> bool

Whether no event is kept.

Source

pub fn iter(&self) -> EventIter<'_, T> ⓘ

Every event kept, oldest first.

use pragma_ecs::Events;

let mut events = Events::new();
events.send(1)?;
events.update();
events.send(2)?;
assert_eq!(events.iter().copied().collect::<Vec<_>>(), [1, 2]);

Trait Implementations§

Source§

impl<T> Debug for Events<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T> Default for Events<T>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<T> Freeze for Events<T>
where Vec<T>: Freeze,

§

impl<T> RefUnwindSafe for Events<T>
where Vec<T>: RefUnwindSafe,

§

impl<T> Send for Events<T>
where Vec<T>: Send,

§

impl<T> Sync for Events<T>
where Vec<T>: Sync,

§

impl<T> Unpin for Events<T>
where Vec<T>: Unpin,

§

impl<T> UnsafeUnpin for Events<T>
where Vec<T>: UnsafeUnpin,

§

impl<T> UnwindSafe for Events<T>
where Vec<T>: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Component for T
where T: Send + Sync + 'static,

Source§

impl<T> Event for T
where T: Send + Sync + 'static,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Resource for T
where T: Send + Sync + 'static,

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more