%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
#ifndef SRC_ALIASED_STRUCT_H_ #define SRC_ALIASED_STRUCT_H_ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS #include "node_internals.h" #include "v8.h" #include <memory> namespace node { // AliasedStruct is a utility that allows uses a V8 Backing Store // to be exposed to the C++/C side as a struct and to the // JavaScript side as an ArrayBuffer to efficiently share // data without marshalling. It is similar in nature to // AliasedBuffer. // // struct Foo { int x; } // // AliasedStruct<Foo> foo; // foo->x = 1; // // Local<ArrayBuffer> ab = foo.GetArrayBuffer(); template <typename T> class AliasedStruct final { public: template <typename... Args> explicit AliasedStruct(v8::Isolate* isolate, Args&&... args); inline AliasedStruct(const AliasedStruct& that); inline ~AliasedStruct(); inline AliasedStruct& operator=(AliasedStruct&& that) noexcept; v8::Local<v8::ArrayBuffer> GetArrayBuffer() const { return buffer_.Get(isolate_); } const T* Data() const { return ptr_; } T* Data() { return ptr_; } const T& operator*() const { return *ptr_; } T& operator*() { return *ptr_; } const T* operator->() const { return ptr_; } T* operator->() { return ptr_; } private: v8::Isolate* isolate_; std::shared_ptr<v8::BackingStore> store_; T* ptr_; v8::Global<v8::ArrayBuffer> buffer_; }; } // namespace node #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS #endif // SRC_ALIASED_STRUCT_H_