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.
		
		
		
		
		
			
		
			
				
					193 lines
				
				7.1 KiB
			
		
		
			
		
	
	
					193 lines
				
				7.1 KiB
			| 
											3 years ago
										 | #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_
 |