SpaceTransaction

Struct SpaceTransaction 

Source
pub struct SpaceTransaction { /* private fields */ }
Expand description

A Transaction that modifies a Space.

Implementations§

Source§

impl SpaceTransaction

Source

pub fn at(&mut self, cube: Cube) -> &mut CubeTransaction

Allows modifying the part of this transaction which is a CubeTransaction at the given cube, creating it if necessary (as CubeTransaction::default()).

You can replace the transaction or use CubeTransaction::merge_from() to merge in another transaction.

This is for incremental construction of a complex transaction; to create a transaction affecting a single cube, CubeTransaction::at() will be more convenient.

Source

pub fn filling<F>(region: GridAab, function: F) -> Self
where F: FnMut(Cube) -> CubeTransaction,

Construct a SpaceTransaction which modifies a volume by applying a CubeTransaction computed by function to each cube.

Source

pub fn set_cube( cube: impl Into<Cube>, old: Option<Block>, new: Option<Block>, ) -> Self

Construct a SpaceTransaction for a single cube.

If old is not None, requires that the existing block is that block or the transaction will fail. If new is not None, replaces the existing block with new.

TODO: Consider replacing all uses of this with CubeTransaction::replacing().

Source

pub fn draw_target<C>( &mut self, transform: Gridgid, ) -> DrawingPlane<'_, Self, C>

Provides an DrawTarget adapter for 2.5D drawing.

For more information on how to use this, see all_is_cubes::drawing.

Source

pub fn nonconserved(self) -> Self

Marks all cube modifications in this transaction as non-conservative.

This means that two transactions which both place the same block in a given cube may be merged, whereas the default state is that they will conflict (on the principle that such a merge could cause there to be fewer total occurrences of that block than intended).

Also, the transaction will not fail if some of its cubes are outside the bounds of the Space.

Source

pub fn behaviors(t: BehaviorSetTransaction<Space>) -> Self

Modify the space’s BehaviorSet.

Source

pub fn add_behavior<B>(bounds: GridAab, behavior: B) -> Self
where B: Behavior<Space> + 'static,

Add a behavior to the Space. This is a shortcut for creating a BehaviorSetTransaction.

Source

pub fn bounds_only_cubes(&self) -> Option<GridAab>

Computes the region of cubes directly affected by this transaction. Ignores behaviors.

Returns None if no cubes are affected.

TODO: Handle the case where the total volume is too large. (Maybe GridAab should lose that restriction.)

Source

pub fn bounds(&self) -> Option<GridAab>

Computes the region affected by this transaction.

Returns None if no specific regions of the space are affected.

Source

pub fn execute_m( self, target: &mut Mutation<'_, '_>, ) -> Result<(), ExecuteError<Self>>

As Transaction::execute(), but taking a Mutation instead of a Space.

Trait Implementations§

Source§

impl Clone for SpaceTransaction

Source§

fn clone(&self) -> SpaceTransaction

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SpaceTransaction

Source§

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

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

impl Default for SpaceTransaction

Source§

fn default() -> SpaceTransaction

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

impl<'a> From<&'a VoxelBrush<'a>> for SpaceTransaction

Source§

fn from(brush: &'a VoxelBrush<'a>) -> Self

Converts the brush into an equivalent transaction, as by VoxelBrush::paint_transaction at the origin.

Source§

impl<'a> From<VoxelBrush<'a>> for SpaceTransaction

Source§

