Blame view

node_modules/nan/nan_converters.h 2.06 KB
2a09d1a4   liuqimichale   添加宜春 天水 宣化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
  /*********************************************************************
   * 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_