Serenity Operating System
at master 40 lines 959 B view raw
1/* 2 * Copyright (c) 2021, Idan Horowitz <idan.horowitz@serenityos.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#pragma once 8 9#include <AK/HashMap.h> 10#include <LibJS/Runtime/Map.h> 11#include <LibJS/Runtime/Object.h> 12 13namespace JS { 14 15class MapIterator final : public Object { 16 JS_OBJECT(MapIterator, Object); 17 18public: 19 static NonnullGCPtr<MapIterator> create(Realm&, Map& map, Object::PropertyKind iteration_kind); 20 21 virtual ~MapIterator() override = default; 22 23 Map& map() const { return m_map; } 24 bool done() const { return m_done; } 25 Object::PropertyKind iteration_kind() const { return m_iteration_kind; } 26 27private: 28 friend class MapIteratorPrototype; 29 30 explicit MapIterator(Map& map, Object::PropertyKind iteration_kind, Object& prototype); 31 32 virtual void visit_edges(Cell::Visitor&) override; 33 34 Map& m_map; 35 bool m_done { false }; 36 Object::PropertyKind m_iteration_kind; 37 Map::ConstIterator m_iterator; 38}; 39 40}