/* * Copyright (c) 2022, Idan Horowitz * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace JS::Intl { class SegmentIterator final : public Object { JS_OBJECT(SegmentIterator, Object); public: static SegmentIterator* create(GlobalObject&, Segmenter&, Utf16View const&); SegmentIterator(GlobalObject&, Segmenter&, Utf16View const&); virtual ~SegmentIterator() override = default; Segmenter const& iterating_segmenter() const { return m_iterating_segmenter; } Utf16View const& iterated_string() const { return m_iterated_string; } size_t iterated_string_next_segment_code_unit_index() const { return m_iterated_string_next_segment_code_unit_index; } private: virtual void visit_edges(Cell::Visitor&) override; Segmenter& m_iterating_segmenter; // [[IteratingSegmenter]] Utf16View m_iterated_string; // [[IteratedString]] size_t m_iterated_string_next_segment_code_unit_index { 0 }; // [[IteratedStringNextSegmentCodeUnitIndex]] }; }