C API: Added a function to set an entire column to a specified (atomic)

value.
This commit is contained in:
Celine Mercier
2018-05-17 15:59:16 +02:00
parent 4aef20add8
commit f0c147c252
2 changed files with 81 additions and 19 deletions

View File

@ -1750,6 +1750,62 @@ int obi_enlarge_column(OBIDMS_column_p column)
} }
void obi_set_column_to_value(OBIDMS_column_p column,
index_t first_line_nb,
index_t nb_lines,
void* value_p)
{
index_t i, start, end, nb_elements;
nb_elements = nb_lines*((column->header)->nb_elements_per_line);
start = first_line_nb*((column->header)->nb_elements_per_line);
end = start + nb_elements;
switch ((column->header)->stored_data_type) {
case OBI_VOID: break;
case OBI_INT: for (i=start;i<end;i++)
{
obiint_t value = *((obiint_t*)value_p);
*(((obiint_t*) (column->data)) + i) = value;
}
break;
case OBI_FLOAT: for (i=start;i<end;i++)
{
obifloat_t value = *((obifloat_t*)value_p);
*(((obifloat_t*) (column->data)) + i) = value;
}
break;
case OBI_BOOL: for (i=start;i<end;i++)
{
obibool_t value = *((obibool_t*)value_p);
*(((obibool_t*) (column->data)) + i) = value;
}
break;
case OBI_CHAR: for (i=start;i<end;i++)
{
obichar_t value = *((obichar_t*)value_p);
*(((obichar_t*) (column->data)) + i) = value;
}
break;
case OBI_IDX: for (i=start;i<end;i++)
{
index_t value = *((index_t*)value_p);
*(((index_t*) (column->data)) + i) = value;
}
break;
case OBI_SEQ: break;
case OBI_STR: break;
case OBI_QUAL: break;
}
}
void obi_ini_to_NA_values(OBIDMS_column_p column, void obi_ini_to_NA_values(OBIDMS_column_p column,
index_t first_line_nb, index_t first_line_nb,
@ -1761,7 +1817,8 @@ void obi_ini_to_NA_values(OBIDMS_column_p column,
start = first_line_nb*((column->header)->nb_elements_per_line); start = first_line_nb*((column->header)->nb_elements_per_line);
end = start + nb_elements; end = start + nb_elements;
switch ((column->header)->stored_data_type) { switch ((column->header)->stored_data_type)
{
case OBI_VOID: // TODO; case OBI_VOID: // TODO;
break; break;
@ -1794,24 +1851,9 @@ void obi_ini_to_NA_values(OBIDMS_column_p column,
*(((index_t*) (column->data)) + i) = OBIIdx_NA; *(((index_t*) (column->data)) + i) = OBIIdx_NA;
} }
break; break;
case OBI_SEQ: break;
case OBI_QUAL: for (i=start;i<end;i++) // case not used since OBI_QUAL is only a returned_data_type case OBI_STR: break;
{ case OBI_QUAL: break;
*(((index_t*) (column->data)) + i) = OBIIdx_NA;
}
break;
case OBI_STR: for (i=start;i<end;i++) // case not used since OBI_QUAL is only a returned_data_type
{
*(((index_t*) (column->data)) + i) = OBIIdx_NA;
}
break;
case OBI_SEQ: for (i=start;i<end;i++) // case not used since OBI_QUAL is only a returned_data_type
{
*(((index_t*) (column->data)) + i) = OBIIdx_NA;
}
break;
} }
} }

View File

@ -372,6 +372,26 @@ int obi_truncate_column(OBIDMS_column_p column);
int obi_enlarge_column(OBIDMS_column_p column); int obi_enlarge_column(OBIDMS_column_p column);
/*
* @brief Sets the data in a column to the specified value.
*
* @warning The specified value should be the atomic value effectively stored in the column (i.e. it can not be a character string for example).
*
* @param column A pointer on an OBIDMS column.
* @param start The first line number of the block that should be set.
* @param nb_lines The number of lines that should be set.
* @param value_p A pointer on the value to which the column should be set.
*
* @since May 2018
* @author Celine Mercier (celine.mercier@metabarcoding.org)
*/
void obi_set_column_to_value(OBIDMS_column_p column,
index_t first_line_nb,
index_t nb_lines,
void* value_p);
/* /*
* @brief Sets the data in a column to the NA value of the data OBIType. * @brief Sets the data in a column to the NA value of the data OBIType.
* *