# /!\ Autogenerated code, modifications will be lost /!\
# see `generation/generate_pool_arrays.py`

cimport cython

from godot._hazmat.gdapi cimport (
    pythonscript_gdapi10 as gdapi10,
    pythonscript_gdapi11 as gdapi11,
    pythonscript_gdapi12 as gdapi12,
)
from godot._hazmat.gdnative_api_struct cimport (
	godot_int,
	godot_pool_int_array,
	godot_pool_int_array_write_access,
	godot_pool_int_array_read_access,
	godot_real,
	godot_pool_real_array,
	godot_pool_real_array_write_access,
	godot_pool_real_array_read_access,
	uint8_t,
	godot_pool_byte_array,
	godot_pool_byte_array_write_access,
	godot_pool_byte_array_read_access,
	godot_vector2,
	godot_pool_vector2_array,
	godot_pool_vector2_array_write_access,
	godot_pool_vector2_array_read_access,
	godot_vector3,
	godot_pool_vector3_array,
	godot_pool_vector3_array_write_access,
	godot_pool_vector3_array_read_access,
	godot_color,
	godot_pool_color_array,
	godot_pool_color_array_write_access,
	godot_pool_color_array_read_access,
	godot_string,
	godot_pool_string_array,
	godot_pool_string_array_write_access,
	godot_pool_string_array_read_access,
)
from godot.builtins cimport (
	Array,
	Vector2,
	Vector3,
	Color,
	GDString,
)


@cython.final
cdef class PoolIntArray:
    cdef godot_pool_int_array _gd_data

    @staticmethod
    cdef inline PoolIntArray new()

    @staticmethod
    cdef inline PoolIntArray new_with_array(Array other)

    # Operators

    cdef inline bint operator_equal(self, PoolIntArray other)
    cdef inline godot_int operator_getitem(self, godot_int index)
    cdef inline PoolIntArray operator_getslice(self, godot_int start, godot_int end, godot_int step)

    # Methods

    cpdef inline PoolIntArray copy(self)
    cpdef inline void append(self, godot_int data)
    cdef inline void append_array(self, PoolIntArray array)
    cpdef inline void invert(self)
    cpdef inline void push_back(self, godot_int data)
    cpdef inline void resize(self, godot_int size)
    cdef inline godot_int size(self)


@cython.final
cdef class PoolIntArrayWriteAccess:
    cdef godot_int *_gd_ptr


@cython.final
cdef class PoolRealArray:
    cdef godot_pool_real_array _gd_data

    @staticmethod
    cdef inline PoolRealArray new()

    @staticmethod
    cdef inline PoolRealArray new_with_array(Array other)

    # Operators

    cdef inline bint operator_equal(self, PoolRealArray other)
    cdef inline godot_real operator_getitem(self, godot_int index)
    cdef inline PoolRealArray operator_getslice(self, godot_int start, godot_int end, godot_int step)

    # Methods

    cpdef inline PoolRealArray copy(self)
    cpdef inline void append(self, godot_real data)
    cdef inline void append_array(self, PoolRealArray array)
    cpdef inline void invert(self)
    cpdef inline void push_back(self, godot_real data)
    cpdef inline void resize(self, godot_int size)
    cdef inline godot_int size(self)


@cython.final
cdef class PoolRealArrayWriteAccess:
    cdef godot_real *_gd_ptr


@cython.final
cdef class PoolByteArray:
    cdef godot_pool_byte_array _gd_data

    @staticmethod
    cdef inline PoolByteArray new()

    @staticmethod
    cdef inline PoolByteArray new_with_array(Array other)

    # Operators

    cdef inline bint operator_equal(self, PoolByteArray other)
    cdef inline uint8_t operator_getitem(self, godot_int index)
    cdef inline PoolByteArray operator_getslice(self, godot_int start, godot_int end, godot_int step)

    # Methods

    cpdef inline PoolByteArray copy(self)
    cpdef inline void append(self, uint8_t data)
    cdef inline void append_array(self, PoolByteArray array)
    cpdef inline void invert(self)
    cpdef inline void push_back(self, uint8_t data)
    cpdef inline void resize(self, godot_int size)
    cdef inline godot_int size(self)


