Skip to content

Commit

Permalink
affix capi functions
Browse files Browse the repository at this point in the history
  • Loading branch information
raggledodo committed Dec 2, 2018
1 parent 5bf8773 commit 31dd37b
Showing 1 changed file with 23 additions and 7 deletions.
30 changes: 23 additions & 7 deletions age/templates/capi_tmpl.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,20 @@
_origtype = 'ade::TensptrT'
_repltype = 'int64_t'

def affix_apis(apis):
names = [api['name'] for api in apis]
affix_maps = {name: names.count(name) - 1 for name in names}
affixes = []
for api in apis:
nocc = affix_maps[api['name']]
if nocc > 0:
affix = '_' + str(nocc)
affix_maps[api['name']] = nocc - 1
else:
affix = ''
affixes.append((api, affix))
return affixes

# EXPORT
header = repr.FILE_REPR("""#ifndef _GENERATED_CAPI_HPP
#define _GENERATED_CAPI_HPP
Expand All @@ -26,9 +40,9 @@

header.api_decls = ("apis", lambda apis: '\n\n'.join([\
"extern int64_t age_{func} ({args});".format(\
func = api["name"], args = ', '.join([\
func = api["name"] + affix, args = ', '.join([\
arg.replace(_origtype, _repltype)\
for arg in api["args"]])) for api in apis]))
for arg in api["args"]])) for api, affix in affix_apis(apis)]))

# EXPORT
source = repr.FILE_REPR("""#ifdef _GENERATED_CAPI_HPP
Expand Down Expand Up @@ -75,16 +89,16 @@
#endif
""")

_cfunc_fmt = """int64_t age_{func} ({params})
_cfunc_fmt = """int64_t age_{ifunc} ({params})
{{
{arg_decls}auto ptr = age::{func}({retargs});
int64_t id = (int64_t) ptr.get();
tens.emplace(id, ptr);
return id;
}}"""

def _defn_func(api):
func = api["name"]
def _defn_func(api, affix):
ifunc = api["name"] + affix
vars = [arg.split(' ') for arg in api["args"]]
typevars = [(var[0], var[-1]) for var in vars]
params = []
Expand All @@ -103,9 +117,11 @@ def _defn_func(api):
if len(arg_decls) > 0:
arg_decls_str = arg_decls_str + '\n '
return _cfunc_fmt.format(
func = func,
ifunc = ifunc,
func = api["name"],
params = ', '.join(params),
arg_decls = arg_decls_str,
retargs = ', '.join(args))

source.apis = ("apis", lambda apis: '\n\n'.join([_defn_func(api) for api in apis]))
source.apis = ("apis", lambda apis: '\n\n'.join([_defn_func(api, affix)\
for api, affix in affix_apis(apis)]))

0 comments on commit 31dd37b

Please sign in to comment.