From 50f27d79170449f42fb8ba888ebbee4c35d1b634 Mon Sep 17 00:00:00 2001
From: Stephan Seitz <stephan.seitz@fau.de>
Date: Sat, 30 Mar 2019 13:55:54 +0100
Subject: [PATCH] Add pystencils.data_types.address_of

---
 pystencils/data_types.py | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/pystencils/data_types.py b/pystencils/data_types.py
index 7bdc9d340..93ef5c1c7 100644
--- a/pystencils/data_types.py
+++ b/pystencils/data_types.py
@@ -14,6 +14,33 @@ from pystencils.utils import all_equal
 from sympy.logic.boolalg import Boolean
 
 
+# noinspection PyPep8Naming
+class address_of(sp.Function):
+    is_Atom = True
+
+    def __new__(cls, arg):
+        obj = sp.Function.__new__(cls, arg)
+        return obj
+
+    @property
+    def canonical(self):
+        if hasattr(self.args[0], 'canonical'):
+            return self.args[0].canonical
+        else:
+            raise NotImplementedError()
+
+    @property
+    def is_commutative(self):
+        return self.args[0].is_commutative
+
+    @property
+    def dtype(self):
+        if hasattr(self.args[0], 'dtype'):
+            return PointerType(self.args[0].dtype, restrict=True)
+        else:
+            return PointerType('void', restrict=True)
+
+
 # noinspection PyPep8Naming
 class cast_func(sp.Function):
     is_Atom = True
-- 
GitLab