Added functions to get and set values in columns using the element name

(for columns with lines made of vectors of elements), for all data types
This commit is contained in:
Celine Mercier
2015-08-26 15:05:23 +02:00
parent 9d91e907e5
commit 95dbeb25a0
22 changed files with 540 additions and 143 deletions

View File

@ -19,13 +19,16 @@
#include "obidebug.h"
#define DEBUG_LEVEL 0
/**********************************************************************
*
* 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)
int obi_column_set_char_with_elt_idx(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];
@ -33,8 +36,61 @@ int obi_column_set_char(OBIDMS_column_p column, size_t line_nb, size_t element_i
}
obichar_t* obi_column_get_char(OBIDMS_column_p column, size_t line_nb, size_t element_idx)
obichar_t* obi_column_get_char_with_elt_idx(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;
}
int obi_column_set_char_with_elt_name(OBIDMS_column_p column, size_t line_nb, char* element_name, obichar_t* value)
{
size_t element_idx;
if (!strcmp(element_name, "\0")) // element name is empty
{
if (obi_column_get_nb_elements_per_line(column) == 1) // check that there is only one element per line
element_idx = 0;
else // there is more than one element per line
{
obi_set_errno(OBICOL_UNKNOWN_ERROR);
obidebug(1, "\nAn element name must be specified");
return -1;
}
}
else
{
element_idx = obi_column_get_element_index_from_name(column, element_name);
if (element_idx == -1)
return -1;
}
obi_column_set_char_with_elt_idx(column, line_nb, element_idx, value);
return 0;
}
obichar_t* obi_column_get_char_with_elt_name(OBIDMS_column_p column, size_t line_nb, char* element_name)
{
size_t element_idx;
if (!strcmp(element_name, "\0")) // element name is empty
{
if (obi_column_get_nb_elements_per_line(column) == 1) // check that there is only one element per line
element_idx = 0;
else // there is more than one element per line
{
obi_set_errno(OBICOL_UNKNOWN_ERROR);
obidebug(1, "\nAn element name must be specified");
return NULL;
}
}
else
{
element_idx = obi_column_get_element_index_from_name(column, element_name);
if (element_idx == -1)
return NULL;
}
return obi_column_get_char_with_elt_idx(column, line_nb, element_idx);
}