///
/// JHybridStreamFactorySpec.cpp
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
/// https://github.com/mrousavy/nitro
/// Copyright © 2024 Marc Rousavy @ Margelo
///

#include "JHybridStreamFactorySpec.hpp"

// Forward declaration of `HybridInputStreamSpec` to properly resolve imports.
namespace margelo::nitro::fastio { class HybridInputStreamSpec; }

#include <memory>
#include "HybridInputStreamSpec.hpp"
#include "JHybridInputStreamSpec.hpp"
#include <NitroModules/JNISharedPtr.hpp>
#include <string>

namespace margelo::nitro::fastio {

  jni::local_ref<JHybridStreamFactorySpec::jhybriddata> JHybridStreamFactorySpec::initHybrid(jni::alias_ref<jhybridobject> jThis) {
    return makeCxxInstance(jThis);
  }

  void JHybridStreamFactorySpec::registerNatives() {
    registerHybrid({
      makeNativeMethod("initHybrid", JHybridStreamFactorySpec::initHybrid),
    });
  }

  size_t JHybridStreamFactorySpec::getExternalMemorySize() noexcept {
    static const auto method = _javaPart->getClass()->getMethod<jlong()>("getMemorySize");
    return method(_javaPart);
  }

  // Properties
  double JHybridStreamFactorySpec::getBufferSize() {
    static const auto method = _javaPart->getClass()->getMethod<double()>("getBufferSize");
    auto __result = method(_javaPart);
    return __result;
  }

  // Methods
  std::shared_ptr<margelo::nitro::fastio::HybridInputStreamSpec> JHybridStreamFactorySpec::createInputStream(const std::string& path) {
    static const auto method = _javaPart->getClass()->getMethod<jni::local_ref<JHybridInputStreamSpec::javaobject>(jni::alias_ref<jni::JString> /* path */)>("createInputStream");
    auto __result = method(_javaPart, jni::make_jstring(path));
    return JNISharedPtr::make_shared_from_jni<JHybridInputStreamSpec>(jni::make_global(__result));
  }

} // namespace margelo::nitro::fastio
