cppImplStubContent function
Returns the content of a src/Hybrid${className}.cpp implementation stub.
lib is the snake_case library name (e.g. nitro_bench).
className is the PascalCase class name (e.g. NitroBench).
isNativeCpp true when android/linux uses C++ through src/CMakeLists.txt.
iosIsCpp / macosIsCpp per-Apple-platform C++ flags.
Implementation
String cppImplStubContent({
required String lib,
required String className,
required bool isNativeCpp,
bool isAndroidCpp = false,
required bool iosIsCpp,
required bool macosIsCpp,
}) {
final guard = autoRegisterPlatformGuard(
isNativeCpp: isNativeCpp,
isAndroidCpp: isAndroidCpp,
iosIsCpp: iosIsCpp,
macosIsCpp: macosIsCpp,
);
final needsTargetConditionals = iosIsCpp || macosIsCpp;
final buf = StringBuffer()
..writeln('// Hybrid$className — NativeImpl.cpp implementation.')
..writeln('// Generated by nitrogen link. Fill in the method bodies.')
..writeln('#include "../lib/src/generated/cpp/$lib.native.g.h"')
..writeln()
..writeln('#include <string>')
..writeln()
..writeln('class Hybrid${className}Impl final : public Hybrid$className {')
..writeln('public:')
..writeln(' // TODO: implement all pure-virtual methods declared in Hybrid$className')
..writeln('};')
..writeln()
..writeln('static Hybrid${className}Impl g_impl;')
..writeln()
..writeln('// Auto-register on shared library load — no manual init call needed.');
if (needsTargetConditionals) {
buf
..writeln('#if defined(__APPLE__)')
..writeln(' #include <TargetConditionals.h>')
..writeln('#endif')
..writeln();
}
if (guard.isNotEmpty) buf.writeln('#if $guard');
buf
..writeln('#if defined(_WIN32)')
..writeln('namespace {')
..writeln(' struct _AutoRegister {')
..writeln(' _AutoRegister() { ${lib}_register_impl(&g_impl); }')
..writeln(' };')
..writeln(' _AutoRegister _auto_register_instance;')
..writeln('}')
..writeln('#else')
..writeln('__attribute__((constructor))')
..writeln('static void ${lib}_auto_register() {')
..writeln(' ${lib}_register_impl(&g_impl);')
..writeln('}')
..writeln('#endif');
if (guard.isNotEmpty) buf.writeln('#endif // auto-register on C++ platforms');
return buf.toString();
}