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.
		
		
		
		
			
				
					73 lines
				
				2.1 KiB
			
		
		
			
		
	
	
					73 lines
				
				2.1 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								/*********************************************************************
							 | 
						||
| 
								 | 
							
								 * NAN - Native Abstractions for Node.js
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Copyright (c) 2018 NAN contributors
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
							 | 
						||
| 
								 | 
							
								 ********************************************************************/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef NAN_CONVERTERS_H_
							 | 
						||
| 
								 | 
							
								#define NAN_CONVERTERS_H_
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace imp {
							 | 
						||
| 
								 | 
							
								template<typename T> struct ToFactoryBase {
							 | 
						||
| 
								 | 
							
								  typedef MaybeLocal<T> return_t;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								template<typename T> struct ValueFactoryBase { typedef Maybe<T> return_t; };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template<typename T> struct ToFactory;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template<>
							 | 
						||
| 
								 | 
							
								struct ToFactory<v8::Function> : ToFactoryBase<v8::Function> {
							 | 
						||
| 
								 | 
							
								  static inline return_t convert(v8::Local<v8::Value> val) {
							 | 
						||
| 
								 | 
							
								    if (val.IsEmpty() || !val->IsFunction()) return MaybeLocal<v8::Function>();
							 | 
						||
| 
								 | 
							
								    return MaybeLocal<v8::Function>(val.As<v8::Function>());
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define X(TYPE)                                                                \
							 | 
						||
| 
								 | 
							
								    template<>                                                                 \
							 | 
						||
| 
								 | 
							
								    struct ToFactory<v8::TYPE> : ToFactoryBase<v8::TYPE> {                     \
							 | 
						||
| 
								 | 
							
								      static inline return_t convert(v8::Local<v8::Value> val);                \
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								X(Boolean)
							 | 
						||
| 
								 | 
							
								X(Number)
							 | 
						||
| 
								 | 
							
								X(String)
							 | 
						||
| 
								 | 
							
								X(Object)
							 | 
						||
| 
								 | 
							
								X(Integer)
							 | 
						||
| 
								 | 
							
								X(Uint32)
							 | 
						||
| 
								 | 
							
								X(Int32)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#undef X
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define X(TYPE)                                                                \
							 | 
						||
| 
								 | 
							
								    template<>                                                                 \
							 | 
						||
| 
								 | 
							
								    struct ToFactory<TYPE> : ValueFactoryBase<TYPE> {                          \
							 | 
						||
| 
								 | 
							
								      static inline return_t convert(v8::Local<v8::Value> val);                \
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								X(bool)
							 | 
						||
| 
								 | 
							
								X(double)
							 | 
						||
| 
								 | 
							
								X(int64_t)
							 | 
						||
| 
								 | 
							
								X(uint32_t)
							 | 
						||
| 
								 | 
							
								X(int32_t)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#undef X
							 | 
						||
| 
								 | 
							
								}  // end of namespace imp
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template<typename T>
							 | 
						||
| 
								 | 
							
								inline
							 | 
						||
| 
								 | 
							
								typename imp::ToFactory<T>::return_t To(v8::Local<v8::Value> val) {
							 | 
						||
| 
								 | 
							
								  return imp::ToFactory<T>::convert(val);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 ||                      \
							 | 
						||
| 
								 | 
							
								  (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3))
							 | 
						||
| 
								 | 
							
								# include "nan_converters_43_inl.h"
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								# include "nan_converters_pre_43_inl.h"
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif  // NAN_CONVERTERS_H_
							 |