EntityLock<>
and Optional<>
lock permission, and early lock release optimization
#44
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
EntityLock<ECS, Permissions...>
is a new lock type that is roughly equivalent to astd::pair<Lock<ECS, Permissions...>, Entity>
.This lock type can be used to perform parallel writes to multiple entities within a single transaction, while allowing reads to all entities.
Reads of values on entities not covered by the lock see the value as of the start of the transaction, with changes to other entities hidden until the transaction completes.
The
Optional<>
lock permission replacesDynamicLock<>
, and allows for any existingLock<ECS, Permissions...>
to be declared as optional and checked at runtime.Locks now properly reference count each component individually, allowing read-only lock permissions to be released early if a lock has been converted to a subset, and no more references to that component exist.
ECS component storage also has a new
WriteToReadLock
call, which allows a Write permission to be downgraded to Read permissions without starting a new transaction.