/********************************************************************* * NAN - Native Abstractions for Node.js * * Copyright (c) 2017 NAN contributors * * MIT License ********************************************************************/ #ifndef NAN_CONVERTERS_H_ #define NAN_CONVERTERS_H_ namespace imp { template struct ToFactoryBase { typedef MaybeLocal return_t; }; template struct ValueFactoryBase { typedef Maybe return_t; }; template struct ToFactory; template<> struct ToFactory : ToFactoryBase { static inline return_t convert(v8::Local val) { if (val.IsEmpty() || !val->IsFunction()) return MaybeLocal(); return MaybeLocal(val.As()); } }; #define X(TYPE) \ template<> \ struct ToFactory : ToFactoryBase { \ static inline return_t convert(v8::Local val); \ }; X(Boolean) X(Number) X(String) X(Object) X(Integer) X(Uint32) X(Int32) #undef X #define X(TYPE) \ template<> \ struct ToFactory : ValueFactoryBase { \ static inline return_t convert(v8::Local val); \ }; X(bool) X(double) X(int64_t) X(uint32_t) X(int32_t) #undef X } // end of namespace imp template inline typename imp::ToFactory::return_t To(v8::Local val) { return imp::ToFactory::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_