Newer
Older
"""
Define some generators based on the caching mechanism that
are commonly needed for code generation
"""
from dune.codegen.options import get_option
from dune.codegen.generation import generator_factory
from dune.codegen.cgen.clazz import AccessModifier, BaseClass, ClassMember
preamble = generator_factory(item_tags=("preamble",), counted=True, context_tags="kernel")
pre_include = generator_factory(item_tags=("file", "pre_include"), context_tags=("filetag",), no_deco=True)
post_include = generator_factory(item_tags=("file", "post_include"), context_tags=("filetag",), no_deco=True)
end_of_file = generator_factory(item_tags=("file", "end_of_file"), context_tags=("filetag",), no_deco=True)
class_member = generator_factory(item_tags=("member",), context_tags=("classtag",), on_store=lambda m: ClassMember(m), counted=True)
template_parameter = generator_factory(item_tags=("template_param",), context_tags=("classtag",), counted=True)
class_basename = generator_factory(item_tags=("basename",), context_tags=("classtag",))
@generator_factory(item_tags=("file", "include"), context_tags=("filetag",), counted=True)
def include_file(include, system=False):
return cgen.Include(include, system=system)
@generator_factory(item_tags=("clazz", "initializer"), counted=True, context_tags=("classtag",), cache_key_generator=lambda o, p: o)
def initializer_list(obj, params):
@generator_factory(item_tags=("clazz", "baseclass"), context_tags=("classtag",), counted=True)
def base_class(baseclass, access=AccessModifier.PUBLIC, construction=[], classtag=None):
initializer_list(baseclass, construction, classtag=classtag)
@generator_factory(item_tags=("clazz", "constructor_param"), context_tags=("classtag",), counted=True)
def constructor_parameter(_type, name):
return cgen.Value(_type, name)
from dune.codegen.pdelab.localoperator import name_time_dumper_os
# reset = name_time_dumper_reset()
reset = 'false'
code = "DUMP_TIMER({},{},{},{});".format(get_option("instrumentation_level"), name, os, reset)
@generator_factory(item_tags=("register_likwid_timers",))
def register_liwkid_timer(name):
return "LIKWID_MARKER_REGISTER(\"{}\");".format(name)
@generator_factory(item_tags=("register_ssc_marks",))
def dump_ssc_marks(name):
from dune.codegen.pdelab.driver.timings import get_region_marks
return 'std::cout << "{}: " << {} << " <--> " << {} << std::endl;'.format(name,