Skip to content

glapa-grossklag/pointers.py

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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)

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.

About

Bringing the hell of pointers to Python.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%