// // ScriptValueIteratorV8Wrapper.h // libraries/script-engine/src/v8 // // Created by Heather Anderson on 8/29/21. // Modified for V8 by dr Karol Suprynowicz on 2022/10/08 // Copyright 2021 Vircadia contributors. // Copyright 2022-2023 Overte e.V. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // SPDX-License-Identifier: Apache-2.0 // /// @addtogroup ScriptEngine /// @{ #ifndef hifi_ScriptValueIteratorV8Wrapper_h #define hifi_ScriptValueIteratorV8Wrapper_h #include #include "../ScriptValueIterator.h" #include "ScriptEngineV8.h" #include "ScriptValueV8Wrapper.h" class V8ScriptValueIterator { public: V8ScriptValueIterator(ScriptEngineV8* engine, v8::Local object); ~V8ScriptValueIterator(); bool hasNext() const; QString name() const; void next(); V8ScriptValue value(); private: // V8TODO: maybe these should be WeakPersistent? v8::UniquePersistent _propertyNames; v8::UniquePersistent _object; v8::UniquePersistent _context; int _length; int _currentIndex; ScriptEngineV8 *_engine; Q_DISABLE_COPY(V8ScriptValueIterator) }; /// [V8] Implements ScriptValueIterator for V8 and translates calls for V8ScriptValueIterator class ScriptValueIteratorV8Wrapper final : public ScriptValueIterator { public: // construction inline ScriptValueIteratorV8Wrapper(ScriptEngineV8* engine, const ScriptValue& object) : _engine(engine), _value(new V8ScriptValueIterator(engine, ScriptValueV8Wrapper::fullUnwrap(engine, object).get())) {} inline ScriptValueIteratorV8Wrapper(ScriptEngineV8* engine, const V8ScriptValue& object) : _engine(engine), _value(new V8ScriptValueIterator(engine, object.constGet())) {} public: // ScriptValueIterator implementation virtual ScriptValue::PropertyFlags flags() const override; virtual bool hasNext() const override; virtual QString name() const override; virtual void next() override; virtual ScriptValue value() const override; private: // storage ScriptEngineV8 *_engine; std::shared_ptr _value; }; #endif // hifi_ScriptValueIteratorV8Wrapper_h /// @}