4545#:set REAL_TYPES = ["real({})".format(k) for k in REAL_KINDS]
4646#:set REAL_SUFFIX = REAL_KINDS
4747
48+ #! Real CPPS to be considered during templating
49+ #:set REAL_CPPS = ["" for k in REAL_KINDS]
50+
4851#! Collected (kind, type) tuples for real types
49- #:set REAL_KINDS_TYPES = list(zip(REAL_KINDS, REAL_TYPES, REAL_INIT))
52+ #:set REAL_KINDS_TYPES = list(zip(REAL_KINDS, REAL_TYPES, REAL_INIT, REAL_CPPS ))
5053
5154#! Complex kinds to be considered during templating
5255#:set CMPLX_KINDS = ["sp", "dp"]
@@ -102,8 +105,14 @@ $:"s" if cmplx=="c" else "d" if cmplx=="z" else "x" if cmplx=="y" else "q" if cm
102105#! Integer types to be considered during templating
103106#:set INT_TYPES = ["integer({})".format(k) for k in INT_KINDS]
104107
108+ #! Integer abbreviations to be considered during templating
109+ #:set INT_INIT = ["" for k in INT_KINDS]
110+
111+ #! Integer CPPs to be considered during templating
112+ #:set INT_CPPS = ["" for k in INT_KINDS]
113+
105114#! Collected (kind, type) tuples for integer types
106- #:set INT_KINDS_TYPES = list(zip(INT_KINDS, INT_TYPES))
115+ #:set INT_KINDS_TYPES = list(zip(INT_KINDS, INT_TYPES, INT_INIT, INT_CPPS ))
107116
108117#! Logical kinds to be considered during templating
109118#:set LOG_KINDS = ["lk"]
@@ -123,6 +132,12 @@ $:"s" if cmplx=="c" else "d" if cmplx=="z" else "x" if cmplx=="y" else "q" if cm
123132#! String types to be considered during templating
124133#:set STRING_TYPES = ["type({})".format(k) for k in STRING_KINDS]
125134
135+ #! String abbreviations to be considered during templating
136+ #:set STRING_INIT = ["" for k in STRING_KINDS]
137+
138+ #! String CPPs to be considered during templating
139+ #:set STRING_CPPS = ["" for k in STRING_KINDS]
140+
126141#! Collected (kind, type) tuples for string derived types
127142#:set STRING_KINDS_TYPES = list(zip(STRING_KINDS, STRING_TYPES))
128143
@@ -132,6 +147,15 @@ $:"s" if cmplx=="c" else "d" if cmplx=="z" else "x" if cmplx=="y" else "q" if cm
132147#! Bitset types to be considered during templating
133148#:set BITSET_TYPES = ["type({})".format(k) for k in BITSET_KINDS]
134149
150+ #! Bitset abbreviations directive to be considered during templating
151+ #:set BITSET_INIT = ["" for k in BITSET_KINDS]
152+
153+ #! Bitset CPP directive to be considered during templating
154+ #:set BITSET_CPPS = ["STDLIB_BITSET" for k in BITSET_KINDS]
155+
156+ #! Collected (kind, type) tuples for bitset types
157+ #:set BITSET_KINDS_TYPES = list(zip(BITSET_KINDS, BITSET_TYPES, BITSET_INIT, BITSET_CPPS))
158+
135159#! Sparse types to be considered during templating
136160#:set SPARSE_KINDS = ["COO", "CSR", "CSC", "ELL"]
137161
@@ -463,4 +487,23 @@ ${indent}$do ${varname}$${n+1+dim_offset-i}$ = lbound(${matname}$, ${n+1+dim_off
463487 #:endcall
464488#:enddef
465489
490+ #!
491+
492+ #!
493+ #! Encapsulate code into CPP pre-processing directives #ifdef and #endif
494+ #!
495+ #! Args:
496+ #! code (str): Code to be encapsulated
497+ #! cpp_var (str): CPP variable
498+ #!
499+ #:def generate_cpp(code, cpp_var)
500+ #:if cpp_var != ""
501+ #ifdef ${cpp_var}$
502+ #:endif
503+ $:code
504+ #:if cpp_var != ""
505+ #endif
506+ #:endif
507+ #:enddef generate_cpp
508+
466509#:endmute
0 commit comments