From 51f8cad8358809cd087a6b1da9a95daf785ae251 Mon Sep 17 00:00:00 2001 From: Kevin Thornberry Date: Mon, 1 Dec 2025 17:12:43 +0000 Subject: [PATCH 01/11] Generate interace cpp wrapper --- src/source/CGenerator.scala | 148 +++++++++++++++++++++--------------- 1 file changed, 86 insertions(+), 62 deletions(-) diff --git a/src/source/CGenerator.scala b/src/source/CGenerator.scala index 7900c8d2..83c92a67 100644 --- a/src/source/CGenerator.scala +++ b/src/source/CGenerator.scala @@ -44,13 +44,11 @@ class CGenerator(spec: Spec) extends Generator(spec) { def privateHeader(t: TypeDecl): String = q(spec.cppIncludePrefix + spec.cppFileIdentStyle(t.ident.name) + "." + spec.cppHeaderExt) - private def writeExternCBegin(w: IndentWriter): Unit = { + private def wrapExternC(w: IndentWriter, f: IndentWriter => Unit) = { w.wl("#ifdef __cplusplus") w.wl("extern \"C\" {") w.wl("#endif // __cplusplus") - } - - private def writeExternCEnd(w: IndentWriter): Unit = { + f(w) w.wl("#ifdef __cplusplus") w.wl("} // extern \"C\"") w.wl("#endif // __cplusplus") @@ -76,13 +74,7 @@ class CGenerator(spec: Spec) extends Generator(spec) { publicIncludes.foreach(w.wl) w.wl - - writeExternCBegin(w) - w.wl - header(w) - - writeExternCEnd(w) }) writeCFile(origin, ident, "cpp", (w: IndentWriter) => { @@ -151,6 +143,19 @@ class CGenerator(spec: Spec) extends Generator(spec) { } } + private def writeCppWrapperClass(ident: Ident, cppClassName: String, w: IndentWriter, body: IndentWriter => Unit): Unit = { + val typeName = resolveRefSymbolTypeName(ident) + wrapNamespace(w, spec.cppNamespace + "::c_wrappers", (w: IndentWriter) => { + w.w(s"template