2015-09-30 12:03:46 +02:00
|
|
|
/****************************************************************************
|
|
|
|
* Header file for OBITypes *
|
|
|
|
****************************************************************************/
|
|
|
|
|
2015-05-22 17:54:34 +02:00
|
|
|
/**
|
|
|
|
* @file obitypes.h
|
2015-09-30 12:03:46 +02:00
|
|
|
* @author Celine Mercier (celine.mercier@metabarcoding.org)
|
2015-05-22 17:54:34 +02:00
|
|
|
* @date 18 May 2015
|
2015-09-30 12:03:46 +02:00
|
|
|
* @brief Header file for the handling of OBITypes.
|
2015-05-22 17:54:34 +02:00
|
|
|
*/
|
|
|
|
|
2015-09-30 12:03:46 +02:00
|
|
|
|
2015-05-22 17:54:34 +02:00
|
|
|
#ifndef OBITYPES_H_
|
|
|
|
#define OBITYPES_H_
|
|
|
|
|
|
|
|
#include <stdio.h>
|
2015-05-23 16:50:49 +03:00
|
|
|
#include <unistd.h>
|
2015-05-26 10:38:56 +02:00
|
|
|
#include <stdint.h>
|
2015-05-22 17:54:34 +02:00
|
|
|
|
2015-06-10 15:19:02 +02:00
|
|
|
|
2015-09-30 12:03:46 +02:00
|
|
|
#define OBIInt_NA (INT32_MIN) /**< NA value for the type OBI_INT */
|
2015-11-06 17:55:15 +01:00
|
|
|
#define OBIIdx_NA (INT64_MIN) /**< NA value for indices */
|
2015-09-30 12:03:46 +02:00
|
|
|
#define OBIFloat_NA (float_NA()) /**< NA value for the type OBI_FLOAT */
|
|
|
|
#define OBIChar_NA (0) /**< NA value for the type OBI_CHAR */
|
|
|
|
// TODO not sure about this one as it can be impossible to distinguish from uninitialized values
|
2015-05-22 17:54:34 +02:00
|
|
|
|
2015-08-03 11:46:21 +02:00
|
|
|
|
2015-05-22 17:54:34 +02:00
|
|
|
/**
|
|
|
|
* @brief enum for the boolean OBIType.
|
|
|
|
*/
|
2015-08-11 11:00:59 +02:00
|
|
|
typedef enum OBIBool {
|
2015-05-22 17:54:34 +02:00
|
|
|
FALSE = 0,
|
|
|
|
TRUE = 1,
|
|
|
|
OBIBool_NA = 2
|
2015-08-11 11:00:59 +02:00
|
|
|
} obibool_t, *obibool_p; /**< a boolean true/false value */
|
2015-05-22 17:54:34 +02:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
2015-06-10 15:19:02 +02:00
|
|
|
* @brief enum OBITypes for the data type of the OBIDMS columns.
|
2015-05-22 17:54:34 +02:00
|
|
|
*/
|
|
|
|
typedef enum OBIType {
|
|
|
|
OBI_VOID = 0, /**< data type not specified */
|
2015-05-23 16:50:49 +03:00
|
|
|
OBI_INT, /**< a signed integer value (C type : int32_t) */
|
|
|
|
OBI_FLOAT, /**< a floating value (C type : double) */
|
2015-08-11 11:00:59 +02:00
|
|
|
OBI_BOOL, /**< a boolean true/false value, see obibool_t enum */
|
2015-05-23 16:50:49 +03:00
|
|
|
OBI_CHAR, /**< a character (C type : char) */
|
2015-11-19 18:12:48 +01:00
|
|
|
OBI_STR, /**< an index in a data structure (C type : int64_t) referring to a character string*/
|
|
|
|
OBI_SEQ /**< an index in a data structure (C type : int64_t) referring to a DNA sequence*/
|
2015-05-22 17:54:34 +02:00
|
|
|
} OBIType_t, *OBIType_p;
|
|
|
|
|
2015-08-03 11:46:21 +02:00
|
|
|
|
2015-11-06 17:55:15 +01:00
|
|
|
typedef int64_t index_t;
|
2015-05-22 17:54:34 +02:00
|
|
|
typedef int32_t obiint_t;
|
|
|
|
typedef double obifloat_t;
|
|
|
|
typedef char obichar_t;
|
2015-11-19 18:12:48 +01:00
|
|
|
// TODO same for obistr_t and obiseq_t ?
|
2015-08-03 11:46:21 +02:00
|
|
|
|
2015-09-30 12:03:46 +02:00
|
|
|
/**
|
|
|
|
* @brief Union used to compute the NA value of the OBI_FLOAT OBIType.
|
|
|
|
*/
|
2015-08-26 12:00:38 +02:00
|
|
|
typedef union
|
|
|
|
{
|
|
|
|
double value;
|
|
|
|
unsigned int word[2];
|
|
|
|
} ieee_double;
|
|
|
|
|
|
|
|
|
2015-09-30 12:03:46 +02:00
|
|
|
/**
|
|
|
|
* @brief Returns the NA value of the OBI_FLOAT OBIType.
|
|
|
|
* This value corresponds to the float NA value as defined in R.
|
|
|
|
*/
|
|
|
|
static double float_NA(void)
|
2015-08-26 12:00:38 +02:00
|
|
|
{
|
|
|
|
volatile ieee_double x;
|
|
|
|
x.word[0] = 0x7ff00000;
|
|
|
|
x.word[1] = 1954;
|
|
|
|
return x.value;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2015-05-23 16:50:49 +03:00
|
|
|
/**
|
2015-09-30 12:03:46 +02:00
|
|
|
* @brief Returns the memory size in bytes of an OBIType.
|
2015-05-23 16:50:49 +03:00
|
|
|
*
|
2015-09-30 12:03:46 +02:00
|
|
|
* @param type The OBIType code used as query.
|
2015-05-23 16:50:49 +03:00
|
|
|
*
|
2015-09-30 12:03:46 +02:00
|
|
|
* @returns The size in bytes of the type.
|
|
|
|
* @retval 0 if an error occurred (unknown type).
|
2015-05-23 16:50:49 +03:00
|
|
|
*
|
|
|
|
* @since May 2015
|
|
|
|
* @author Eric Coissac (eric.coissac@metabarcoding.org)
|
|
|
|
*/
|
|
|
|
size_t obi_sizeof(OBIType_t type);
|
|
|
|
|
2015-08-03 11:46:21 +02:00
|
|
|
|
2015-05-23 16:50:49 +03:00
|
|
|
/**
|
2015-09-30 12:03:46 +02:00
|
|
|
* @brief Returns the size required to store an array of elements with an OBIType.
|
2015-05-23 16:50:49 +03:00
|
|
|
*
|
2015-09-30 12:03:46 +02:00
|
|
|
* The returned size is large enough to store an array large enough
|
|
|
|
* to store all the elements but rounded at a multiple of the memory page size. // TODO this might be redundant but still a good thing
|
2015-05-23 16:50:49 +03:00
|
|
|
*
|
2015-09-30 12:03:46 +02:00
|
|
|
* @param data_type The OBIType of the elements.
|
|
|
|
* @param nb_lines The number of lines to be stored.
|
|
|
|
* @param nb_elements_per_line The number of elements per line.
|
2015-05-23 16:50:49 +03:00
|
|
|
*
|
2015-09-30 12:03:46 +02:00
|
|
|
* @returns The size in bytes of the array.
|
|
|
|
* @retval 0 if an error occurred (unknown type).
|
2015-05-23 16:50:49 +03:00
|
|
|
*
|
|
|
|
* @since May 2015
|
|
|
|
* @author Eric Coissac (eric.coissac@metabarcoding.org)
|
|
|
|
*/
|
2015-11-06 17:55:15 +01:00
|
|
|
size_t obi_array_sizeof(OBIType_t data_type, index_t nb_lines, index_t nb_elements_per_line);
|
2015-05-22 17:54:34 +02:00
|
|
|
|
2015-08-03 11:46:21 +02:00
|
|
|
|
|
|
|
/**
|
2015-09-30 12:03:46 +02:00
|
|
|
* @brief Returns the name in the form of a character string of an OBIType.
|
2015-08-03 11:46:21 +02:00
|
|
|
*
|
|
|
|
*
|
2015-09-30 12:03:46 +02:00
|
|
|
* @param data_type The OBIType code used as query.
|
2015-08-03 11:46:21 +02:00
|
|
|
*
|
2015-09-30 12:03:46 +02:00
|
|
|
* @returns The name of the OBIType.
|
|
|
|
* @retval NULL if an error occurred (unknown type or error allocating the memory for the character string).
|
2015-08-03 11:46:21 +02:00
|
|
|
*
|
|
|
|
* @since August 2015
|
|
|
|
* @author Celine Mercier (celine.mercier@metabarcoding.org)
|
|
|
|
*/
|
|
|
|
char* name_data_type(int data_type);
|
|
|
|
|
|
|
|
|
2015-05-22 17:54:34 +02:00
|
|
|
#endif /* OBITYPES_H_ */
|