@@ -642,6 +642,11 @@ def generate_builtin_class_header(builtin_api, size, used_classes, fully_used_cl
642642 result .append ("" )
643643 result .append (f"\t { class_name } (const Variant *p_variant);" )
644644
645+ if class_name == "Array" :
646+ result .append ("" )
647+ result .append ("\t const Variant *ptr() const;" )
648+ result .append ("\t Variant *ptrw();" )
649+
645650 result .append ("" )
646651 result .append ("public:" )
647652
@@ -907,6 +912,47 @@ def generate_builtin_class_header(builtin_api, size, used_classes, fully_used_cl
907912 result .append ("\t Variant &operator[](int64_t p_index);" )
908913 result .append ("\t void set_typed(uint32_t p_type, const StringName &p_class_name, const Variant &p_script);" )
909914 result .append ("\t void _ref(const Array &p_from) const;" )
915+ result .append ("""
916+ struct Iterator {
917+ _FORCE_INLINE_ Variant &operator*() const;
918+ _FORCE_INLINE_ Variant *operator->() const;
919+ _FORCE_INLINE_ Iterator &operator++();
920+ _FORCE_INLINE_ Iterator &operator--();
921+
922+ _FORCE_INLINE_ bool operator==(const Iterator &b) const { return elem_ptr == b.elem_ptr; }
923+ _FORCE_INLINE_ bool operator!=(const Iterator &b) const { return elem_ptr != b.elem_ptr; }
924+
925+ Iterator(Variant *p_ptr) { elem_ptr = p_ptr; }
926+ Iterator() {}
927+ Iterator(const Iterator &p_it) { elem_ptr = p_it.elem_ptr; }
928+
929+ private:
930+ Variant *elem_ptr = nullptr;
931+ };
932+
933+ struct ConstIterator {
934+ _FORCE_INLINE_ const Variant &operator*() const;
935+ _FORCE_INLINE_ const Variant *operator->() const;
936+ _FORCE_INLINE_ ConstIterator &operator++();
937+ _FORCE_INLINE_ ConstIterator &operator--();
938+
939+ _FORCE_INLINE_ bool operator==(const ConstIterator &b) const { return elem_ptr == b.elem_ptr; }
940+ _FORCE_INLINE_ bool operator!=(const ConstIterator &b) const { return elem_ptr != b.elem_ptr; }
941+
942+ ConstIterator(const Variant *p_ptr) { elem_ptr = p_ptr; }
943+ ConstIterator() {}
944+ ConstIterator(const ConstIterator &p_it) { elem_ptr = p_it.elem_ptr; }
945+
946+ private:
947+ const Variant *elem_ptr = nullptr;
948+ };
949+
950+ _FORCE_INLINE_ Iterator begin();
951+ _FORCE_INLINE_ Iterator end();
952+
953+ _FORCE_INLINE_ ConstIterator begin() const;
954+ _FORCE_INLINE_ ConstIterator end() const;
955+ """ )
910956
911957 if class_name == "Dictionary" :
912958 result .append ("\t const Variant &operator[](const Variant &p_key) const;" )
0 commit comments