mirror of
https://github.com/TREX-CoE/qmckl.git
synced 2024-08-26 07:01:46 +02:00
Added fucntion that generates private fortran interfaces to C functions.
This commit is contained in:
parent
216fcebf70
commit
7c57fe2b6f
@ -240,6 +240,55 @@ results = [ f"interface"
|
|||||||
, ""
|
, ""
|
||||||
]
|
]
|
||||||
|
|
||||||
|
for d in parse_table(table):
|
||||||
|
f_type = f_of_c_d[d["c_type"]]
|
||||||
|
inout = "intent("+d["inout"]+")"
|
||||||
|
name = d["name"]
|
||||||
|
|
||||||
|
# Input scalars are passed by value
|
||||||
|
if d["rank"] == 0 and d["inout"] == "in":
|
||||||
|
value = ", value"
|
||||||
|
else:
|
||||||
|
value = " "
|
||||||
|
|
||||||
|
# Append dimensions to the name
|
||||||
|
if d["rank"] == 0:
|
||||||
|
dims = ""
|
||||||
|
else:
|
||||||
|
d["dims"].reverse()
|
||||||
|
dims = "(" + ",".join(d["dims"]) + ")"
|
||||||
|
|
||||||
|
results += [ f" {f_type:20}, {inout:12}{value} :: {name}{dims}" ]
|
||||||
|
|
||||||
|
results += [ ""
|
||||||
|
, f" end function {fname}"
|
||||||
|
, f"end interface"
|
||||||
|
]
|
||||||
|
results='\n'.join(results)
|
||||||
|
return results
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
#+NAME: generate_private_f_interface
|
||||||
|
#+BEGIN_SRC python :var table=test :var rettyp="integer" :var fname=[] :results value :noweb yes :wrap "src f90 :tangle (eval fh_private_func) :comments org :exports none"
|
||||||
|
<<c_of_f>>
|
||||||
|
<<f_of_c>>
|
||||||
|
<<parse_table>>
|
||||||
|
d = parse_table(table)
|
||||||
|
|
||||||
|
args = ", ".join([ x["name"] for x in d ])
|
||||||
|
|
||||||
|
rettyp_c = ctypeid_d[rettyp.lower()]
|
||||||
|
|
||||||
|
results = [ f"interface"
|
||||||
|
, f" {rettyp_c} function {fname} &"
|
||||||
|
, f" ({args}) &"
|
||||||
|
, " bind(C)"
|
||||||
|
, " use, intrinsic :: iso_c_binding"
|
||||||
|
, " import"
|
||||||
|
, " implicit none"
|
||||||
|
, ""
|
||||||
|
]
|
||||||
|
|
||||||
for d in parse_table(table):
|
for d in parse_table(table):
|
||||||
f_type = f_of_c_d[d["c_type"]]
|
f_type = f_of_c_d[d["c_type"]]
|
||||||
inout = "intent("+d["inout"]+")"
|
inout = "intent("+d["inout"]+")"
|
||||||
|
Loading…
Reference in New Issue
Block a user