Subversion Repositories php-qbpwcf

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 liveuser 1
/*********************************************************************
2
 * NAN - Native Abstractions for Node.js
3
 *
4
 * Copyright (c) 2016 NAN contributors
5
 *
6
 * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
7
 ********************************************************************/
8
 
9
#ifndef NAN_MAYBE_PRE_43_INL_H_
10
#define NAN_MAYBE_PRE_43_INL_H_
11
 
12
template<typename T>
13
class MaybeLocal {
14
 public:
15
  inline MaybeLocal() : val_(v8::Local<T>()) {}
16
 
17
  template<typename S>
18
# if NODE_MODULE_VERSION >= NODE_0_12_MODULE_VERSION
19
  inline MaybeLocal(v8::Local<S> that) : val_(that) {}
20
# else
21
  inline MaybeLocal(v8::Local<S> that) :
22
      val_(*reinterpret_cast<v8::Local<T>*>(&that)) {}
23
# endif
24
 
25
  inline bool IsEmpty() const { return val_.IsEmpty(); }
26
 
27
  template<typename S>
28
  inline bool ToLocal(v8::Local<S> *out) const {
29
    *out = val_;
30
    return !IsEmpty();
31
  }
32
 
33
  inline v8::Local<T> ToLocalChecked() const {
34
#if defined(V8_ENABLE_CHECKS)
35
    assert(!IsEmpty() && "ToLocalChecked is Empty");
36
#endif  // V8_ENABLE_CHECKS
37
    return val_;
38
  }
39
 
40
  template<typename S>
41
  inline v8::Local<S> FromMaybe(v8::Local<S> default_value) const {
42
    return IsEmpty() ? default_value : val_;
43
  }
44
 
45
 private:
46
  v8::Local<T> val_;
47
};
48
 
49
template<typename T>
50
class Maybe {
51
 public:
52
  inline bool IsNothing() const { return !has_value_; }
53
  inline bool IsJust() const { return has_value_; }
54
 
55
  inline T FromJust() const {
56
#if defined(V8_ENABLE_CHECKS)
57
    assert(IsJust() && "FromJust is Nothing");
58
#endif  // V8_ENABLE_CHECKS
59
    return value_;
60
  }
61
 
62
  inline T FromMaybe(const T& default_value) const {
63
    return has_value_ ? value_ : default_value;
64
  }
65
 
66
  inline bool operator==(const Maybe &other) const {
67
    return (IsJust() == other.IsJust()) &&
68
        (!IsJust() || FromJust() == other.FromJust());
69
  }
70
 
71
  inline bool operator!=(const Maybe &other) const {
72
    return !operator==(other);
73
  }
74
 
75
 private:
76
  Maybe() : has_value_(false) {}
77
  explicit Maybe(const T& t) : has_value_(true), value_(t) {}
78
  bool has_value_;
79
  T value_;
80
 
81
  template<typename U>
82
  friend Maybe<U> Nothing();
83
  template<typename U>
84
  friend Maybe<U> Just(const U& u);
85
};
86
 
87
template<typename T>
88
inline Maybe<T> Nothing() {
89
  return Maybe<T>();
90
}
91
 
92
template<typename T>
93
inline Maybe<T> Just(const T& t) {
94
  return Maybe<T>(t);
95
}
96
 
97
inline
98
MaybeLocal<v8::String> ToDetailString(v8::Handle<v8::Value> val) {
99
  return MaybeLocal<v8::String>(val->ToDetailString());
100
}
101
 
102
inline
103
MaybeLocal<v8::Uint32> ToArrayIndex(v8::Handle<v8::Value> val) {
104
  return MaybeLocal<v8::Uint32>(val->ToArrayIndex());
105
}
106
 
107
inline
108
Maybe<bool> Equals(v8::Handle<v8::Value> a, v8::Handle<v8::Value>(b)) {
109
  return Just<bool>(a->Equals(b));
110
}
111
 
