-
-
Notifications
You must be signed in to change notification settings - Fork 31.9k
gh-112015: Implement ctypes.memoryview_at()
#112018
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
Conversation
ctypes currently has no way to easily create a buffer object from a pointer and a dynamic size. It is possible to create memoryview objects of array objects (e.g. memoryview((c_ubyte * 10)())) but this is excessively slow when implementing a callback function in Python that is passed a dynamic void * and a size_t. `ctypes.buffer_at()` fills that gap in the API. This is similar to `ffi.buffer()` in the cffi module.
ctypes.buffer_at()
ctypes.buffer_at()
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.
Please add tests and What's New entry.
And I think that it is worth to support large buffers.
Misc/NEWS.d/next/Library/2023-11-12-21-53-40.gh-issue-112015.2WPRxE.rst
Outdated
Show resolved
Hide resolved
Misc/NEWS.d/next/Library/2023-11-12-21-53-40.gh-issue-112015.2WPRxE.rst
Outdated
Show resolved
Hide resolved
Documentation improvements Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
It's a more descriptive and precise name.
It's more common that the user will want a memoryview object that can be mutated. An immutable object is more rare, so make the default case return a mutable object.
When merging, just flatten all the commits down to a single commit. |
ctypes.buffer_at()
ctypes.memoryview_at()
Abandoned |
No worries. Thank you for your work so far! |
No problem, feel free |
…tics. Improve tests and docs.
OK. I went back to the |
Does this look interesting to you, @ZeroIntensity or @picnixz? |
I'll review sometime soon (today or in the next few days). |
Misc/NEWS.d/next/Library/2023-11-12-21-53-40.gh-issue-112015.2WPRxE.rst
Outdated
Show resolved
Hide resolved
Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
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.
Mostly LGTM
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.
I'm happy with this!
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com> Co-authored-by: Petr Viktorin <encukou@gmail.com> Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com> Co-authored-by: Petr Viktorin <encukou@gmail.com> Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
ctypes currently has no way to easily create a buffer object from a pointer and a dynamic size. It is possible to create memoryview objects of array objects that refer to existing memory (e.g.
memoryview((c_byte * size).from_address(address))
) but this is inefficient and the resulting memoryview object doesn't allow editing via python (invalid format errors are thrown, this is due to how ctypes objects implements the buffer protocol).ctypes.memoryview_at()
fills that gap in the API. This is similar toffi.buffer()
in the cffi module.Fixes #112015
📚 Documentation preview 📚: https://cpython-previews--112018.org.readthedocs.build/
ctypes.memoryview_at()
#112015