diff --git a/python/dune/perftool/generation/__init__.py b/python/dune/perftool/generation/__init__.py index 906183acd8de80ea5e48d78b3bd4631825b17c72..79480b150702849727ffe974ff0e78e49ee756aa 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 85ea60a9dbc8bde8751a8281ed2ab9718a099e81..13099e01966bce4ac5308c90c638b4f49c8c8366 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]