/
githubmirror
/
node
Обзор
Документация
Войти
/
githubmirror
/
node
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
v25.8.2
src/aliased_struct.h
63 строки
1 KB
James M Snell
src: add AliasedStruct utility
14 апр 2020, 03:21
Не верифицирован
14 апр 2020, 03:21
cecb08f
Код
Авторство
О чём код?
#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_