This repository has been archived by the owner on Mar 29, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ptr.py
47 lines (34 loc) · 1.49 KB
/
ptr.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import sys
import ctypes
class Pointer:
def __init__(self, var: any):
self.pointsToVal = var
self.pointsToAddress = id(self.pointsToVal)
def getAddress(self):
return self.pointsToAddress
def getVal(self):
return self.pointsToVal
def increment(self):
self.pointsToAddress += sys.getsizeof(self.pointsToVal)
self.pointsToVal = ctypes.cast(self.pointsToAddress, ctypes.py_object).value
def decrement(self):
self.pointsToAddress -= sys.getsizeof(self.pointsToVal)
self.pointsToVal = ctypes.cast(self.pointsToAddress, ctypes.py_object).value
def add(self, val: int):
self.pointsToAddress += val * sys.getsizeof(self.pointsToVal)
self.pointsToVal = ctypes.cast(self.pointsToAddress, ctypes.py_object).value
def sub(self, val: int):
self.pointsToAddress -= val * sys.getsizeof(self.pointsToVal)
self.pointsToVal = ctypes.cast(self.pointsToAddress, ctypes.py_object).value
def eqeq(self, other):
return self.pointsToAddress == other.pointsToAddress
def ne(self, other):
return self.pointsToAddress != other.pointsToAddress
def gt(self, other):
return self.pointsToAddress > other.pointsToAddress
def lt(self, other):
return self.pointsToAddress < other.pointsToAddress
def lte(self, other):
return self.pointsToAddress <= other.pointsToAddress
def gte(self, other):
return self.pointsToAddress >= other.pointsToAddress