fn from(brush: VoxelBrush<'a>) -> Self

Converts the brush into an equivalent transaction, as by VoxelBrush::paint_transaction at the origin.

Source§

impl Merge for SpaceTransaction

Source§

type MergeCheck = <BehaviorSetTransaction<Space> as Merge>::MergeCheck

Type of a value passed from Merge::check_merge to Merge::commit_merge. This may be used to pass precalculated values to speed up the merge phase, but also makes it difficult to accidentally merge without checking.
Source§

type Conflict = SpaceTransactionConflict

Error type giving the reason why a merge was not possible. Read more
Source§

fn check_merge(&self, other: &Self) -> Result<Self::MergeCheck, Self::Conflict>

Checks whether two transactions can be merged into a single transaction. If so, returns Ok containing data which may be passed to Self::commit_merge(). Read more
Source§

fn commit_merge(&mut self, other: Self, check: Self::MergeCheck)

Combines other into self so that it has both effects simultaneously. This operation must be commutative and have Default::default() as the identity. Read more
Source§

fn merge(self, other: Self) -> Result<Self, Self::Conflict>

Combines two transactions into one which has both effects simultaneously, if possible. Read more
Source§

fn merge_from(&mut self, other: Self) -> Result<(), Self::Conflict>

Combines two transactions into one which has both effects simultaneously, if possible. Read more
Source§

impl PartialEq for SpaceTransaction

Source§

fn eq(&self, other: &SpaceTransaction) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Transaction for SpaceTransaction

Source§

type Target = Space

Type of the transaction’s target (what it can be used to mutate).
Source§

type Context<'a> = ReadTicket<'a>

Data which must be passed when checking the transaction. Use () if none is needed.
Source§

type CommitCheck = CommitCheck

Type of a value passed from Transaction::check to Transaction::commit. This may be used to pass precalculated values to speed up the commit phase, or even lock guards or similar, but also makes it slightly harder to accidentally call commit without check.
Source§

type Output = Infallible

The results of a Transaction::commit() or Transaction::execute(). Each commit may produce any number of these messages. Read more
Source§

type Mismatch = SpaceTransactionMismatch

Error type describing a precondition not met, returned by Self::check(). Read more
Source§

fn check( &self, space: &Space, read_ticket: Self::Context<'_>, ) -> Result<Self::CommitCheck, Self::Mismatch>

Checks whether the target’s current state meets the preconditions and returns Err if it does not. Read more
Source§

fn commit( self, space: &mut Space, check: Self::CommitCheck, _outputs: &mut dyn FnMut(Self::Output), ) -> Result<(), CommitError>

Perform the mutations specified by this transaction. The check value should have been created by a prior call to Transaction::check(). Read more
Source§

fn execute( self, target: &mut Self::Target, context: Self::Context<'_>, outputs: &mut dyn FnMut(Self::Output), ) -> Result<(), ExecuteError<Self>>

Convenience method to execute a transaction in one step. Implementations should not need to override this. Equivalent to: Read more
Source§

fn bind(self, target: Handle<Self::Target>) -> UniverseTransaction
where Self: Sized, Self::Target: UTransactional<Transaction = Self>,

Specify the target of this transaction as a Handle, and erase its type, so that it can be combined with other transactions in the same universe. Read more
Source§

impl VisitHandles for SpaceTransaction

Source§

fn visit_handles(&self, visitor: &mut dyn HandleVisitor)

For each Handle contained within self that is reachable without traversing another Handle, call visitor with a reference to it.
Source§

impl Eq for SpaceTransaction

Source§

impl StructuralPartialEq for SpaceTransaction

Auto Trait Implementations§

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> Az for T

Source§

fn az<Dst>(self) -> Dst
where T: Cast<Dst>,

Casts the value.
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<Src, Dst> CastFrom<Src> for Dst
where Src: Cast<Dst>,

Source§

fn cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> CheckedAs for T

Source§

fn checked_as<Dst>(self) -> Option<Dst>
where T: CheckedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> CheckedCastFrom<Src> for Dst
where Src: CheckedCast<Dst>,

Source§

fn checked_cast_from(src: Src) -> Option<Dst>

Casts the value.
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynEq for T
where T: Any + Eq,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Casts the type to dyn Any.
Source§

fn dyn_eq(&self, other: &(dyn DynEq + 'static)) -> bool

This method tests for self and other values to be equal. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromWorld for T
where T: Default,

Source§

fn from_world(_world: &mut World) -> T

Creates Self using default().

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> OverflowingAs for T

Source§

fn overflowing_as<Dst>(self) -> (Dst, bool)
where T: OverflowingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> OverflowingCastFrom<Src> for Dst
where Src: OverflowingCast<Dst>,

Source§

fn overflowing_cast_from(src: Src) -> (Dst, bool)

Casts the value.
Source§

impl<T> SaturatingAs for T

Source§

fn saturating_as<Dst>(self) -> Dst
where T: SaturatingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> SaturatingCastFrom<Src> for Dst
where Src: SaturatingCast<Dst>,

Source§

fn saturating_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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> UnwrappedAs for T

Source§

fn unwrapped_as<Dst>(self) -> Dst
where T: UnwrappedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> UnwrappedCastFrom<Src> for Dst
where Src: UnwrappedCast<Dst>,

Source§

fn unwrapped_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> WrappingAs for T

Source§

fn wrapping_as<Dst>(self) -> Dst
where T: WrappingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> WrappingCastFrom<Src> for Dst
where Src: WrappingCast<Dst>,

Source§

fn wrapping_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> ConditionalSend for T
where T: Send,