You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
186 lines
6.2 KiB
186 lines
6.2 KiB
#ifndef SRC_NAPI_INL_DEPRECATED_H_ |
|
#define SRC_NAPI_INL_DEPRECATED_H_ |
|
|
|
//////////////////////////////////////////////////////////////////////////////// |
|
// PropertyDescriptor class |
|
//////////////////////////////////////////////////////////////////////////////// |
|
|
|
template <typename Getter> |
|
inline PropertyDescriptor PropertyDescriptor::Accessor( |
|
const char* utf8name, |
|
Getter getter, |
|
napi_property_attributes attributes, |
|
void* /*data*/) { |
|
using CbData = details::CallbackData<Getter, Napi::Value>; |
|
// TODO: Delete when the function is destroyed |
|
auto callbackData = new CbData({getter, nullptr}); |
|
|
|
return PropertyDescriptor({utf8name, |
|
nullptr, |
|
nullptr, |
|
CbData::Wrapper, |
|
nullptr, |
|
nullptr, |
|
attributes, |
|
callbackData}); |
|
} |
|
|
|
template <typename Getter> |
|
inline PropertyDescriptor PropertyDescriptor::Accessor( |
|
const std::string& utf8name, |
|
Getter getter, |
|
napi_property_attributes attributes, |
|
void* data) { |
|
return Accessor(utf8name.c_str(), getter, attributes, data); |
|
} |
|
|
|
template <typename Getter> |
|
inline PropertyDescriptor PropertyDescriptor::Accessor( |
|
napi_value name, |
|
Getter getter, |
|
napi_property_attributes attributes, |
|
void* /*data*/) { |
|
using CbData = details::CallbackData<Getter, Napi::Value>; |
|
// TODO: Delete when the function is destroyed |
|
auto callbackData = new CbData({getter, nullptr}); |
|
|
|
return PropertyDescriptor({nullptr, |
|
name, |
|
nullptr, |
|
CbData::Wrapper, |
|
nullptr, |
|
nullptr, |
|
attributes, |
|
callbackData}); |
|
} |
|
|
|
template <typename Getter> |
|
inline PropertyDescriptor PropertyDescriptor::Accessor( |
|
Name name, Getter getter, napi_property_attributes attributes, void* data) { |
|
napi_value nameValue = name; |
|
return PropertyDescriptor::Accessor(nameValue, getter, attributes, data); |
|
} |
|
|
|
template <typename Getter, typename Setter> |
|
inline PropertyDescriptor PropertyDescriptor::Accessor( |
|
const char* utf8name, |
|
Getter getter, |
|
Setter setter, |
|
napi_property_attributes attributes, |
|
void* /*data*/) { |
|
using CbData = details::AccessorCallbackData<Getter, Setter>; |
|
// TODO: Delete when the function is destroyed |
|
auto callbackData = new CbData({getter, setter, nullptr}); |
|
|
|
return PropertyDescriptor({utf8name, |
|
nullptr, |
|
nullptr, |
|
CbData::GetterWrapper, |
|
CbData::SetterWrapper, |
|
nullptr, |
|
attributes, |
|
callbackData}); |
|
} |
|
|
|
template <typename Getter, typename Setter> |
|
inline PropertyDescriptor PropertyDescriptor::Accessor( |
|
const std::string& utf8name, |
|
Getter getter, |
|
Setter setter, |
|
napi_property_attributes attributes, |
|
void* data) { |
|
return Accessor(utf8name.c_str(), getter, setter, attributes, data); |
|
} |
|
|
|
template <typename Getter, typename Setter> |
|
inline PropertyDescriptor PropertyDescriptor::Accessor( |
|
napi_value name, |
|
Getter getter, |
|
Setter setter, |
|
napi_property_attributes attributes, |
|
void* /*data*/) { |
|
using CbData = details::AccessorCallbackData<Getter, Setter>; |
|
// TODO: Delete when the function is destroyed |
|
auto callbackData = new CbData({getter, setter, nullptr}); |
|
|
|
return PropertyDescriptor({nullptr, |
|
name, |
|
nullptr, |
|
CbData::GetterWrapper, |
|
CbData::SetterWrapper, |
|
nullptr, |
|
attributes, |
|
callbackData}); |
|
} |
|
|
|
template <typename Getter, typename Setter> |
|
inline PropertyDescriptor PropertyDescriptor::Accessor( |
|
Name name, |
|
Getter getter, |
|
Setter setter, |
|
napi_property_attributes attributes, |
|
void* data) { |
|
napi_value nameValue = name; |
|
return PropertyDescriptor::Accessor( |
|
nameValue, getter, setter, attributes, data); |
|
} |
|
|
|
template <typename Callable> |
|
inline PropertyDescriptor PropertyDescriptor::Function( |
|
const char* utf8name, |
|
Callable cb, |
|
napi_property_attributes attributes, |
|
void* /*data*/) { |
|
using ReturnType = decltype(cb(CallbackInfo(nullptr, nullptr))); |
|
using CbData = details::CallbackData<Callable, ReturnType>; |
|
// TODO: Delete when the function is destroyed |
|
auto callbackData = new CbData({cb, nullptr}); |
|
|
|
return PropertyDescriptor({utf8name, |
|
nullptr, |
|
CbData::Wrapper, |
|
nullptr, |
|
nullptr, |
|
nullptr, |
|
attributes, |
|
callbackData}); |
|
} |
|
|
|
template <typename Callable> |
|
inline PropertyDescriptor PropertyDescriptor::Function( |
|
const std::string& utf8name, |
|
Callable cb, |
|
napi_property_attributes attributes, |
|
void* data) { |
|
return Function(utf8name.c_str(), cb, attributes, data); |
|
} |
|
|
|
template <typename Callable> |
|
inline PropertyDescriptor PropertyDescriptor::Function( |
|
napi_value name, |
|
Callable cb, |
|
napi_property_attributes attributes, |
|
void* /*data*/) { |
|
using ReturnType = decltype(cb(CallbackInfo(nullptr, nullptr))); |
|
using CbData = details::CallbackData<Callable, ReturnType>; |
|
// TODO: Delete when the function is destroyed |
|
auto callbackData = new CbData({cb, nullptr}); |
|
|
|
return PropertyDescriptor({nullptr, |
|
name, |
|
CbData::Wrapper, |
|
nullptr, |
|
nullptr, |
|
nullptr, |
|
attributes, |
|
callbackData}); |
|
} |
|
|
|
template <typename Callable> |
|
inline PropertyDescriptor PropertyDescriptor::Function( |
|
Name name, Callable cb, napi_property_attributes attributes, void* data) { |
|
napi_value nameValue = name; |
|
return PropertyDescriptor::Function(nameValue, cb, attributes, data); |
|
} |
|
|
|
#endif // !SRC_NAPI_INL_DEPRECATED_H_
|
|
|