-
-
Notifications
You must be signed in to change notification settings - Fork 608
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Update GC interface to contain array management functions. #20608
Merged
+350
−161
Merged
Changes from all commits
Commits
Show all changes
3 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -190,4 +190,73 @@ interface GC | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* GC.stats().allocatedInCurrentThread, but faster. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
*/ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ulong allocatedInCurrentThread() nothrow; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// ARRAY FUNCTIONS | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/** | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* Get the current used capacity of an array block. Note that this is only | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* needed if you are about to change the array used size and need to deal | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* with the memory that is about to go away. For appending or shrinking | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* arrays that have no destructors, you probably don't need this function. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* Params: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* ptr - The pointer to check. This can be an interior pointer, but if it | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* is beyond the end of the used space, the return value may not be | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* valid. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* atomic - If true, the value is fetched atomically (for shared arrays) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* Returns: Current array slice, or null if the pointer does not point to a | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* valid appendable GC block. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
*/ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
void[] getArrayUsed(void *ptr, bool atomic = false) nothrow; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/** | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* Expand the array used size. Used for appending and expanding the length | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* of the array slice. If the operation can be performed without | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* reallocating, the function succeeds. Newly expanded data is not | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* initialized. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* slices that do not point at expandable GC blocks cannot be affected, and | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* this function will always return false. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* Params: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* slice - the slice to attempt expanding in place. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* newUsed - the size that should be stored as used. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* atomic - if true, the array may be shared between threads, and this | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* operation should be done atomically. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* Returns: true if successful. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
*/ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
bool expandArrayUsed(void[] slice, size_t newUsed, bool atomic = false) nothrow @safe; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/** | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* Expand the array capacity. Used for reserving space that can be used for | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* appending. If the operation can be performed without reallocating, the | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* function succeeds. The used size is not changed. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* slices that do not point at expandable GC blocks cannot be affected, and | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* this function will always return zero. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* Params: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* slice - the slice to attempt reserving capacity for. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* request - the requested size to expand to. Includes the existing data. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* Passing a value less than the current array size will result in no | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* changes, but will return the current capacity. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* atomic - if true, the array may be shared between threads, and this | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* operation should be done atomically. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* Returns: resulting capacity size, 0 if the operation could not be performed. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
*/ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
size_t reserveArrayCapacity(void[] slice, size_t request, bool atomic = false) nothrow @safe; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+227
to
+243
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Additionally can we format those a bit better ? A one-liner title / summary at the top, followed by an extended description, and an empty line between sections ? In this case:
Suggested change
Also made some minor edits. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/** | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* Shrink used space of a slice. Unlike the other array functions, the | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* array slice passed in is the target slice, and the existing used space | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* is passed separately. This is to discourage code that ends up with a | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* slice to dangling valid data. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* If slice.ptr[0 .. existingUsed] does not point to the end of a valid GC | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* appendable slice, then the operation fails. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* Params: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* slice - The proposed valid slice data. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* existingUsed - The amount of data in the block (starting at slice.ptr) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* that is currently valid in the array. If this amount does not match | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* the current used size, the operation fails. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* atomic - If true, the slice may be shared between threads, and the | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* operation should be atomic. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* Returns: true if successful. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
*/ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
bool shrinkArrayUsed(void[] slice, size_t existingUsed, bool atomic = false) nothrow; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The documentation generator should have yelled at you here.
=
not-
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
#20625