Handling of single char columns

This commit is contained in:
Celine Mercier
2015-09-18 15:49:15 +02:00
parent 34a3717fb9
commit 7d7dbb1bf9
5 changed files with 11 additions and 12 deletions

View File

@ -12,7 +12,7 @@ cdef extern from "obitypes.h" nogil:
ctypedef OBIBool obibool_t ctypedef OBIBool obibool_t
ctypedef int32_t obiint_t ctypedef int32_t obiint_t
ctypedef double obifloat_t ctypedef double obifloat_t
ctypedef bytes obichar_t ctypedef char obichar_t
ctypedef size_t obiidx_t ctypedef size_t obiidx_t
char* name_data_type(int data_type) char* name_data_type(int data_type)

View File

@ -3,5 +3,5 @@ from obitools3.obidms.obidmscolumn.capidmscolumn cimport *
cdef extern from "obidmscolumn_char.h" nogil: cdef extern from "obidmscolumn_char.h" nogil:
int obi_column_set_obichar_with_elt_name(OBIDMS_column_p column, size_t line_nb, char* element_name, obichar_t* value) int obi_column_set_obichar_with_elt_name(OBIDMS_column_p column, size_t line_nb, char* element_name, obichar_t value)
obichar_t* obi_column_get_obichar_with_elt_name(OBIDMS_column_p column, size_t line_nb, char* element_name) obichar_t obi_column_get_obichar_with_elt_name(OBIDMS_column_p column, size_t line_nb, char* element_name)

View File

@ -6,10 +6,10 @@ from .capidmscolumn_char cimport *
cdef class OBIDMS_column_char(OBIDMS_column) : cdef class OBIDMS_column_char(OBIDMS_column) :
def get_item(self, line_nb, element_name): def get_item(self, line_nb, element_name):
value = (obi_column_get_obichar_with_elt_name(self.pointer, line_nb, element_name.encode('utf-8'))).decode(encoding='utf-8')[:1] cdef char value = obi_column_get_obichar_with_elt_name(self.pointer, line_nb, element_name.encode('utf-8'))
if obi_errno > 0 : if obi_errno > 0 :
raise IndexError(line_nb, element_name) raise IndexError(line_nb, element_name)
return value return <bytes> value
cdef class OBIDMS_column_char_read(OBIDMS_column_char) : cdef class OBIDMS_column_char_read(OBIDMS_column_char) :
@ -17,19 +17,17 @@ cdef class OBIDMS_column_char_read(OBIDMS_column_char) :
def set_item(self, line_nb, element_name, value): def set_item(self, line_nb, element_name, value):
raise Exception('Column is read-only') raise Exception('Column is read-only')
def close(self): cpdef close(self):
if obi_close_column(self.pointer) < 0 : if obi_close_column(self.pointer) < 0 :
raise Exception("Problem closing a column") raise Exception("Problem closing a column")
cdef class OBIDMS_column_char_writable(OBIDMS_column_char) : cdef class OBIDMS_column_char_writable(OBIDMS_column_char) :
def set_item(self, line_nb, element_name, value): def set_item(self, line_nb, element_name, bytes value):
return obi_column_set_obichar_with_elt_name(self.pointer, line_nb, element_name.encode('utf-8'), value.encode('utf-8')) return obi_column_set_obichar_with_elt_name(self.pointer, line_nb, element_name.encode('utf-8'), value[0])
def close(self): def close(self):
if obi_truncate_and_close_column(self.pointer) < 0 : if obi_truncate_and_close_column(self.pointer) < 0 :
raise Exception("Problem closing a column") raise Exception("Problem closing a column")

View File

@ -65,6 +65,7 @@ obichar_t obi_column_get_obichar_with_elt_idx(OBIDMS_column_p column, size_t lin
obidebug(1, "\nError trying to get a value that is beyond the current number of lines used"); obidebug(1, "\nError trying to get a value that is beyond the current number of lines used");
return OBIChar_NA; return OBIChar_NA;
} }
return *(((obichar_t*) (column->data)) + (line_nb * ((column->header)->nb_elements_per_line)) + element_idx); return *(((obichar_t*) (column->data)) + (line_nb * ((column->header)->nb_elements_per_line)) + element_idx);
} }

View File

@ -78,7 +78,7 @@ obichar_t* obi_column_get_obichar_with_elt_idx(OBIDMS_column_p column, size_t li
* @since August 2015 * @since August 2015
* @author Celine Mercier (celine.mercier@metabarcoding.org) * @author Celine Mercier (celine.mercier@metabarcoding.org)
*/ */
int obi_column_set_obichar_with_elt_name(OBIDMS_column_p column, size_t line_nb, char* element_name, obichar_t* value); int obi_column_set_obichar_with_elt_name(OBIDMS_column_p column, size_t line_nb, char* element_name, obichar_t value);
/** /**
@ -97,5 +97,5 @@ int obi_column_set_obichar_with_elt_name(OBIDMS_column_p column, size_t line_nb,
* @since August 2015 * @since August 2015
* @author Celine Mercier (celine.mercier@metabarcoding.org) * @author Celine Mercier (celine.mercier@metabarcoding.org)
*/ */
obichar_t* obi_column_get_obichar_with_elt_name(OBIDMS_column_p column, size_t line_nb, char* element_name); obichar_t obi_column_get_obichar_with_elt_name(OBIDMS_column_p column, size_t line_nb, char* element_name);