From ae7af94110a189aacc314bc25e8f390d090320ca Mon Sep 17 00:00:00 2001
From: Dominic Kempf <dominic.kempf@iwr.uni-heidelberg.de>
Date: Thu, 14 Apr 2016 11:08:01 +0200
Subject: [PATCH] Implement a generic context manager that globally defines
 some value

---
 python/dune/perftool/generation/__init__.py |  4 +++-
 python/dune/perftool/generation/context.py  | 24 +++++++++++++++++++++
 2 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/python/dune/perftool/generation/__init__.py b/python/dune/perftool/generation/__init__.py
index 906183ac..79480b15 100644
--- a/python/dune/perftool/generation/__init__.py
+++ b/python/dune/perftool/generation/__init__.py
@@ -25,4 +25,6 @@ from dune.perftool.generation.loopy import (domain,
                                             )
 
 from dune.perftool.generation.context import (cache_context,
-                                              )
\ No newline at end of file
+                                              generic_context,
+                                              get_generic_context_value,
+                                              )
diff --git a/python/dune/perftool/generation/context.py b/python/dune/perftool/generation/context.py
index 85ea60a9..13099e01 100644
--- a/python/dune/perftool/generation/context.py
+++ b/python/dune/perftool/generation/context.py
@@ -29,3 +29,27 @@ def get_context_tags():
     for items in _cache_context_stack:
         result = result + items
     return result
+
+
+_generic_context_cache = {}
+
+
+class _GenericContext(object):
+    def __init__(self, key, value):
+        self.key = key
+        self.value = value
+        assert key not in _generic_context_cache
+
+    def __enter__(self):
+        _generic_context_cache[self.key] = self.value
+
+    def __exit__(self, exc_type, exc_value, traceback):
+        del _generic_context_cache[self.key]
+
+
+def generic_context(key, value):
+    return _GenericContext(key, value)
+
+
+def get_generic_context_value(key):
+    return _generic_context_cache[key]
-- 
GitLab