Overte C++ Documentation
ScriptValueIteratorV8Wrapper.h
1 //
2 // ScriptValueIteratorV8Wrapper.h
3 // libraries/script-engine/src/v8
4 //
5 // Created by Heather Anderson on 8/29/21.
6 // Modified for V8 by dr Karol Suprynowicz on 2022/10/08
7 // Copyright 2021 Vircadia contributors.
8 // Copyright 2022-2023 Overte e.V.
9 //
10 // Distributed under the Apache License, Version 2.0.
11 // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
12 // SPDX-License-Identifier: Apache-2.0
13 //
14 
17 
18 #ifndef hifi_ScriptValueIteratorV8Wrapper_h
19 #define hifi_ScriptValueIteratorV8Wrapper_h
20 
21 #include <QtCore/QPointer>
22 
23 #include "../ScriptValueIterator.h"
24 #include "ScriptEngineV8.h"
25 #include "ScriptValueV8Wrapper.h"
26 
27 class V8ScriptValueIterator {
28 public:
29  V8ScriptValueIterator(ScriptEngineV8* engine, v8::Local<v8::Value> object);
30  ~V8ScriptValueIterator();
31  bool hasNext() const;
32  QString name() const;
33  void next();
34  V8ScriptValue value();
35 private:
36  v8::UniquePersistent<v8::Array> _propertyNames;
37  v8::UniquePersistent<v8::Object> _object;
38  v8::UniquePersistent<v8::Context> _context;
39  int _length;
40  int _currentIndex;
41  ScriptEngineV8 *_engine;
42  Q_DISABLE_COPY(V8ScriptValueIterator)
43 };
44 
47 public: // construction
48  inline ScriptValueIteratorV8Wrapper(ScriptEngineV8* engine, const ScriptValue& object) :
49  _engine(engine), _value(new V8ScriptValueIterator(engine, ScriptValueV8Wrapper::fullUnwrap(engine, object).get())) {}
50  inline ScriptValueIteratorV8Wrapper(ScriptEngineV8* engine, const V8ScriptValue& object) :
51  _engine(engine), _value(new V8ScriptValueIterator(engine, object.constGet())) {}
52 
53 public: // ScriptValueIterator implementation
54  virtual ScriptValue::PropertyFlags flags() const override;
55  virtual bool hasNext() const override;
56  virtual QString name() const override;
57  virtual void next() override;
58  virtual ScriptValue value() const override;
59 
60 private: // storage
61  ScriptEngineV8 *_engine;
62  std::shared_ptr<V8ScriptValueIterator> _value;
63 };
64 
65 #endif // hifi_ScriptValueIteratorV8Wrapper_h
66 
[ScriptInterface] Provides an engine-independent interface for QScriptValue
Definition: ScriptValue.h:40
[ScriptInterface] Provides an engine-independent interface for QScriptValueIterator
Definition: ScriptValueIterator.h:30
[V8] Implements ScriptValueIterator for V8 and translates calls for V8ScriptValueIterator
Definition: ScriptValueIteratorV8Wrapper.h:46