{% macro render_pool_array_pxd(t) %}
@cython.final
cdef class {{ t.py_pool }}:
    cdef {{ t.gd_pool }} _gd_data

    @staticmethod
    cdef inline {{ t.py_pool }} new()

    @staticmethod
    cdef inline {{ t.py_pool }} new_with_array(Array other)

    # Operators

    cdef inline bint operator_equal(self, {{ t.py_pool }} other)
    cdef inline {{ t.py_value }} operator_getitem(self, pandemonium_int index)
    cdef inline {{ t.py_pool }} operator_getslice(self, pandemonium_int start, pandemonium_int end, pandemonium_int step)

    # Methods

    cpdef inline {{ t.py_pool }} copy(self)
    cpdef inline void append(self, {{ t.py_value }} data)
    cdef inline void append_array(self, {{ t.py_pool }} array)
    cpdef inline void invert(self)
    cpdef inline void push_back(self, {{ t.py_value }} data)
    cpdef inline void resize(self, pandemonium_int size)
    cdef inline pandemonium_int size(self)


@cython.final
cdef class {{ t.py_pool }}WriteAccess:
    cdef {{ t.gd_value }} *_gd_ptr

{% endmacro %}
