Bringing the hell of pointers to Python.
Project description
pointers.py
Bringing the hell of pointers to Python
Why would you ever need this
Example
from pointers import Pointer, to_ptr
class test_class:
pass
def some_function(ptr: Pointer[test_class]):
print(repr(ptr)) # <pointer to test_class object at [address]>"
some_function(to_ptr(test_class()))
Installation
Linux/macOS
python3 -m pip install -U pointers.py
Windows
py -3 -m pip install -U pointers.py
Usage
To convert something to a pointer, use the pointers.to_ptr()
function. Then, when annotating function types use the pointers.Pointer
class, like so:
from pointers import Pointer, to_ptr
class test_class:
pass
def some_function(ptr: Pointer[test_class]): # can be any data type (str, tuple, etc)
...
some_function(to_ptr(test_class())) # converts the instance to a pointer object
To dereference a pointer, use the Pointer.dereference()
function:
def some_function(ptr: Pointer[test_class]):
my_instance: test_class = ptr.dereference() # dereferences the pointer
instance = test_class()
some_function(to_ptr(instance))
Alternatively, you can use the * operators to dereference the pointer:
def some_function(ptr: Pointer[str]):
print(*ptr) # a
some_function(to_ptr("a"))
Note that when using the * operator, the following syntax will not work properly:
deref = *ptr
print(deref)
For this scenario you can use the dereferencing assignment operator, ,=
deref ,= ptr # works correctly
print(deref)
A segmentation fault will occur if the address does not exist, so make sure the pointer is valid.
If you would like to automatically decay values to a pointer, use the pointers.decay
decorator, like this:
@decay
def some_function(ptr: Pointer[str], b: str): # converts "ptr" to a pointer since its hinted as Pointer[str]
print(ptr.dereference(), b) # a b
some_function("a", "b") # converts "a" to a pointer, and leaves b as it is
Make sure you annotate the argument with Pointer
or else decay won't convert it.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for pointers.py-1.0.6-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fa04fd179f4c0fd5183f441601acf43542d1e7d588f6049184fcc8fa9c908950 |
|
MD5 | 40dd7911c099ff2753fef116de00f0b2 |
|
BLAKE2b-256 | 5172b1ed219b8ba54e120cd18b01589d1e58b01fc31c0d7b410fe45914dfc0d9 |