178 lines
4.4 KiB
C
178 lines
4.4 KiB
C
![]() |
/****************************************************************************
|
||
|
* OBIDMS array header file *
|
||
|
****************************************************************************/
|
||
|
|
||
|
/**
|
||
|
* @file array.h
|
||
|
* @author Celine Mercier
|
||
|
* @date October 19th 2015
|
||
|
* @brief Header file for handling arrays for storing and retrieving data arrays (i.e. character strings).
|
||
|
*/
|
||
|
|
||
|
|
||
|
#ifndef ARRAY_H_
|
||
|
#define ARRAY_H_
|
||
|
|
||
|
|
||
|
#include <stdlib.h>
|
||
|
#include <stdio.h>
|
||
|
#include <stdint.h>
|
||
|
#include <time.h>
|
||
|
#include <sys/types.h>
|
||
|
#include <dirent.h>
|
||
|
|
||
|
#include "obidms.h"
|
||
|
#include "obitypes.h"
|
||
|
|
||
|
|
||
|
#define ARRAY_MAX_NAME (2048) /**< The maximum length of an array name.
|
||
|
*/
|
||
|
#define ARRAY_GROWTH_FACTOR (2) /**< The growth factor when an array is enlarged.
|
||
|
*/
|
||
|
|
||
|
typedef int32_t index_t; /**< Type of the array indices.
|
||
|
*/
|
||
|
typedef char byte_t; /**< Defining byte type since data is stored in bits
|
||
|
* and char (stored on one byte) is the smallest addressable unit.
|
||
|
*/
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @brief OBIDMS array data header structure.
|
||
|
*/
|
||
|
typedef struct OBIDMS_array_data_header {
|
||
|
int header_size; /**< Size of the header in bytes.
|
||
|
*/
|
||
|
int64_t data_size_used; /**< Size of the data used in bytes. // TODO not sure about type
|
||
|
*/
|
||
|
int64_t data_size_max; /**< Max size of the data in bytes. // TODO not sure about type
|
||
|
*/
|
||
|
index_t nb_items; /**< Number of items.
|
||
|
*/
|
||
|
char array_name[ARRAY_MAX_NAME+1]; /**< The array name as a NULL terminated string.
|
||
|
*/
|
||
|
time_t creation_date; /**< Date of creation of the file.
|
||
|
*/
|
||
|
} OBIDMS_array_data_header_t, *OBIDMS_array_data_header_p;
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @brief OBIDMS array data structure.
|
||
|
*/
|
||
|
typedef struct OBIDMS_array_data {
|
||
|
OBIDMS_array_data_header_p header; /**< A pointer to the header of the array data.
|
||
|
*/
|
||
|
byte_t* data; /**< A pointer to the beginning of the data.
|
||
|
*/
|
||
|
} OBIDMS_array_data_t, *OBIDMS_array_data_p;
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @brief OBIDMS array header structure.
|
||
|
*/
|
||
|
typedef struct OBIDMS_array_header {
|
||
|
int header_size; /**< Size of the header in bytes.
|
||
|
*/
|
||
|
index_t nb_items; /**< Number of items in the array.
|
||
|
*/
|
||
|
index_t nb_items_max; /**< Maximum number of items in the array before it has to be enlarged.
|
||
|
*/
|
||
|
char array_name[ARRAY_MAX_NAME+1]; /**< The array name as a NULL terminated string.
|
||
|
*/
|
||
|
time_t creation_date; /**< Date of creation of the file.
|
||
|
*/
|
||
|
} OBIDMS_array_header_t, *OBIDMS_array_header_p;
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @brief OBIDMS array structure.
|
||
|
*/
|
||
|
typedef struct OBIDMS_array {
|
||
|
OBIDMS_array_header_p header; /**< A pointer to the header of the array.
|
||
|
*/
|
||
|
index_t* first; /**< A pointer to the beginning of the array itself.
|
||
|
*/
|
||
|
OBIDMS_array_data_p data; /**< A pointer to the structure containing the data
|
||
|
* that the array references.
|
||
|
*/
|
||
|
DIR* directory; /**< A directory entry usable to
|
||
|
* refer and scan the array directory.
|
||
|
*/
|
||
|
} OBIDMS_array_t, *OBIDMS_array_p;
|
||
|
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
int obi_array_exists(OBIDMS_p dms, const char* array_name);
|
||
|
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
OBIDMS_array_p obi_array(OBIDMS_p dms, const char* array_name);
|
||
|
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
OBIDMS_array_p obi_create_array(OBIDMS_p dms, const char* array_name);
|
||
|
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
OBIDMS_array_p obi_open_array(OBIDMS_p dms, const char* array_name);
|
||
|
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
int obi_close_array(OBIDMS_array_p array);
|
||
|
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
//int obi_delete_array(OBIDMS_p dms, const char* array_name);
|
||
|
|
||
|
|
||
|
/**
|
||
|
* The header is already in the byte array
|
||
|
*/
|
||
|
index_t obi_array_add(OBIDMS_array_p array, byte_t* value);
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Returns the entire array including the header
|
||
|
*/
|
||
|
byte_t* obi_array_get(OBIDMS_array_p array, index_t index);
|
||
|
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
index_t obi_array_search(OBIDMS_array_p array, byte_t* value);
|
||
|
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
byte_t* obi_str_to_obibytes(char* value);
|
||
|
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
const char* obi_obibytes_to_str(byte_t* value_b);
|
||
|
|
||
|
|
||
|
/**
|
||
|
* TODO LATER
|
||
|
*/
|
||
|
// OBIDMS_array_p obi_column_arrayify(FILE, encoding);
|
||
|
|
||
|
|
||
|
#endif /* ARRAY_H_ */
|
||
|
|