cppImplStubContent function

String cppImplStubContent({
  1. required String lib,
  2. required String className,
  3. required bool isNativeCpp,
  4. bool isAndroidCpp = false,
  5. required bool iosIsCpp,
  6. required bool macosIsCpp,
})

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();
}