From 611699252e963826fb75321e8408c83c193d4a57 Mon Sep 17 00:00:00 2001 From: Celine Mercier Date: Wed, 26 Aug 2015 10:31:56 +0200 Subject: [PATCH] Files and functions for columns with the data type OBIChar_t, working but using char* (needs to be changed) --- .../obidms/obidmscolumn/capidmscolumn.pyx | 14 ++--- .../obidmscolumn_char/__init__.py | 0 .../capidmscolumn_char.cfiles | 16 +++++ .../obidmscolumn_char/capidmscolumn_char.pxd | 7 +++ .../obidmscolumn_char/capidmscolumn_char.pyx | 30 ++++++++++ src/obidmscolumn_char.c | 40 +++++++++++++ src/obidmscolumn_char.h | 59 +++++++++++++++++++ 7 files changed, 159 insertions(+), 7 deletions(-) create mode 100644 python/obitools3/obidms/obidmscolumn/obidmscolumn_char/__init__.py create mode 100644 python/obitools3/obidms/obidmscolumn/obidmscolumn_char/capidmscolumn_char.cfiles create mode 100644 python/obitools3/obidms/obidmscolumn/obidmscolumn_char/capidmscolumn_char.pxd create mode 100644 python/obitools3/obidms/obidmscolumn/obidmscolumn_char/capidmscolumn_char.pyx create mode 100644 src/obidmscolumn_char.c create mode 100644 src/obidmscolumn_char.h diff --git a/python/obitools3/obidms/obidmscolumn/capidmscolumn.pyx b/python/obitools3/obidms/obidmscolumn/capidmscolumn.pyx index fc2e13e..1751178 100644 --- a/python/obitools3/obidms/obidmscolumn/capidmscolumn.pyx +++ b/python/obitools3/obidms/obidmscolumn/capidmscolumn.pyx @@ -4,7 +4,7 @@ from .capidmscolumn cimport * from obitools3.obidms.obidmscolumn.obidmscolumn_int.capidmscolumn_int import OBIDMS_column_int from obitools3.obidms.obidmscolumn.obidmscolumn_float.capidmscolumn_float import OBIDMS_column_float from obitools3.obidms.obidmscolumn.obidmscolumn_bool.capidmscolumn_bool import OBIDMS_column_bool -#from obitools3.obidms.obidmscolumn.obidmscolumn_char.capidmscolumn_char import OBIDMS_column_char +from obitools3.obidms.obidmscolumn.obidmscolumn_char.capidmscolumn_char import OBIDMS_column_char from obitools3.obidms.obidmscolumn.obidmscolumn_idx.capidmscolumn_idx import OBIDMS_column_idx @@ -112,12 +112,12 @@ cdef class OBIDMS_column: nb_elements, nb_elements_per_line, elements_names) -# elif type == 4 : -# column = OBIDMS_column_char(dms_name, column_name, -# create, clone, clone_data, -# version_number, type, -# nb_elements, nb_elements_per_line, -# elements_names) + elif type == 4 : + column = OBIDMS_column_char(dms_name, column_name, + create, clone, clone_data, + version_number, type, + nb_elements, nb_elements_per_line, + elements_names) elif type == 5 : column = OBIDMS_column_idx(dms_name, column_name, diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_char/__init__.py b/python/obitools3/obidms/obidmscolumn/obidmscolumn_char/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_char/capidmscolumn_char.cfiles b/python/obitools3/obidms/obidmscolumn/obidmscolumn_char/capidmscolumn_char.cfiles new file mode 100644 index 0000000..0f03cca --- /dev/null +++ b/python/obitools3/obidms/obidmscolumn/obidmscolumn_char/capidmscolumn_char.cfiles @@ -0,0 +1,16 @@ +../../../../../src/obidmscolumn_char.c +../../../../../src/obidmscolumn_char.h +../../../../../src/obidmscolumn.h +../../../../../src/obidmscolumn.c +../../../../../src/obidmscolumndir.h +../../../../../src/obidmscolumndir.c +../../../../../src/obidms.h +../../../../../src/obidms.c +../../../../../src/obierrno.h +../../../../../src/obierrno.c +../../../../../src/obilittlebigman.h +../../../../../src/obilittlebigman.c +../../../../../src/obitypes.h +../../../../../src/obitypes.c +../../../../../src/private_at_functions.h +../../../../../src/private_at_functions.c diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_char/capidmscolumn_char.pxd b/python/obitools3/obidms/obidmscolumn/obidmscolumn_char/capidmscolumn_char.pxd new file mode 100644 index 0000000..32e2b76 --- /dev/null +++ b/python/obitools3/obidms/obidmscolumn/obidmscolumn_char/capidmscolumn_char.pxd @@ -0,0 +1,7 @@ +from obitools3.obidms.obidmscolumn.capidmscolumn cimport * + + +cdef extern from "obidmscolumn_char.h" nogil: + + int obi_column_set_char(OBIDMS_column_p column, size_t line_nb, size_t element_idx, obichar_t* value) + obichar_t* obi_column_get_char(OBIDMS_column_p column, size_t line_nb, size_t element_idx) diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_char/capidmscolumn_char.pyx b/python/obitools3/obidms/obidmscolumn/obidmscolumn_char/capidmscolumn_char.pyx new file mode 100644 index 0000000..d1a8e43 --- /dev/null +++ b/python/obitools3/obidms/obidmscolumn/obidmscolumn_char/capidmscolumn_char.pyx @@ -0,0 +1,30 @@ +#cython: language_level=3 + +from .capidmscolumn_char cimport * + + +cdef class OBIDMS_column_char(OBIDMS_column) : + + def set_item(self, line_nb, element_name, value): + if element_name != "" : + element_idx = self.get_element_index_from_name(element_name) + else : + if obi_column_get_nb_elements_per_line(self.pointer) == 1 : + element_idx = 0 + else : + print("An element name must be specified") + return -1 + return obi_column_set_char(self.pointer, line_nb, element_idx, value) + + def get_item(self, line_nb, element_name): + if element_name != "" : + element_idx = self.get_element_index_from_name(element_name) + else : + if obi_column_get_nb_elements_per_line(self.pointer) == 1 : + element_idx = 0 + else : + print("An element name must be specified") + return -1 + return (obi_column_get_char(self.pointer, line_nb, element_idx)).decode(encoding='UTF-8')[:1] #not ideal... + + \ No newline at end of file diff --git a/src/obidmscolumn_char.c b/src/obidmscolumn_char.c new file mode 100644 index 0000000..c399c66 --- /dev/null +++ b/src/obidmscolumn_char.c @@ -0,0 +1,40 @@ +/**************************************************************************** + * OBIDMS_column_char functions * + ****************************************************************************/ + +/** + * @file obidsmcolumn_char.c + * @author Celine Mercier + * @date August 10th 2015 + * @brief Functions handling OBIColumns containing data with the OBIType OBI_CHAR. + */ + + +#include +#include + +#include "obidmscolumn.h" +#include "obitypes.h" +#include "obierrno.h" +#include "obidebug.h" + + +/********************************************************************** + * + * D E F I N I T I O N O F T H E P U B L I C F U N C T I O N S + * + **********************************************************************/ + +int obi_column_set_char(OBIDMS_column_p column, size_t line_nb, size_t element_idx, obichar_t* value) +{ + // when/where check if can write? + *(((obichar_t*) (column->data)) + (line_nb * ((column->header)->nb_elements_per_line)) + element_idx) = value[0]; + return 0; +} + + +obichar_t* obi_column_get_char(OBIDMS_column_p column, size_t line_nb, size_t element_idx) +{ + return ((obichar_t*) (column->data)) + (line_nb * ((column->header)->nb_elements_per_line)) + element_idx; +} + diff --git a/src/obidmscolumn_char.h b/src/obidmscolumn_char.h new file mode 100644 index 0000000..f968c58 --- /dev/null +++ b/src/obidmscolumn_char.h @@ -0,0 +1,59 @@ +/**************************************************************************** + * OBIDMS_column_char header file * + ****************************************************************************/ + +/** + * @file obidsmcolumn_char.h + * @author Celine Mercier + * @date August 10th 2015 + * @brief Header file for the functions handling OBIColumns containing data with the OBIType OBI_CHAR. + */ + + +#include +#include + +#include "obidmscolumn.h" +#include "obitypes.h" + + +/** + * @brief Sets a value in an OBIDMS column containing data with the type OBI_CHAR. + * + * @param column a pointer as returned by obi_create_column() + * @warning Pointers returned by obi_open_column() don't allow writing. + * + * @param line_nb the number of the line where the value should be set + * + * @param element_idx the index of the element that should be set in the line + * + * @param value the value that should be set + * + * @return an integer value indicating the success of the operation. + * + * @retvalue 0 on success + * @retvalue -1 on failure and the `obi_errno` variable is set. + * + * @since August 2015 + * @author Celine Mercier (celine.mercier@metabarcoding.org) + */ +int obi_column_set_char(OBIDMS_column_p column, size_t line_nb, size_t element_idx, obichar_t* value); + + +/** + * @brief Recovers a value in an OBIDMS column containing data with the type OBI_CHAR. + * + * @param column a pointer as returned by obi_create_column() + * + * @param line_nb the number of the line where the value should be recovered + * + * @param element_idx the index of the element that should be recovered in the line + * + * @return the recovered value + * + * @since August 2015 + * @author Celine Mercier (celine.mercier@metabarcoding.org) + */ +obichar_t* obi_column_get_char(OBIDMS_column_p column, size_t line_nb, size_t element_idx); + +