from libc.stdio cimport fopen, fclose, fread, fwrite, FILE
from cymem.cymem cimport Pool

cdef class CFile:
    cdef FILE* fp
    cdef bint is_open
    cdef Pool mem
    cdef int size # For compatibility with subclass
    cdef int _capacity # For compatibility with subclass

    cdef int read_into(self, void* dest, size_t number, size_t elem_size) except -1

    cdef int write_from(self, void* src, size_t number, size_t elem_size) except -1

    cdef void* alloc_read(self, Pool mem, size_t number, size_t elem_size) except *



cdef class StringCFile(CFile):
    cdef unsigned char* data
 
    cdef int read_into(self, void* dest, size_t number, size_t elem_size) except -1

    cdef int write_from(self, void* src, size_t number, size_t elem_size) except -1
    
    cdef void* alloc_read(self, Pool mem, size_t number, size_t elem_size) except *