store element count as isize and clamp len to >= 0 #88
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.
Changes the map's element count to be stored as a signed integer, to avoid panics if the count is updated by for example two removing and one inserting thread out of order.
In order to not report a negative size to users,
len
is adjusted to return0
if the actual count is negative. This is translated from the Java implementation, but without the upper bounds check, since for us the storage data type (isize
) cannot be larger than the maximal value of the return type (usize
).Note that this means that technically the same race condition still exists at the upper bound, however the map's
MAXIMUM_CAPACITY
is way belowisize::MAX
.Closes #86.
This change is