/// /// HybridHaptikaPPGFrameProcessorSpec_cxx.swift /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro /// Copyright © Marc Rousavy @ Margelo /// import NitroModules import VisionCamera /** * A class implementation that bridges HybridHaptikaPPGFrameProcessorSpec over to C++. * In C++, we cannot use Swift protocols - so we need to wrap it in a class to make it strongly defined. * * Also, some Swift types need to be bridged with special handling: * - Enums need to be wrapped in Structs, otherwise they cannot be accessed bi-directionally (Swift bug: https://github.com/swiftlang/swift/issues/75330) * - Other HybridObjects need to be wrapped/unwrapped from the Swift TCxx wrapper * - Throwing methods need to be wrapped with a Result type, as exceptions cannot be propagated to C++ */ open class HybridHaptikaPPGFrameProcessorSpec_cxx { /** * The Swift <> C++ bridge's namespace (`margelo::nitro::haptika::ppg::bridge::swift`) * from `HaptikaPPG-Swift-Cxx-Bridge.hpp`. * This contains specialized C++ templates, and C++ helper functions that can be accessed from Swift. */ public typealias bridge = margelo.nitro.haptika.ppg.bridge.swift /** * Holds an instance of the `HybridHaptikaPPGFrameProcessorSpec` Swift protocol. */ private var __implementation: any HybridHaptikaPPGFrameProcessorSpec /** * Holds a weak pointer to the C++ class that wraps the Swift class. */ private var __cxxPart: bridge.std__weak_ptr_HybridHaptikaPPGFrameProcessorSpec_ /** * Create a new `HybridHaptikaPPGFrameProcessorSpec_cxx` that wraps the given `HybridHaptikaPPGFrameProcessorSpec`. * All properties and methods bridge to C++ types. */ public init(_ implementation: any HybridHaptikaPPGFrameProcessorSpec) { self.__implementation = implementation self.__cxxPart = .init() /* no base class */ } /** * Get the actual `HybridHaptikaPPGFrameProcessorSpec` instance this class wraps. */ @inline(__always) public func getHybridHaptikaPPGFrameProcessorSpec() -> any HybridHaptikaPPGFrameProcessorSpec { return __implementation } /** * Casts this instance to a retained unsafe raw pointer. * This acquires one additional strong reference on the object! */ public func toUnsafe() -> UnsafeMutableRawPointer { return Unmanaged.passRetained(self).toOpaque() } /** * Casts an unsafe pointer to a `HybridHaptikaPPGFrameProcessorSpec_cxx`. * The pointer has to be a retained opaque `Unmanaged`. * This removes one strong reference from the object! */ public class func fromUnsafe(_ pointer: UnsafeMutableRawPointer) -> HybridHaptikaPPGFrameProcessorSpec_cxx { return Unmanaged.fromOpaque(pointer).takeRetainedValue() } /** * Gets (or creates) the C++ part of this Hybrid Object. * The C++ part is a `std::shared_ptr`. */ public func getCxxPart() -> bridge.std__shared_ptr_HybridHaptikaPPGFrameProcessorSpec_ { let cachedCxxPart = self.__cxxPart.lock() if Bool(fromCxx: cachedCxxPart) { return cachedCxxPart } else { let newCxxPart = bridge.create_std__shared_ptr_HybridHaptikaPPGFrameProcessorSpec_(self.toUnsafe()) __cxxPart = bridge.weakify_std__shared_ptr_HybridHaptikaPPGFrameProcessorSpec_(newCxxPart) return newCxxPart } } /** * Get the memory size of the Swift class (plus size of any other allocations) * so the JS VM can properly track it and garbage-collect the JS object if needed. */ @inline(__always) public var memorySize: Int { return MemoryHelper.getSizeOf(self.__implementation) + self.__implementation.memorySize } /** * Compares this object with the given [other] object for reference equality. */ @inline(__always) public func equals(other: HybridHaptikaPPGFrameProcessorSpec_cxx) -> Bool { return self.__implementation === other.__implementation } /** * Call dispose() on the Swift class. * This _may_ be called manually from JS. */ @inline(__always) public func dispose() { self.__implementation.dispose() } /** * Call toString() on the Swift class. */ @inline(__always) public func toString() -> String { return self.__implementation.toString() } // Properties // Methods @inline(__always) public final func startMeasurement(configuration: NativePPGConfiguration) -> bridge.Result_void_ { do { try self.__implementation.startMeasurement(configuration: configuration) return bridge.create_Result_void_() } catch (let __error) { let __exceptionPtr = __error.toCpp() return bridge.create_Result_void_(__exceptionPtr) } } @inline(__always) public final func processFrame(frame: bridge.std__shared_ptr_margelo__nitro__camera__HybridFrameSpec_) -> bridge.Result_std__optional_PPGFrameUpdate__ { do { let __result = try self.__implementation.processFrame(frame: { () -> any HybridFrameSpec in let __unsafePointer = bridge.get_std__shared_ptr_margelo__nitro__camera__HybridFrameSpec_(frame) let __instance = HybridFrameSpec_cxx.fromUnsafe(__unsafePointer) return __instance.getHybridFrameSpec() }()) let __resultCpp = { () -> bridge.std__optional_PPGFrameUpdate_ in if let __unwrappedValue = __result { return bridge.create_std__optional_PPGFrameUpdate_(__unwrappedValue) } else { return .init() } }() return bridge.create_Result_std__optional_PPGFrameUpdate__(__resultCpp) } catch (let __error) { let __exceptionPtr = __error.toCpp() return bridge.create_Result_std__optional_PPGFrameUpdate__(__exceptionPtr) } } @inline(__always) public final func finishMeasurement() -> bridge.Result_NativePPGProcessingResult_ { do { let __result = try self.__implementation.finishMeasurement() let __resultCpp = __result return bridge.create_Result_NativePPGProcessingResult_(__resultCpp) } catch (let __error) { let __exceptionPtr = __error.toCpp() return bridge.create_Result_NativePPGProcessingResult_(__exceptionPtr) } } @inline(__always) public final func cancelMeasurement() -> bridge.Result_void_ { do { try self.__implementation.cancelMeasurement() return bridge.create_Result_void_() } catch (let __error) { let __exceptionPtr = __error.toCpp() return bridge.create_Result_void_(__exceptionPtr) } } @inline(__always) public final func getThermalState() -> bridge.Result_ThermalState_ { do { let __result = try self.__implementation.getThermalState() let __resultCpp = __result return bridge.create_Result_ThermalState_(__resultCpp) } catch (let __error) { let __exceptionPtr = __error.toCpp() return bridge.create_Result_ThermalState_(__exceptionPtr) } } }