  
  
  cdef class Tokens:
      cdef Pool mem
      cdef StringStore _string_store
  
 
</s> remove     cdef const Lexeme** _lex_ptr
    cdef int* _idx_ptr
    cdef int* _pos_ptr
    cdef int* _ner_ptr
    cdef const Lexeme** lex
    cdef int* idx
    cdef int* pos
    cdef int* ner
 </s> add     cdef TokenC* _data
    cdef TokenC* data </s> remove from .tokens cimport Tokens
 </s> add from .tokens cimport Tokens, TokenC </s> remove     cdef int _save_cached(self, const Lexeme* const* tokens, hash_t key, int n) except -1
 </s> add     cdef int _save_cached(self, const TokenC* tokens, hash_t key, int n) except -1 </s> remove         '''Retrieve a pointer to a Lexeme from the lexicon.'''
 </s> add         '''Get a pointer to a Lexeme from the lexicon, creating a new Lexeme
        if necessary, using memory acquired from the given pool.  If the pool
        is the lexicon's own memory, the lexeme is saved in the lexicon.''' </s> remove                 output[i, j] = get_attr(self.lex[i], feature)
 </s> add                 output[i, j] = get_attr(self.data[i].lex, feature)
cdef struct TokenC:
    const Lexeme* lex
    int idx
    int pos
    int sense


cdef TokenC EMPTY_TOKEN = TokenC(&EMPTY_LEXEME, 0, 0, 0)


  
  
cdef struct TokenC:
    const Lexeme* lex
    int idx
    int pos
    int sense


cdef TokenC EMPTY_TOKEN = TokenC(&EMPTY_LEXEME, 0, 0, 0)


  cdef class Tokens:
      cdef Pool mem
      cdef StringStore _string_store
  
keep add keep keep keep keep
 * Introduce a TokenC struct, to handle token indices, pos tags and sense tags 
spacy/tokens.pxd