use fact that empty string can be passed to delete names
deal more concisely with char*
cython cdef stuff