@@ -541,7 +541,7 @@ def generate_builtin_class_header(builtin_api, size, used_classes, fully_used_cl
541
541
result .append ("#include <godot_cpp/variant/vector4.hpp>" )
542
542
result .append ("" )
543
543
544
- if is_packed_array (class_name ):
544
+ if is_packed_array (class_name ) or class_name == "Array" :
545
545
result .append ("#include <godot_cpp/core/error_macros.hpp>" )
546
546
result .append ("#include <initializer_list>" )
547
547
result .append ("" )
@@ -907,6 +907,53 @@ def generate_builtin_class_header(builtin_api, size, used_classes, fully_used_cl
907
907
result .append ("\t Variant &operator[](int64_t p_index);" )
908
908
result .append ("\t void set_typed(uint32_t p_type, const StringName &p_class_name, const Variant &p_script);" )
909
909
result .append ("\t void _ref(const Array &p_from) const;" )
910
+ result .append ("""
911
+ struct Iterator {
912
+ _FORCE_INLINE_ Variant &operator*() const;
913
+ _FORCE_INLINE_ Variant *operator->() const;
914
+ _FORCE_INLINE_ Iterator &operator++();
915
+ _FORCE_INLINE_ Iterator &operator--();
916
+
917
+ _FORCE_INLINE_ bool operator==(const Iterator &b) const { return elem_ptr == b.elem_ptr; }
918
+ _FORCE_INLINE_ bool operator!=(const Iterator &b) const { return elem_ptr != b.elem_ptr; }
919
+
920
+ Iterator(Variant *p_ptr) { elem_ptr = p_ptr; }
921
+ Iterator() {}
922
+ Iterator(const Iterator &p_it) { elem_ptr = p_it.elem_ptr; }
923
+
924
+ private:
925
+ Variant *elem_ptr = nullptr;
926
+ };
927
+
928
+ struct ConstIterator {
929
+ _FORCE_INLINE_ const Variant &operator*() const;
930
+ _FORCE_INLINE_ const Variant *operator->() const;
931
+ _FORCE_INLINE_ ConstIterator &operator++();
932
+ _FORCE_INLINE_ ConstIterator &operator--();
933
+
934
+ _FORCE_INLINE_ bool operator==(const ConstIterator &b) const { return elem_ptr == b.elem_ptr; }
935
+ _FORCE_INLINE_ bool operator!=(const ConstIterator &b) const { return elem_ptr != b.elem_ptr; }
936
+
937
+ ConstIterator(const Variant *p_ptr) { elem_ptr = p_ptr; }
938
+ ConstIterator() {}
939
+ ConstIterator(const ConstIterator &p_it) { elem_ptr = p_it.elem_ptr; }
940
+
941
+ private:
942
+ const Variant *elem_ptr = nullptr;
943
+ };
944
+
945
+ _FORCE_INLINE_ Iterator begin();
946
+ _FORCE_INLINE_ Iterator end();
947
+
948
+ _FORCE_INLINE_ ConstIterator begin() const;
949
+ _FORCE_INLINE_ ConstIterator end() const;
950
+ """ )
951
+ result .append ("\t _FORCE_INLINE_ Array(std::initializer_list<Variant> p_init);" )
952
+ result .append ("" )
953
+ result .append ("\t protected:" )
954
+ result .append ("" )
955
+ result .append ("\t const Variant *ptr() const;" )
956
+ result .append ("\t Variant *ptrw();" )
910
957
911
958
if class_name == "Dictionary" :
912
959
result .append ("\t const Variant &operator[](const Variant &p_key) const;" )
0 commit comments