112
inline
113
MaybeLocal<v8::Object> NewInstance(v8::Handle<v8::Function> h) {
114
  return MaybeLocal<v8::Object>(h->NewInstance());
115
}
116
 
117
inline
118
MaybeLocal<v8::Object> NewInstance(
119
      v8::Local<v8::Function> h
120
    , int argc
121
    , v8::Local<v8::Value> argv[]) {
122
  return MaybeLocal<v8::Object>(h->NewInstance(argc, argv));
123
}
124
 
125
inline
126
MaybeLocal<v8::Object> NewInstance(v8::Handle<v8::ObjectTemplate> h) {
127
  return MaybeLocal<v8::Object>(h->NewInstance());
128
}
129
 
130
inline
131
MaybeLocal<v8::Function> GetFunction(v8::Handle<v8::FunctionTemplate> t) {
132
  return MaybeLocal<v8::Function>(t->GetFunction());
133
}
134
 
135
inline Maybe<bool> Set(
136
    v8::Handle<v8::Object> obj
137
  , v8::Handle<v8::Value> key
138
  , v8::Handle<v8::Value> value) {
139
  return Just<bool>(obj->Set(key, value));
140
}
141
 
142
inline Maybe<bool> Set(
143
    v8::Handle<v8::Object> obj
144
  , uint32_t index
145
  , v8::Handle<v8::Value> value) {
146
  return Just<bool>(obj->Set(index, value));
147
}
148
 
149
inline Maybe<bool> ForceSet(
150
    v8::Handle<v8::Object> obj
151
  , v8::Handle<v8::Value> key
152
  , v8::Handle<v8::Value> value
153
  , v8::PropertyAttribute attribs = v8::None) {
154
  return Just<bool>(obj->ForceSet(key, value, attribs));
155
}
156
 
157
inline MaybeLocal<v8::Value> Get(
158
    v8::Handle<v8::Object> obj
159
  , v8::Handle<v8::Value> key) {
160
  return MaybeLocal<v8::Value>(obj->Get(key));
161
}
162
 
163
inline MaybeLocal<v8::Value> Get(
164
    v8::Handle<v8::Object> obj
165
  , uint32_t index) {
166
  return MaybeLocal<v8::Value>(obj->Get(index));
167
}
168
 
169
inline Maybe<v8::PropertyAttribute> GetPropertyAttributes(
170
    v8::Handle<v8::Object> obj
171
  , v8::Handle<v8::Value> key) {
172
  return Just<v8::PropertyAttribute>(obj->GetPropertyAttributes(key));
173
}
174
 
175
inline Maybe<bool> Has(
176
    v8::Handle<v8::Object> obj
177
  , v8::Handle<v8::String> key) {
178
  return Just<bool>(obj->Has(key));
179
}
180
 
181
inline Maybe<bool> Has(
182
    v8::Handle<v8::Object> obj
183
  , uint32_t index) {
184
  return Just<bool>(obj->Has(index));
185
}
186
 
187
inline Maybe<bool> Delete(
188
    v8::Handle<v8::Object> obj
189
  , v8::Handle<v8::String> key) {
190
  return Just<bool>(obj->Delete(key));
191
}
192
 
193
inline Maybe<bool> Delete(
194
    v8::Handle<v8::Object> obj
195
  , uint32_t index) {
196
  return Just<bool>(obj->Delete(index));
197
}
198
 
199
inline
200
MaybeLocal<v8::Array> GetPropertyNames(v8::Handle<v8::Object> obj) {
201
  return MaybeLocal<v8::Array>(obj->GetPropertyNames());
202
}
203
 
204
inline
205
MaybeLocal<v8::Array> GetOwnPropertyNames(v8::Handle<v8::Object> obj) {
206
  return MaybeLocal<v8::Array>(obj->GetOwnPropertyNames());
207
}
208
 
209
inline Maybe<bool> SetPrototype(
210
    v8::Handle<v8::Object> obj
211
  , v8::Handle<v8::Value> prototype) {
212
  return Just<bool>(obj->SetPrototype(prototype));
213
}
214
 
