#pragma once #include #include "transferable.h" #include namespace ivm { class ExternalCopy; class ExternalCopyHandle final : public TransferableHandle { public: class ExternalCopyTransferable : public Transferable { private: std::shared_ptr value; public: explicit ExternalCopyTransferable(std::shared_ptr value); auto TransferIn() -> v8::Local final; }; std::shared_ptr value; void CheckDisposed() const; explicit ExternalCopyHandle(std::shared_ptr value); ExternalCopyHandle(const ExternalCopyHandle&) = delete; auto operator= (const ExternalCopyHandle&) -> ExternalCopyHandle& = delete; ~ExternalCopyHandle() final; static auto Definition() -> v8::Local; auto TransferOut() -> std::unique_ptr final; static auto New(v8::Local value, v8::MaybeLocal maybe_options) -> std::unique_ptr; static auto TotalExternalSizeGetter() -> v8::Local; auto Copy(v8::MaybeLocal maybe_options) -> v8::Local; auto CopyInto(v8::MaybeLocal maybe_options) -> v8::Local; auto Release() -> v8::Local; auto GetValue() const -> std::shared_ptr { return value; } private: int size = 0; }; class ExternalCopyIntoHandle : public TransferableHandle { private: class ExternalCopyIntoTransferable : public Transferable { private: std::shared_ptr value; bool transfer_in; public: explicit ExternalCopyIntoTransferable(std::shared_ptr value, bool transfer_in); auto TransferIn() -> v8::Local final; }; std::shared_ptr value; bool transfer_in; public: explicit ExternalCopyIntoHandle(std::shared_ptr value, bool transfer_in); static auto Definition() -> v8::Local; auto TransferOut() -> std::unique_ptr final; }; } // namespace ivm