/** * \file utilities.c * \brief Implémentation des fonctions utilitaires * * Dans ce fichier sont implémentées les fonctions utilitaires pour la * manipulation des structures de données déclarées dans le fichier header * correspondant. */ #include "utilities.h" /** * Créé un nouveau pixel initialisé avec les arguments `r`, `g` et `b` et * renvoie un pointeur vers ce pixel créé. * * \param[in] t_r Valeur rouge du pixel * \param[in] t_g Valeur verte du pixel * \param[in] t_b Valeur bleue du pixel * \return Pointeur sur une structure de type \ref Pixel */ Pixel *newPixel(uint8_t t_r, uint8_t t_g, uint8_t t_b) { Pixel *res; res = (Pixel *)malloc(sizeof(Pixel)); res->red = t_r; res->green = t_g; res->blue = t_b; res->visited = 0; return res; } /** * Constructeur d’un conteneur d’image. Les dimensions sont initialisées à zéro * (0) et son tableau de pixels a été créé et initialisé en tableau vide. Le * constructeur renvoie un pointeur vers la nouvelle structure \ref Image. * * \return Pointeur vers une structure \ref Image initialisée. */ Image *newImage() { Image *res; res = (Image *)malloc(sizeof(Image)); res->sizeX = 0; res->sizeY = 0; res->pixels = darrayNew(sizeof(Pixel)); return res; } /** * Destructeur d’un conteneur d’image. Le destructeur appellera le destructeur * du vecteur de pixels qui sera libéré de la mémoire, puis ultimement le * destructeur libérera la structure \ref Image pointée par le pointeur passé * en argument. * * \param[in] t_self Conteneur d’image à détruire */ void deleteImage(Image *t_self) { darrayDelete(t_self->pixels); free(t_self); } /** * Constructeur d’un conteneur de segment. Le constructeur va initialiser les * valeurs qu’il contiendra avec les arguments qui lui seront passés lors de * l’appel de la fonction. * * \param[in] t_right_limit Abscisse extrême droite du segment * \param[in] t_left_limit Abscisse extrême gauche du segment * \return Pointeur sur un conteneur de segment */ Segment *newSegment(uint32_t t_right_limit, uint32_t t_left_limit) { Segment *res = (Segment *)malloc(sizeof(Segment)); res->left_limit = t_left_limit; res->right_limit = t_right_limit; return res; } /** * \brief function description * * Constructeur de conteneur de zone, initialise grâce aux arguments la couleur * de la zone et initialise un tableau dynamique vide de \ref Segment. Renvoie * un pointeur vers la structure nouvellement créée. * * \param[in] t_r Valeur rouge de la couleur de la zone * \param[in] t_g Valeur verte de la couleur de la zone * \param[in] t_b Valeur bleue de la couleur de la zone * \return Pointeur vers la structure créée */ Zone *newZone(uint8_t t_r, uint8_t t_g, uint8_t t_b) { Zone *res = (Zone *)malloc(sizeof(Zone)); res->red = t_r; res->green = t_g; res->blue = t_b; res->segments = darrayNew(sizeof(Segment)); return res; }