/*************************************/ /* Auteur : Rémi Synave */ /* Date de création : 01/03/07 */ /* Date de modification : 15/03/15 */ /* Version : 0.4 */ /*************************************/ /***************************************************************************/ /* This file is part of a2ri. */ /* */ /* a2ri is free software: you can redistribute it and/or modify it */ /* under the terms of the GNU Lesser General Public License as published */ /* by the Free Software Foundation, either version 3 of the License, or */ /* (at your option) any later version. */ /* */ /* a2ri is distributed in the hope that it will be useful, */ /* but WITHOUT ANY WARRANTY; without even the implied warranty of */ /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ /* GNU Lesser General Public License for more details. */ /* */ /* You should have received a copy of the GNU Lesser General Public */ /* License along with a2ri. */ /* If not, see . */ /***************************************************************************/ #ifndef UTIL__H #define UTIL__H #include #include #include #include #include "config.h" #include "debug.h" #define WITH_REDUNDANCE 0 #define WITHOUT_REDUNDANCE 1 #define ASC 0 #define DESC 1 #define egalite(val1,val2) (val1>=val2-A2RI_PRECISION_FLOAT && val1<=val2+A2RI_PRECISION_FLOAT) typedef struct timeval a2ri_time; /** Affiche un message d'erreur et stoppe le programme si la condition n'est pas satisfaite @param cond condition à satisfaire @param str message d'erreur à afficher dans le cas contraire @return aucun **/ void a2ri_erreur_critique_si ( int cond, const char * const str); /** Renvoie un entier compris entre min et max @param min valeur minimale @param max valeur maximale @return un entier **/ int rand_int ( int min, int max); /** Retourne la position de la valeur tosearch, -1 sinon @param list tableau d'entier @param size taille du tableau @param tosearch entier à chercher @return position de la première occurence, -1 s'il n'apparait pas dans le tableau */ int list_int_contains ( const int * const list, int size, int tosearch); /** Retourne la position de la valeur tosearch, -1 sinon @param list tableau de réels @param size taille du tableau @param tosearch réel à chercher @return position de la première occurence, -1 s'il n'apparait pas dans le tableau */ int list_double_contains ( const double * const list, int size, double tosearch); /** Clone la liste @param list la liste à cloner @param size taille de la liste @param list_clone liste clonée @return 1 si la liste est bien clonée, 0 sinon **/ int list_int_clone ( const int * const list, int size, int **list_clone); /** Clone la liste @param list la liste à cloner @param size taille de la liste @param list_clone liste clonée @return 1 si la liste est bien clonée, 0 sinon **/ int list_double_clone ( const double * const list, int size, double **list_clone); /** calcul de l'intersection de deux liste d'entier @param list1 premiere liste d'entier @param size1 taille de la premiere liste @param list2 seconde liste d'entier @param size2 taille de la seconde liste @param list_inter liste d'entier représentatnt l'intersection de list1 et list2 @param size_list_inter taille de la liste d'intersection @return aucun */ void list_int_intersection ( const int * const list1, int size1, const int * const list2, int size2, int **list_inter, int *size_list_inter); /** Ajoute l'entier toadd en fin de liste @param list pointeur sur le premier élément du tableau @param size pointeur sur la taille du tableau @param toadd entier à ajouter @param add_type WITH_REDUNDANCE ou WITHOUT_REDUNDANCE
avec redondance : ajout simple
sans redondance : ajout si la valeur n'apparait pas dans la liste @return 1 si succès, 0 sinon */ int list_int_add ( int **list, int *size, int toadd, int add_type); /** Ajoute le réel toadd en fin de liste @param list pointeur sur le premier élément du tableau @param size pointeur sur la taille du tableau @param toadd réel à ajouter @param add_type WITH_REDUNDANCE ou WITHOUT_REDUNDANCE
avec redondance : ajout simple
sans redondance : ajout si la valeur n'apparait pas dans la liste @return 1 si succès, 0 sinon */ int list_double_add ( double **list, int *size, double toadd, int add_type); /** Enlève la valeur à la position index @param list pointeur sur le premier élément du tableau @param size pointeur sur la taille du tableau @param index position de l'entier à supprimer @return 1 si succès, 0 sinon */ int list_int_remove ( int **list, int *size, int index); /** Enlève la valeur à la position index @param list pointeur sur le premier élément du tableau @param size pointeur sur la taille du tableau @param index position du réel à supprimer @return 1 si succès, 0 sinon */ int list_double_remove ( double **list, int *size, int index); /** Mélange la liste d'entier @param list tableau d'entier @param size taille du tableau @return aucun */ void list_int_mix ( int *list, int size); /** Mélange la liste de réel @param list tableau de réel @param size taille du tableau @return aucun */ void list_double_mix ( double *list, int size); /** Affichage de la liste d'entier @param list tableau d'entier @param size taille du tableau @return aucun */ void list_int_display ( const int * const list, int size); /** Affichage de la liste de réel @param list tableau de réel @param size taille du tableau @return aucun */ void list_double_display ( const double * const list, int size); /** Inverse la liste d'entier @param list tableau d'entier @param size taille du tableau @return aucun */ void list_int_reverse ( int *list, int size); /** Inverse la liste de réel @param list tableau de réel @param size taille du tableau @return aucun */ void list_double_reverse ( double *list, int size); /** Décale la liste d'entier à droite de "shift" position(s) @param list tableau d'entier @param size taille du tableau @param shift nombre de décalage à droite @return aucun */ void list_int_shift_right ( int *list, int size, int shift); /** Décale la liste d'entier à gauche de "shift" position(s) @param list tableau d'entier @param size taille du tableau @param shift nombre de décalage à gauche @return aucun */ void list_int_shift_left ( int *list, int size, int shift); /** Décale la liste de réel à droite de "shift" position(s) @param list tableau de réel @param size taille du tableau @param shift nombre de décalage à droite @return aucun */ void list_double_shift_right ( double *list, int size, int shift); /** Décale la liste de réel à gauche de "shift" position(s) @param list tableau de réel @param size taille du tableau @param shift nombre de décalage à gauche @return aucun */ void list_double_shift_left ( double *list, int size, int shift); /** Trouve le plus petit entier de la liste @param list tableau d'entier @param size taille du tableau @return le plus petit entier */ int list_int_min ( const int * const list, int size); /** Trouve le plus grand entier de la liste @param list tableau d'entier @param size taille du tableau @return le plus grand entier */ int list_int_max ( const int * const list, int size); /** Trouve le plus petit réel de la liste @param list tableau de réel @param size taille du tableau @return le plus petit réel */ double list_double_min ( const double * const list, int size); /** Trouve le plus grand réel de la liste @param list tableau de réel @param size taille du tableau @return le plus grand réel */ double list_double_max ( const double * const list, int size); /** Calcul de la moyenne d'une liste d'entier @param list tableau d'entier @param size taille du tableau @return moyenne de la liste */ double list_int_average ( const int * const list, int size); /** Calcul de la variance d'une liste d'entier @param list tableau d'entier @param size taille du tableau @return variance de la liste */ double list_int_variance ( const int * const list, int size); /** Calcul de la moyenne d'une liste de réel @param list tableau de réel @param size taille du tableau @return moyenne de la liste */ double list_double_average ( const double * const list, int size); /** Calcul de la variance d'une liste de réel @param list tableau de réel @param size taille du tableau @return variance de la liste */ double list_double_variance ( const double * const list, int size); /** Tri de la liste d'entier @param list tableau d'entier @param size taille du tableau @param type ASC ou DESC : ordre croissant ou décroissant @return aucun */ void list_int_sort ( int *list, int size, int type); /** Tri de la liste de réel @param list tableau de réel @param size taille du tableau @param type ASC ou DESC : ordre croissant ou décroissant @return aucun */ void list_double_sort ( double *list, int size, int type); /** Initialisation à zéro d'un temps @param t pointeur vers un objet temps @return aucun */ void a2ri_time_init ( a2ri_time * t); /** Acquisition de l'heure actuelle @param t pointeur vers un objet temps @return aucun */ a2ri_time a2ri_get_time ( ); /** Conversion d'un temps en double @param dep le temps inférieur @param fin le temps supérieur @return la conversion en double */ double a2ri_time_interval_to_double ( a2ri_time deb, a2ri_time fin); /** Affichage du temps séparant les deux variables en secondes @param debut borne de début @param fin borne de fin @return aucun */ void a2ri_display_interval_time ( const char * const str, a2ri_time deb, a2ri_time fin); #endif