Eliminate one template param on WrapperCache::get()

This commit is contained in:
Simon Edwards 2022-04-30 20:00:03 +02:00
parent 1d92cc8f3e
commit 7bf97ef618
6 changed files with 17 additions and 18 deletions

View File

@ -30,7 +30,7 @@ class DLL_EXPORT NApplication : public QApplication, public EventWidget {
Napi::Env env = this->emitOnNode.Env();
Napi::HandleScope scope(env);
auto instance =
WrapperCache::instance.get<QScreen, QScreenWrap>(env, screen, false);
WrapperCache::instance.get<QScreen>(env, screen, &QScreenWrap::constructor, false);
this->emitOnNode.Call(
{Napi::String::New(env, "primaryScreenChanged"), instance});
});
@ -39,7 +39,7 @@ class DLL_EXPORT NApplication : public QApplication, public EventWidget {
Napi::Env env = this->emitOnNode.Env();
Napi::HandleScope scope(env);
auto instance =
WrapperCache::instance.get<QScreen, QScreenWrap>(env, screen, false);
WrapperCache::instance.get<QScreen>(env, screen, &QScreenWrap::constructor, false);
this->emitOnNode.Call({Napi::String::New(env, "screenAdded"), instance});
});
@ -48,7 +48,7 @@ class DLL_EXPORT NApplication : public QApplication, public EventWidget {
Napi::Env env = this->emitOnNode.Env();
Napi::HandleScope scope(env);
auto instance =
WrapperCache::instance.get<QScreen, QScreenWrap>(env, screen, false);
WrapperCache::instance.get<QScreen>(env, screen, &QScreenWrap::constructor, false);
this->emitOnNode.Call(
{Napi::String::New(env, "screenRemoved"), instance});
});

View File

@ -427,7 +427,7 @@
Napi::Env env = info.Env(); \
QWindow* window = this->instance->windowHandle(); \
if (window) { \
return WrapperCache::instance.get<QWindow, QWindowWrap>(env, window, false); \
return WrapperCache::instance.get<QWindow>(env, window, &QWindowWrap::constructor, false); \
} else { \
return env.Null(); \
} \

View File

@ -44,8 +44,8 @@ class DLL_EXPORT WrapperCache : public QObject {
* @param object - Pointer to the QObject for which a wrapper is required.
* @return The JS wrapper object.
*/
template <class T, class W>
Napi::Object get(Napi::Env env, T* object, bool isCreatedByNodeGui) {
template <class T>
Napi::Object get(Napi::Env env, T* object, Napi::FunctionReference* constructorFunc, bool isCreatedByNodeGui) {
uint64_t ptrHash = extrautils::hashPointerTo53bit(object);
if (this->cache.contains(ptrHash)) {
napi_value result = nullptr;
@ -58,8 +58,7 @@ class DLL_EXPORT WrapperCache : public QObject {
}
}
Napi::Object wrapper =
W::constructor.New({Napi::External<T>::New(env, object)});
Napi::Object wrapper = constructorFunc->New({Napi::External<T>::New(env, object)});
store(env, extrautils::hashPointerTo53bit(object), object, wrapper, isCreatedByNodeGui);
return wrapper;

View File

@ -118,8 +118,8 @@ Napi::Value StaticQApplicationWrapMethods::clipboard(
Napi::Env env = info.Env();
QClipboard* clipboard = QApplication::clipboard();
if (clipboard) {
return WrapperCache::instance.get<QClipboard, QClipboardWrap>(env,
clipboard, false);
return WrapperCache::instance.get<QClipboard>(env,
clipboard, &QClipboardWrap::constructor, false);
} else {
return env.Null();
}
@ -163,7 +163,7 @@ Napi::Value StaticQApplicationWrapMethods::primaryScreen(
Napi::Env env = info.Env();
auto screen = QApplication::primaryScreen();
if (screen) {
return WrapperCache::instance.get<QScreen, QScreenWrap>(env, screen, false);
return WrapperCache::instance.get<QScreen>(env, screen, &QScreenWrap::constructor, false);
} else {
return env.Null();
}
@ -177,7 +177,7 @@ Napi::Value StaticQApplicationWrapMethods::screens(
for (int i = 0; i < screens.size(); i++) {
QScreen* screen = screens[i];
auto instance =
WrapperCache::instance.get<QScreen, QScreenWrap>(env, screen, false);
WrapperCache::instance.get<QScreen>(env, screen, &QScreenWrap::constructor, false);
jsArray[i] = instance;
}
return jsArray;

View File

@ -56,7 +56,7 @@ void QWindowWrap::connectSignalsToEventEmitter() {
Napi::Env env = this->emitOnNode.Env();
Napi::HandleScope scope(env);
auto instance =
WrapperCache::instance.get<QScreen, QScreenWrap>(env, screen, false);
WrapperCache::instance.get<QScreen>(env, screen, &QScreenWrap::constructor, false);
this->emitOnNode.Call(
{Napi::String::New(env, "screenChanged"), instance});
});
@ -81,7 +81,7 @@ Napi::Value QWindowWrap::screen(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
QScreen* screen = this->instance->screen();
if (screen) {
return WrapperCache::instance.get<QScreen, QScreenWrap>(env, screen, false);
return WrapperCache::instance.get<QScreen>(env, screen, &QScreenWrap::constructor, false);
} else {
return env.Null();
}

View File

@ -47,8 +47,8 @@ void CacheTestQObjectWrap::connectSignalsToEventEmitter() {
Napi::Value CacheTestQObjectWrap::foo(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
CacheTestQObject* foo = this->instance->foo();
return WrapperCache::instance.get<CacheTestQObject, CacheTestQObjectWrap>(
env, foo, false);
return WrapperCache::instance.get<CacheTestQObject>(
env, foo, &CacheTestQObjectWrap::constructor, false);
}
Napi::Value CacheTestQObjectWrap::clearFoo(const Napi::CallbackInfo& info) {
@ -60,6 +60,6 @@ Napi::Value CacheTestQObjectWrap::clearFoo(const Napi::CallbackInfo& info) {
Napi::Value CacheTestQObjectWrap::bar(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
CacheTestQObject* bar = this->instance->bar();
return WrapperCache::instance.get<CacheTestQObject, CacheTestQObjectWrap>(
env, bar, false);
return WrapperCache::instance.get<CacheTestQObject>(
env, bar, &CacheTestQObjectWrap::constructor, false);
}