@cython.final
cdef class PoolByteArrayWriteAccess:
    cdef uint8_t *_gd_ptr


@cython.final
cdef class PoolVector2Array:
    cdef godot_pool_vector2_array _gd_data

    @staticmethod
    cdef inline PoolVector2Array new()

    @staticmethod
    cdef inline PoolVector2Array new_with_array(Array other)

    # Operators

    cdef inline bint operator_equal(self, PoolVector2Array other)
    cdef inline Vector2 operator_getitem(self, godot_int index)
    cdef inline PoolVector2Array operator_getslice(self, godot_int start, godot_int end, godot_int step)

    # Methods

    cpdef inline PoolVector2Array copy(self)
    cpdef inline void append(self, Vector2 data)
    cdef inline void append_array(self, PoolVector2Array array)
    cpdef inline void invert(self)
    cpdef inline void push_back(self, Vector2 data)
    cpdef inline void resize(self, godot_int size)
    cdef inline godot_int size(self)


@cython.final
cdef class PoolVector2ArrayWriteAccess:
    cdef godot_vector2 *_gd_ptr


@cython.final
cdef class PoolVector3Array:
    cdef godot_pool_vector3_array _gd_data

    @staticmethod
    cdef inline PoolVector3Array new()

    @staticmethod
    cdef inline PoolVector3Array new_with_array(Array other)

    # Operators

    cdef inline bint operator_equal(self, PoolVector3Array other)
    cdef inline Vector3 operator_getitem(self, godot_int index)
    cdef inline PoolVector3Array operator_getslice(self, godot_int start, godot_int end, godot_int step)

    # Methods

    cpdef inline PoolVector3Array copy(self)
    cpdef inline void append(self, Vector3 data)
    cdef inline void append_array(self, PoolVector3Array array)
    cpdef inline void invert(self)
    cpdef inline void push_back(self, Vector3 data)
    cpdef inline void resize(self, godot_int size)
    cdef inline godot_int size(self)


@cython.final
cdef class PoolVector3ArrayWriteAccess:
    cdef godot_vector3 *_gd_ptr


@cython.final
cdef class PoolColorArray:
    cdef godot_pool_color_array _gd_data

    @staticmethod
    cdef inline PoolColorArray new()

    @staticmethod
    cdef inline PoolColorArray new_with_array(Array other)

    # Operators

    cdef inline bint operator_equal(self, PoolColorArray other)
    cdef inline Color operator_getitem(self, godot_int index)
    cdef inline PoolColorArray operator_getslice(self, godot_int start, godot_int end, godot_int step)

    # Methods

    cpdef inline PoolColorArray copy(self)
    cpdef inline void append(self, Color data)
    cdef inline void append_array(self, PoolColorArray array)
    cpdef inline void invert(self)
    cpdef inline void push_back(self, Color data)
    cpdef inline void resize(self, godot_int size)
    cdef inline godot_int size(self)


@cython.final
cdef class PoolColorArrayWriteAccess:
    cdef godot_color *_gd_ptr


@cython.final
cdef class PoolStringArray:
    cdef godot_pool_string_array _gd_data

    @staticmethod
    cdef inline PoolStringArray new()

    @staticmethod
    cdef inline PoolStringArray new_with_array(Array other)

    # Operators

    cdef inline bint operator_equal(self, PoolStringArray other)
    cdef inline GDString operator_getitem(self, godot_int index)
    cdef inline PoolStringArray operator_getslice(self, godot_int start, godot_int end, godot_int step)

    # Methods

    cpdef inline PoolStringArray copy(self)
    cpdef inline void append(self, GDString data)
    cdef inline void append_array(self, PoolStringArray array)
    cpdef inline void invert(self)
    cpdef inline void push_back(self, GDString data)
    cpdef inline void resize(self, godot_int size)
    cdef inline godot_int size(self)


@cython.final
cdef class PoolStringArrayWriteAccess:
    cdef godot_string *_gd_ptr


