gh-112015: Implement ctypes.memoryview_at()#112018
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()
serhiy-storchaka
left a comment
There was a problem hiding this comment.
Please add tests and What's New entry.
And I think that it is worth to support large buffers.
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). |
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>
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