lots of structures, function helpers and documentation
This commit is contained in:
131
src/utilities.h
Normal file
131
src/utilities.h
Normal file
@@ -0,0 +1,131 @@
|
||||
/**
|
||||
* \file utilities.h
|
||||
* \brief Déclaraction des structures de données et fonctions utilitaires.
|
||||
*
|
||||
* Dans ce fichier sont déclarées et implémentées les structures qui serviront
|
||||
* de conteneurs aux données manipulées. Sont également déclarées les fonctions
|
||||
* utilitaires pour la manipulation de ces structures.
|
||||
*/
|
||||
|
||||
#ifndef UTILITIES_H
|
||||
#define UTILITIES_H
|
||||
|
||||
#include "darray.h"
|
||||
#include <GL/gl.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
||||
/*****************************************************************************/
|
||||
/* DEFINE DIRECTIVES */
|
||||
/*****************************************************************************/
|
||||
|
||||
#ifdef Debug
|
||||
#define DEBUG if (1)
|
||||
#define PDEB \
|
||||
if (1) \
|
||||
printf
|
||||
#else
|
||||
#define DEBUG if (0)
|
||||
#define PDBEF \
|
||||
if (0) \
|
||||
printf
|
||||
#endif
|
||||
|
||||
/*****************************************************************************/
|
||||
/* STRUCT DECLARATION */
|
||||
/*****************************************************************************/
|
||||
|
||||
struct Image;
|
||||
typedef struct Image Image;
|
||||
typedef Image *Image_t;
|
||||
struct Pixel;
|
||||
typedef struct Pixel Pixel;
|
||||
typedef Pixel *Pixel_t;
|
||||
struct Zone;
|
||||
typedef struct Zone Zone;
|
||||
typedef Zone *Zone_t;
|
||||
struct Segment;
|
||||
typedef struct Segment Segment;
|
||||
typedef Segment *Segment_t;
|
||||
|
||||
/*****************************************************************************/
|
||||
/* STRUCT IMPLEMENTATION */
|
||||
/*****************************************************************************/
|
||||
|
||||
/**
|
||||
* \brief Conteneur d’une image
|
||||
*
|
||||
* Une image est une structure définie par ses dimensions verticales et
|
||||
* horizontales x et y, et contenant pour chacune des coordonnées possibles
|
||||
* selon ses dimensions un pixel de type \ref Pixel. Ces pixels sont stockés
|
||||
* dans un tableau dynamique \ref darray_t.
|
||||
*/
|
||||
struct Image {
|
||||
uint64_t x; /*!< Largeur de l’image */
|
||||
uint64_t y; /*!< Hauteur de l’image */
|
||||
darray_t *pixels; /*!< Vecteur de pixels */
|
||||
};
|
||||
|
||||
/**
|
||||
* \brief Conteneur d’un pixel
|
||||
*
|
||||
* Un pixel est défini par sa couleur représenté en RGB (rouge, vert, bleu).
|
||||
* Il contient également une valeur booléenne afin de savoir si le Pixel fut
|
||||
* visité précédemment par l’algorithme de compression.
|
||||
*/
|
||||
struct Pixel {
|
||||
uint8_t r; /*!< Couleur rouge du pixel */
|
||||
uint8_t g; /*!< Couleur verte du pixel */
|
||||
uint8_t b; /*!< Couleur bleue du pixel */
|
||||
bool visited; /*!< Le pixel a-t-il été visité avant */
|
||||
};
|
||||
|
||||
/**
|
||||
* \brief Conteneur de zone de couleur unie
|
||||
*
|
||||
* Une zone est un ensemble de pixels de même couleur ou de couleur similaire
|
||||
* dont on conserve uniquement les marges dans le tableau dynamique.
|
||||
*/
|
||||
struct Zone {
|
||||
uint8_t r; /*!< Couleur rouge de la zone */
|
||||
uint8_t g; /*!< Couleur verte de la zone */
|
||||
uint8_t b; /*!< Couleur bleue de la zone */
|
||||
darray_t *segments; /*!< Vecteur de segments */
|
||||
};
|
||||
|
||||
/**
|
||||
* \brief Conteneur de segment de couleur unie
|
||||
*
|
||||
* Un segment est un ensemble de pixels de même ordonnée et de couleur unie ou
|
||||
* similaire. Il se définit par son ordonnée y et de ses deux pixels de bordure
|
||||
* à son extrême droite et à son extrême gauche.
|
||||
*/
|
||||
struct Segment {
|
||||
uint16_t y; /*!< ligne du segment */
|
||||
uint16_t xd; /*!< extrême droit du segment */
|
||||
uint16_t xg; /*!< extrême gauche du segment */
|
||||
};
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Utility functions declaration */
|
||||
/*****************************************************************************/
|
||||
|
||||
/// \brief Création d’un nouveau pixel
|
||||
Pixel_t newPixel(uint8_t r, uint8_t g, uint8_t b);
|
||||
/// \brief Destruction d’un pointeur de pixel
|
||||
void deletePixel(Pixel_t self);
|
||||
/// \brief Création d’une nouvelle image
|
||||
Image_t newImage();
|
||||
/// \brief Destructeur d’une image
|
||||
void deleteImage(Image_t self);
|
||||
/// \brief Constructeur d’un segment de couleur unie
|
||||
Segment_t newSegment(uint64_t y, uint64_t xd, uint64_t xg);
|
||||
/// \brief Destructeur d’un segment de couleur unie
|
||||
void deleteSegment(Segment_t self);
|
||||
/// \brief Constructeur de conteneur de zone
|
||||
Zone_t newZone(uint8_t r, uint8_t g, uint8_t b);
|
||||
/// \brief Destructeur de conteneur de zone
|
||||
void deleteZone(Zone_t self);
|
||||
|
||||
#endif /* UTILITIES_H */
|
||||
Reference in New Issue
Block a user