| 
									
										
										
										
											2018-10-21 21:42:58 +02:00
										 |  |  |  | /**
 | 
					
						
							|  |  |  |  |  *   \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 22:41:29 +01: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 | 
					
						
							| 
									
										
										
										
											2018-10-21 21:42:58 +02:00
										 |  |  |  |  *  \return Pointeur sur une structure de type \ref Pixel | 
					
						
							|  |  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2018-11-21 10:46:01 +01:00
										 |  |  |  | Pixel *newPixel(uint8_t t_r, uint8_t t_g, uint8_t t_b) { | 
					
						
							|  |  |  |  |   Pixel *res; | 
					
						
							|  |  |  |  |   res = (Pixel *)malloc(sizeof(Pixel)); | 
					
						
							| 
									
										
										
										
											2018-11-26 02:28:15 +01:00
										 |  |  |  |   res->red = t_r; | 
					
						
							|  |  |  |  |   res->green = t_g; | 
					
						
							|  |  |  |  |   res->blue = t_b; | 
					
						
							| 
									
										
										
										
											2018-11-25 00:29:35 +01:00
										 |  |  |  |   res->visited = 0; | 
					
						
							| 
									
										
										
										
											2018-10-21 21:42:58 +02:00
										 |  |  |  |   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. | 
					
						
							|  |  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2018-11-21 10:46:01 +01:00
										 |  |  |  | Image *newImage() { | 
					
						
							|  |  |  |  |   Image *res; | 
					
						
							|  |  |  |  |   res = (Image *)malloc(sizeof(Image)); | 
					
						
							| 
									
										
										
										
											2018-11-26 02:28:15 +01:00
										 |  |  |  |   res->sizeX = 0; | 
					
						
							|  |  |  |  |   res->sizeY = 0; | 
					
						
							| 
									
										
										
										
											2018-10-21 21:42:58 +02:00
										 |  |  |  |   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. | 
					
						
							|  |  |  |  |  * | 
					
						
							| 
									
										
										
										
											2018-11-24 22:41:29 +01:00
										 |  |  |  |  *  \param[in] t_self Conteneur d’image à détruire | 
					
						
							| 
									
										
										
										
											2018-10-21 21:42:58 +02:00
										 |  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2018-11-21 10:46:01 +01:00
										 |  |  |  | void deleteImage(Image *t_self) { | 
					
						
							| 
									
										
										
										
											2018-11-03 16:35:06 +01:00
										 |  |  |  |   darrayDelete(t_self->pixels); | 
					
						
							|  |  |  |  |   free(t_self); | 
					
						
							| 
									
										
										
										
											2018-10-21 21:42:58 +02:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | /**
 | 
					
						
							|  |  |  |  |  *  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. | 
					
						
							|  |  |  |  |  * | 
					
						
							| 
									
										
										
										
											2018-11-24 22:41:29 +01:00
										 |  |  |  |  *  \param[in] t_right_limit Abscisse extrême droite du segment | 
					
						
							|  |  |  |  |  *  \param[in] t_left_limit Abscisse extrême gauche du segment | 
					
						
							| 
									
										
										
										
											2018-10-21 21:42:58 +02:00
										 |  |  |  |  *  \return Pointeur sur un conteneur de segment | 
					
						
							|  |  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2018-11-24 22:41:29 +01:00
										 |  |  |  | Segment *newSegment(uint32_t t_right_limit, uint32_t t_left_limit) { | 
					
						
							| 
									
										
										
										
											2018-11-24 21:33:47 +01:00
										 |  |  |  |   Segment *res = (Segment *)malloc(sizeof(Segment)); | 
					
						
							| 
									
										
										
										
											2018-11-24 22:41:29 +01:00
										 |  |  |  |   res->left_limit = t_left_limit; | 
					
						
							| 
									
										
										
										
											2018-11-27 23:12:12 +01:00
										 |  |  |  |   res->right_limit = t_right_limit; | 
					
						
							| 
									
										
										
										
											2018-10-21 21:42:58 +02:00
										 |  |  |  |   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 22:41:29 +01: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 | 
					
						
							| 
									
										
										
										
											2018-10-21 21:42:58 +02:00
										 |  |  |  |  *  \return Pointeur vers la structure créée | 
					
						
							|  |  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2018-11-21 10:46:01 +01:00
										 |  |  |  | Zone *newZone(uint8_t t_r, uint8_t t_g, uint8_t t_b) { | 
					
						
							| 
									
										
										
										
											2018-11-24 21:33:47 +01:00
										 |  |  |  |   Zone *res = (Zone *)malloc(sizeof(Zone)); | 
					
						
							| 
									
										
										
										
											2018-11-26 02:28:15 +01:00
										 |  |  |  |   res->red = t_r; | 
					
						
							|  |  |  |  |   res->green = t_g; | 
					
						
							|  |  |  |  |   res->blue = t_b; | 
					
						
							| 
									
										
										
										
											2018-10-21 21:42:58 +02:00
										 |  |  |  |   res->segments = darrayNew(sizeof(Segment)); | 
					
						
							|  |  |  |  |   return res; | 
					
						
							|  |  |  |  | } |