Pasando memoryview a la función C

Tengo una función C declarada de la siguiente manera:

void getIndexOfState(long *p, long C, long G, long B, long *state); 

Hoy en día mi código de envoltorio de cython utiliza la syntax del búfer de la matriz numpy:

 cpdef int getIndexOfState(self, np.ndarray[np.int_t, ndim=1, mode="c"] s): cdef long out getIndexOfState(&out, self.C, self.G, self.B,  s.data) return out 

Quiero usar la nueva syntax de la vista de memoria, mi pregunta es, ¿cómo puedo pasar el puntero a los datos cuando uso una vista de memoria?

Lo intenté:

 cpdef int getIndexOfState(self, long[:] s): cdef long out getIndexOfState(&out, self.C, self.G, self.B, s) return out 

que provocaba el error “No se puede asignar el tipo ‘long [:]’ a ‘long *'” cuando intentaba comstackr el módulo. ¿Hay alguna forma de pasar ese puntero sin forzar la vista de memoria a una matriz numpy antes de llamar a la función C?

Si los datos subyacentes son correctamente contiguos / marcados y hay al menos un elemento en la memoria, entonces debería bastar para pasar un puntero al primer elemento (y quizás a la longitud):

 getIndexOfState(&out, self.C, self.G, self.B, &s[0]) 

EDITAR:

Una forma de garantizar “correctamente contiguo” debe ser la adición de “[:: 1]”.

 cpdef int getIndexOfState(self, long[::1] s): cdef long out getIndexOfState(&out, self.C, self.G, self.B, &s[0]) return out