00001 00029 #ifndef Mini_class 00030 #define Mini_class 00031 00032 #include <gmpxx.h> 00033 #include <cmath> 00034 00039 const int DIGITS_K_DEF = 4; 00044 const int DIGITS_SIZE_DEF = 3; 00045 00050 class Mini 00051 { 00052 public: 00053 00058 static void set_mini_word( int* noteArray, int k, char* binaryMiniWord1, 00059 int noteOffValue, int* size_mem_mpz, int startKey); 00060 00068 static void ksub_rank ( int k, int* a, mpz_t rank ); 00069 00077 static void ksub_unrank ( int k, int* a, mpz_t rank ); 00078 00085 static int get_size_mem_int ( int value ); 00086 00093 static int get_bin_digits_int ( int value ); 00094 00101 static int get_size_mem_mpz ( mpz_t value ); 00102 00109 static int get_bin_digits_mpz ( mpz_t number); 00110 00124 static void mpz_2_bin ( mpz_t value, int k, int note, char* mem_pointer ); 00125 00138 static void bin_2_mpz ( char* mem_pointer, int* k, mpz_t value, int* note); 00139 00145 static void extract_size(char firstRead, int* size); 00146 00152 static void print_mem ( char* mem_pointer, int size_bin ); 00153 00159 static void sort_array( int* noteArray, int size ); 00160 00167 static void print_array( int* noteArray, int size, int startKey ); 00168 00169 }; 00170 00176 inline 00177 int Mini::get_size_mem_int(int value) 00178 { 00179 return (int)ceil((double)(1 + DIGITS_K_DEF + DIGITS_SIZE_DEF + get_bin_digits_int(value))/(double)(8)); 00180 } 00181 00187 inline 00188 int Mini::get_size_mem_mpz(mpz_t value) 00189 { 00190 return (int)ceil((double)(1 + DIGITS_K_DEF + DIGITS_SIZE_DEF + get_bin_digits_mpz(value))/(double)(8)); 00191 } 00192 00193 #endif 00194