Ziel: Ich versuche, eine Klasse zu schreiben in Cython, das das Verhalten eines Wörterbuchs nachahmt. Anstelle von Zeichenfolgen möchte ich jedoch Enum oder andere benutzerdefinierte Typen als Schlüssel verwenden.
Vorherige Forschung: Basierend auf 1, 2 und 3 , es scheint, als ob ich Vorlagen in Cython-Klassen verwenden kann. Aber ich konnte keine andere Dokumentation dazu finden.
Meine Versuche: Angesichts dessen ist das, was ich geschrieben habe, nur eine einfache Modifikation einer Cython-Klasse I ohne Vorlage geschrieben, die lautet:
Code: Select all
cdef class ScalarDict[T]:
cdef:
public long N
public long ndata
size_t size
long __current_buffer_len
T * __keys
double ** __values
def __cinit__(self, long ndata, long N=4):
cdef long i
self.__current_buffer_len = N
self.N = 0
self.ndata = ndata
self.size = ndata*sizeof(double)
self.__keys = malloc(self.__current_buffer_len*sizeof(T))
self.__values = malloc(self.__current_buffer_len*sizeof(double *))
def __dealloc__(self):
cdef long i
if self.N > 0:
for i in range(self.N):
if self.__values[i] != NULL:
free(self.__values[i])
if self.__values != NULL:
free(self.__values)
if self.__keys != NULL:
free(self.__keys)
# other methods...
Wie geht das richtig? Oder ist das nicht möglich?