1 #ifndef __CMPH_COMPRESSED_SEQ_H__ 2 #define __CMPH_COMPRESSED_SEQ_H__ 3 4 #include"select.h" 5 6 struct _compressed_seq_t 7 { 8 cmph_uint32 n; // number of values stored in store_table 9 // The length in bits of each value is decomposed into two compnents: the lg(n) MSBs are stored in rank_select data structure 10 // the remaining LSBs are stored in a table of n cells, each one of rem_r bits. 11 cmph_uint32 rem_r; 12 cmph_uint32 total_length; // total length in bits of stored_table 13 select_t sel; 14 cmph_uint32 * length_rems; 15 cmph_uint32 * store_table; 16 }; 17 18 typedef struct _compressed_seq_t compressed_seq_t; 19 20 /** \fn void compressed_seq_init(compressed_seq_t * cs); 21 * \brief Initialize a compressed sequence structure. 22 * \param cs points to the compressed sequence structure to be initialized 23 */ 24 void compressed_seq_init(compressed_seq_t * cs); 25 26 /** \fn void compressed_seq_destroy(compressed_seq_t * cs); 27 * \brief Destroy a compressed sequence given as input. 28 * \param cs points to the compressed sequence structure to be destroyed 29 */ 30 void compressed_seq_destroy(compressed_seq_t * cs); 31 32 /** \fn void compressed_seq_generate(compressed_seq_t * cs, cmph_uint32 * vals_table, cmph_uint32 n); 33 * \brief Generate a compressed sequence from an input array with n values. 34 * \param cs points to the compressed sequence structure 35 * \param vals_table poiter to the array given as input 36 * \param n number of values in @see vals_table 37 */ 38 void compressed_seq_generate(compressed_seq_t * cs, cmph_uint32 * vals_table, cmph_uint32 n); 39 40 41 /** \fn cmph_uint32 compressed_seq_query(compressed_seq_t * cs, cmph_uint32 idx); 42 * \brief Returns the value stored at index @see idx of the compressed sequence structure. 43 * \param cs points to the compressed sequence structure 44 * \param idx index to retrieve the value from 45 * \return the value stored at index @see idx of the compressed sequence structure 46 */ 47 cmph_uint32 compressed_seq_query(compressed_seq_t * cs, cmph_uint32 idx); 48 49 50 /** \fn cmph_uint32 compressed_seq_get_space_usage(compressed_seq_t * cs); 51 * \brief Returns amount of space (in bits) to store the compressed sequence. 52 * \param cs points to the compressed sequence structure 53 * \return the amount of space (in bits) to store @see cs 54 */ 55 cmph_uint32 compressed_seq_get_space_usage(compressed_seq_t * cs); 56 57 void compressed_seq_dump(compressed_seq_t * cs, char ** buf, cmph_uint32 * buflen); 58 59 void compressed_seq_load(compressed_seq_t * cs, const char * buf, cmph_uint32 buflen); 60 61 62 /** \fn void compressed_seq_pack(compressed_seq_t *cs, void *cs_packed); 63 * \brief Support the ability to pack a compressed sequence structure into a preallocated contiguous memory space pointed by cs_packed. 64 * \param cs points to the compressed sequence structure 65 * \param cs_packed pointer to the contiguous memory area used to store the compressed sequence structure. The size of cs_packed must be at least @see compressed_seq_packed_size 66 */ 67 void compressed_seq_pack(compressed_seq_t *cs, void *cs_packed); 68 69 /** \fn cmph_uint32 compressed_seq_packed_size(compressed_seq_t *cs); 70 * \brief Return the amount of space needed to pack a compressed sequence structure. 71 * \return the size of the packed compressed sequence structure or zero for failures 72 */ 73 cmph_uint32 compressed_seq_packed_size(compressed_seq_t *cs); 74 75 76 /** \fn cmph_uint32 compressed_seq_query_packed(void * cs_packed, cmph_uint32 idx); 77 * \brief Returns the value stored at index @see idx of the packed compressed sequence structure. 78 * \param cs_packed is a pointer to a contiguous memory area 79 * \param idx is the index to retrieve the value from 80 * \return the value stored at index @see idx of the packed compressed sequence structure 81 */ 82 cmph_uint32 compressed_seq_query_packed(void * cs_packed, cmph_uint32 idx); 83 84 #endif 85