From dba8975e17cc17d0b5d81980139b4ddd4cb2ad56 Mon Sep 17 00:00:00 2001
From: Dominic Kempf <dominic.kempf@iwr.uni-heidelberg.de>
Date: Wed, 19 Oct 2016 20:57:55 +0200
Subject: [PATCH] Implement declaration of temporaries with base_storage

---
 python/dune/perftool/generation/loopy.py | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/python/dune/perftool/generation/loopy.py b/python/dune/perftool/generation/loopy.py
index 10620a1e..f13f89cd 100644
--- a/python/dune/perftool/generation/loopy.py
+++ b/python/dune/perftool/generation/loopy.py
@@ -80,6 +80,11 @@ def default_declaration(name, shape=(), shape_impl=()):
         return '{} {}(0.0);'.format(t, name)
 
 
+@preamble
+def declaration_with_base_storage(name, base_storage):
+    return 'double* {} = {};'.format(name, base_storage)
+
+
 class _TemporaryCounter:
     counter = 0
 
@@ -99,6 +104,13 @@ def temporary_variable(name, **kwargs):
     shape_impl = kwargs.pop('shape_impl', ('arr',) * len(shape))
     decl_method = kwargs.pop('decl_method', default_declaration)
 
+
+    # Check if a specified base_storage has already been initialized
+    if kwargs.get('base_storage', None):
+        assert(kwargs['base_storage'] in [tv.name for tv in temporary_variable._memoize_cache.values()])
+        assert(decl_method is None)
+        declaration_with_base_storage(name, kwargs['base_storage'])
+
     if decl_method is not None:
         decl_method(name, shape, shape_impl)
 
-- 
GitLab