From bc2ca89088cd5ea637ced6a7ce202695ca2a4c40 Mon Sep 17 00:00:00 2001 From: celinemercier Date: Mon, 10 Aug 2015 16:30:55 +0200 Subject: [PATCH] Basis for OBIDMS columns with the type OBI_IDX --- .../obidmscolumn/obidmscolumn_idx/__init__.py | 0 .../obidmscolumn_idx/capidmscolumn_idx.cfiles | 16 +++++ .../obidmscolumn_idx/capidmscolumn_idx.pxd | 7 +++ .../obidmscolumn_idx/capidmscolumn_idx.pyx | 30 ++++++++++ src/obidmscolumn_idx.c | 40 +++++++++++++ src/obidmscolumn_idx.h | 59 +++++++++++++++++++ 6 files changed, 152 insertions(+) create mode 100644 python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/__init__.py create mode 100644 python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/capidmscolumn_idx.cfiles create mode 100644 python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/capidmscolumn_idx.pxd create mode 100644 python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/capidmscolumn_idx.pyx create mode 100644 src/obidmscolumn_idx.c create mode 100644 src/obidmscolumn_idx.h diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/__init__.py b/python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/capidmscolumn_idx.cfiles b/python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/capidmscolumn_idx.cfiles new file mode 100644 index 0000000..798a321 --- /dev/null +++ b/python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/capidmscolumn_idx.cfiles @@ -0,0 +1,16 @@ +../../../../../src/obidmscolumn_idx.c +../../../../../src/obidmscolumn_idx.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_idx/capidmscolumn_idx.pxd b/python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/capidmscolumn_idx.pxd new file mode 100644 index 0000000..b804114 --- /dev/null +++ b/python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/capidmscolumn_idx.pxd @@ -0,0 +1,7 @@ +from obitools3.obidms.obidmscolumn.capidmscolumn cimport * + + +cdef extern from "obidmscolumn_idx.h" nogil: + + int obi_column_set_idx(OBIDMS_column_p column, size_t line_nb, size_t element_idx, obiidx_t value) + obiidx_t obi_column_get_idx(OBIDMS_column_p column, size_t line_nb, size_t element_idx) diff --git a/python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/capidmscolumn_idx.pyx b/python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/capidmscolumn_idx.pyx new file mode 100644 index 0000000..7060506 --- /dev/null +++ b/python/obitools3/obidms/obidmscolumn/obidmscolumn_idx/capidmscolumn_idx.pyx @@ -0,0 +1,30 @@ +#cython: language_level=3 + +from .capidmscolumn_idx cimport * + + +cdef class OBIDMS_column_idx(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_idx(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_idx(self.pointer, line_nb, element_idx) + + \ No newline at end of file diff --git a/src/obidmscolumn_idx.c b/src/obidmscolumn_idx.c new file mode 100644 index 0000000..0253956 --- /dev/null +++ b/src/obidmscolumn_idx.c @@ -0,0 +1,40 @@ +/**************************************************************************** + * OBIDMS_column_idx functions * + ****************************************************************************/ + +/** + * @file obidsmcolumn_idx.c + * @author Celine Mercier + * @date August 10th 2015 + * @brief Functions handling OBIColumns containing data with the OBIType OBI_IDX. + */ + + +#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_idx(OBIDMS_column_p column, size_t line_nb, size_t element_idx, obiidx_t value) +{ + // when/where check if can write? + *(((obiidx_t*) (column->data)) + (line_nb * ((column->header)->nb_elements_per_line)) + element_idx) = value; + return 0; +} + + +obiidx_t obi_column_get_idx(OBIDMS_column_p column, size_t line_nb, size_t element_idx) +{ + return *(((obiidx_t*) (column->data)) + (line_nb * ((column->header)->nb_elements_per_line)) + element_idx); +} + diff --git a/src/obidmscolumn_idx.h b/src/obidmscolumn_idx.h new file mode 100644 index 0000000..07e6609 --- /dev/null +++ b/src/obidmscolumn_idx.h @@ -0,0 +1,59 @@ +/**************************************************************************** + * OBIDMS_column_idx header file * + ****************************************************************************/ + +/** + * @file obidsmcolumn_idx.h + * @author Celine Mercier + * @date August 10th 2015 + * @brief Header file for the functions handling OBIColumns containing data with the OBIType OBI_IDX. + */ + + +#include +#include + +#include "obidmscolumn.h" +#include "obitypes.h" + + +/** + * @brief Sets a value in an OBIDMS column containing data with the type OBI_IDX. + * + * @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_idx(OBIDMS_column_p column, size_t line_nb, size_t element_idx, obiidx_t value); + + +/** + * @brief Recovers a value in an OBIDMS column containing data with the type OBI_IDX. + * + * @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) + */ +obiidx_t obi_column_get_idx(OBIDMS_column_p column, size_t line_nb, size_t element_idx); + +