Skip to content
Snippets Groups Projects
analyzer.h 3.56 KiB
Newer Older
  • Learn to ignore specific revisions
  • david's avatar
    david committed
    #ifndef __ANALYZER_H__
    #define __ANALYZER_H__
    
    #include <stddef.h>
    
    /**
       Structure utilisée pour faire des statistiques élémentaires
       sur une séquence d'opérations.
    */
    typedef struct analyzer_s{
      // Coût de chaque opération. Peut représenter du temps ou une autre mesure.
      double * cost;
      // Coût cumulatif. La case i contient la somme des coûts des i premières opérations.
      // Permet de calculer le coût amorti d'une opération.
      double * cumulative_cost;
      // Carré du coût cumulatif. Sert à calculer la variance. On ne garde que la dernière valeur.
      double cumulative_square;
      // Capacité de stockage des tableaux
      size_t capacity;
      // Nombre d'éléments dans chaque tableaux.
      size_t size;   
    } analyzer_t;
    
    /**
       Fonction d'initialisation d'une analyse.
       Complexité en temps/espace, pire et meilleur cas : O(1)  
       @return Un pointeur sur une structure analyzer_t nouvellement allouée.
     */
    analyzer_t * analyzer_create();
    
    /**
       Fonction de libération de la mémoire occupée par une analyse.
       Complexité en temps/espace, pire et meilleur cas : O(1)  
       @param a est un pointeur vers l'espace mémoire que la fonction va libérer.
     */
    void analyzer_destroy(analyzer_t * a);
    
    /**
       Ajoute un coût, une valeur à l'analyse.
       Complexité en temps/espace, pire cas : O(size)
       Complexité en temps/espace, meilleur cas : O(1)
       Complexité amortie : O(1)
       @param a est l'analyse à laquelle on souhaite ajouter une valeur.
       @param cost est la valeur que l'on souhaite ajouter.
    */
    void analyzer_append(analyzer_t * a, double cost);
    
    /**
       Renvoie la somme des coûts enregistrés dans cette analyse.
       Complexité en temps/espace, pire cas : O(1)
       @param a est une analyse.
       @returns la somme des coûts enregistrés dans cette analyse.
    */
    double get_total_cost(analyzer_t * a);
    
    /**
       Renvoie le coût amorti d'une opération.
       Complexité en temps/espace, pire cas : O(1)
       @param a est une analyse.
       @param pos est l'indice de l'opération pour laquelle on veut connaître le coût amorti.
       @returns le coût amorti d'une opération.
    */
    double get_amortized_cost(analyzer_t * a, size_t pos);
    
    /**
       Renvoie la moyenne des coûts de toutes les opérations enregistrées dans l'analyse.
       Complexité en temps/espace, pire cas : O(1)
       @param a est une analyse.
       @returns la moyenne des coûts de toutes les opérations enregistrées dans l'analyse.
    */
    double get_average_cost(analyzer_t * a);
    
    /**
       Renvoie la variance des coûts de toutes les opérations enregistrées dans l'analyse.
       Complexité en temps/espace, pire cas : O(1)
       @param a est une analyse.
       @returns la variance des coûts de toutes les opérations enregistrées dans l'analyse.
    */
    double get_variance(analyzer_t * a);
    
    /**
       Renvoie l'écart-type des coûts de toutes les opérations enregistrées dans l'analyse.
       Complexité en temps/espace, pire cas : O(1)
       @param a est une analyse.
       @returns l'écart-type des coûts de toutes les opérations enregistrées dans l'analyse.
    */
    double get_standard_deviation(analyzer_t * a);
    
    /**
       Sauvegarde la liste des coûts et des coûts amortis dans un fichier.
       Complexité en temps, meilleur/pire cas : O(size)
       @param a est l'analyse que l'on souhaite sauvegarder.
       @param path est le chemin du fichier dans lequel la sauvegarde est faite.
    */
    void save_values(analyzer_t * a, char * path);
    
    /**
       Affiche la liste des coûts et des coûts amortis sur la sortie standard.
       Complexité en temps, meilleur/pire cas : O(size)
       @param a est l'analyse que l'on souhaite sauvegarder.
    */
    void plot_values(analyzer_t * a);
    
    #endif