215
inline MaybeLocal<v8::String> ObjectProtoToString(
216
    v8::Handle<v8::Object> obj) {
217
  return MaybeLocal<v8::String>(obj->ObjectProtoToString());
218
}
219
 
220
inline Maybe<bool> HasOwnProperty(
221
    v8::Handle<v8::Object> obj
222
  , v8::Handle<v8::String> key) {
223
  return Just<bool>(obj->HasOwnProperty(key));
224
}
225
 
226
inline Maybe<bool> HasRealNamedProperty(
227
    v8::Handle<v8::Object> obj
228
  , v8::Handle<v8::String> key) {
229
  return Just<bool>(obj->HasRealNamedProperty(key));
230
}
231
 
232
inline Maybe<bool> HasRealIndexedProperty(
233
    v8::Handle<v8::Object> obj
234
  , uint32_t index) {
235
  return Just<bool>(obj->HasRealIndexedProperty(index));
236
}
237
 
238
inline Maybe<bool> HasRealNamedCallbackProperty(
239
    v8::Handle<v8::Object> obj
240
  , v8::Handle<v8::String> key) {
241
  return Just<bool>(obj->HasRealNamedCallbackProperty(key));
242
}
243
 
244
inline MaybeLocal<v8::Value> GetRealNamedPropertyInPrototypeChain(
245
    v8::Handle<v8::Object> obj
246
  , v8::Handle<v8::String> key) {
247
  return MaybeLocal<v8::Value>(
248
      obj->GetRealNamedPropertyInPrototypeChain(key));
249
}
250
 
251
inline MaybeLocal<v8::Value> GetRealNamedProperty(
252
    v8::Handle<v8::Object> obj
253
  , v8::Handle<v8::String> key) {
254
  return MaybeLocal<v8::Value>(obj->GetRealNamedProperty(key));
255
}
256
 
257
inline MaybeLocal<v8::Value> CallAsFunction(
258
    v8::Handle<v8::Object> obj
259
  , v8::Handle<v8::Object> recv
260
  , int argc
261
  , v8::Handle<v8::Value> argv[]) {
262
  return MaybeLocal<v8::Value>(obj->CallAsFunction(recv, argc, argv));
263
}
264
 
265
inline MaybeLocal<v8::Value> CallAsConstructor(
266
    v8::Handle<v8::Object> obj
267
  , int argc
268
  , v8::Local<v8::Value> argv[]) {
269
  return MaybeLocal<v8::Value>(obj->CallAsConstructor(argc, argv));
270
}
271
 
272
inline
273
MaybeLocal<v8::String> GetSourceLine(v8::Handle<v8::Message> msg) {
274
  return MaybeLocal<v8::String>(msg->GetSourceLine());
275
}
276
 
277
inline Maybe<int> GetLineNumber(v8::Handle<v8::Message> msg) {
278
  return Just<int>(msg->GetLineNumber());
279
}
280
 
281
inline Maybe<int> GetStartColumn(v8::Handle<v8::Message> msg) {
282
  return Just<int>(msg->GetStartColumn());
283
}
284
 
285
inline Maybe<int> GetEndColumn(v8::Handle<v8::Message> msg) {
286
  return Just<int>(msg->GetEndColumn());
287
}
288
 
289
inline MaybeLocal<v8::Object> CloneElementAt(
290
    v8::Handle<v8::Array> array
291
  , uint32_t index) {
292
  return MaybeLocal<v8::Object>(array->CloneElementAt(index));
293
}
294
 
295
inline MaybeLocal<v8::Value> Call(
296
    v8::Local<v8::Function> fun
297
  , v8::Local<v8::Object> recv
298
  , int argc
299
  , v8::Local<v8::Value> argv[]) {
300
  return MaybeLocal<v8::Value>(fun->Call(recv, argc, argv));
301
}
302
 
303
#endif  // NAN_MAYBE_PRE_43_INL_H_