cdef extern from "strmap.h":
    ctypedef struct StrMap
    StrMap* stringmap_new()
    void stringmap_delete(StrMap *vocab)
    int stringmap_index(StrMap *vocab, char *s)
    char* stringmap_word(StrMap *vocab, int i)

cdef class StringMap:
    cdef StrMap *vocab
    cdef char *word(self, int i)
    cdef int index(self, char *s)

    def __cinit__(self):
        self.vocab = stringmap_new()

    def __dealloc__(self):
        stringmap_delete(self.vocab)
        
    cdef char *word(self, int i):
        return stringmap_word(self.vocab, i)

    cdef int index(self, char *s):
        return stringmap_index(self.vocab, s)