Skip to content
This repository was archived by the owner on Mar 29, 2021. It is now read-only.

Commit dd00da6

Browse files
author
JavaCode7
committedMar 10, 2021
Do the whole thing in one commit XD
1 parent c0bacca commit dd00da6

File tree

2 files changed

+92
-0
lines changed

2 files changed

+92
-0
lines changed
 

‎README.md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,47 @@
11
# pyPtr
22
Pointers for Python
3+
4+
## Usage
5+
To create a new `Pointer`:
6+
```python
7+
import ptr
8+
9+
num: int = 10
10+
num_pointer: ptr.Pointer = ptr.Pointer(num)
11+
```
12+
13+
To get the address and value that the pointer points to:
14+
```python
15+
num_pointer_address: int = num_pointer.getAddress()
16+
num_pointer_value: int = num_pointer.getVal()
17+
```
18+
19+
To perform calculations:
20+
```python
21+
# += and -=
22+
num_pointer.increment()
23+
num_pointer_value_after_plus_equals: int = num_pointer.getVal()
24+
25+
num_pointer.decrement()
26+
num_pointer_value_after_minus_equals: int = num_pointer.getVal()
27+
28+
29+
# + and -
30+
num_pointer.add(10)
31+
num_pointer_value_after_plus: int = num_pointer.getVal()
32+
33+
num_pointer.sub(15)
34+
num_pointer_value_after_minus: int = num_pointer.getVal()
35+
36+
37+
# ==, !=, <, >, <= and >=
38+
other: int = 15
39+
other_pointer: ptr.Pointer = ptr.Pointer(other)
40+
41+
are_addresses_equal: bool = num_pointer.eqeq(other_pointer)
42+
are_addresses_equal: bool = num_pointer.ne(other_pointer)
43+
are_addresses_equal: bool = num_pointer.gt(other_pointer)
44+
are_addresses_equal: bool = num_pointer.lt(other_pointer)
45+
are_addresses_equal: bool = num_pointer.lte(other_pointer)
46+
are_addresses_equal: bool = num_pointer.gte(other_pointer)
47+
```

‎ptr.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import sys
2+
import ctypes
3+
4+
class Pointer:
5+
def __init__(self, var: any):
6+
self.pointsToVal = var
7+
self.pointsToAddress = id(self.pointsToVal)
8+
9+
def getAddress(self):
10+
return self.pointsToAddress
11+
12+
def getVal(self):
13+
return self.pointsToVal
14+
15+
def increment(self):
16+
self.pointsToAddress += sys.getsizeof(self.pointsToVal)
17+
self.pointsToVal = ctypes.cast(self.pointsToAddress, ctypes.py_object).value
18+
19+
def decrement(self):
20+
self.pointsToAddress -= sys.getsizeof(self.pointsToVal)
21+
self.pointsToVal = ctypes.cast(self.pointsToAddress, ctypes.py_object).value
22+
23+
def add(self, val: int):
24+
self.pointsToAddress += val * sys.getsizeof(self.pointsToVal)
25+
self.pointsToVal = ctypes.cast(self.pointsToAddress, ctypes.py_object).value
26+
27+
def sub(self, val: int):
28+
self.pointsToAddress -= val * sys.getsizeof(self.pointsToVal)
29+
self.pointsToVal = ctypes.cast(self.pointsToAddress, ctypes.py_object).value
30+
31+
def eqeq(self, other):
32+
return self.pointsToAddress == other.pointsToAddress
33+
34+
def ne(self, other):
35+
return self.pointsToAddress != other.pointsToAddress
36+
37+
def gt(self, other):
38+
return self.pointsToAddress > other.pointsToAddress
39+
40+
def lt(self, other):
41+
return self.pointsToAddress < other.pointsToAddress
42+
43+
def lte(self, other):
44+
return self.pointsToAddress <= other.pointsToAddress
45+
46+
def gte(self, other):
47+
return self.pointsToAddress >= other.pointsToAddress

0 commit comments

Comments
 (0)
This repository has been archived.