surfaces-unies/src/utilities.c

105 lines
3.2 KiB
C
Raw Normal View History

/**
* \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éé.
*
2018-11-24 21:41:29 +00:00
* \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));
2018-11-03 15:35:06 +00:00
res->r = t_r;
res->g = t_g;
res->b = t_b;
res->visited = 0;
return res;
}
/**
* Constructeur dun conteneur dimage. Les dimensions sont initialisées à zéro
* (0) et son tableau de pixels a é 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->x = 0;
res->y = 0;
res->pixels = darrayNew(sizeof(Pixel));
return res;
}
/**
* Destructeur dun conteneur dimage. 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.
*
2018-11-24 21:41:29 +00:00
* \param[in] t_self Conteneur dimage à détruire
*/
void deleteImage(Image *t_self) {
2018-11-24 20:58:55 +00:00
DEBUG { printf("deleted all pixels\n"); }
2018-11-03 15:35:06 +00:00
darrayDelete(t_self->pixels);
free(t_self);
}
/**
* Constructeur dun conteneur de segment. Le constructeur va initialiser les
* valeurs quil contiendra avec les arguments qui lui seront passés lors de
* lappel de la fonction.
*
2018-11-24 21:41:29 +00:00
* \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
*/
2018-11-24 21:41:29 +00:00
Segment *newSegment(uint32_t t_right_limit, uint32_t t_left_limit) {
Segment *res = (Segment *)malloc(sizeof(Segment));
2018-11-24 21:41:29 +00:00
res->right_limit = t_right_limit;
res->left_limit = t_left_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.
*
2018-11-24 21:41:29 +00:00
* \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));
2018-11-03 15:35:06 +00:00
res->r = t_r;
res->g = t_g;
res->b = t_b;
res->segments = darrayNew(sizeof(Segment));
return res;
}
/**
* Destructeur de zone, libère la zone mémoire utilisée pour stocker les
* segments. Ne libère pas \p t_self lui-même mais son membre `segments`.
*
2018-11-24 21:41:29 +00:00
* \param[in] t_self Conteneur de zone à détruire
*/
2018-11-24 20:58:55 +00:00
void deleteZoneContent(Zone *t_self) { darrayDelete(t_self->segments); }