1 //! Definicion de tipos
6 /** \brief Crea un mapa de bits con tamaño para "bits" cantidad de bits
7 * \param name nombre del mapa de bits
8 * \param bits cantidad de bits que poseerá el mapa
10 #define BITMAP(name,bits) unsigned long name[(bits/(sizeof(unsigned long)*8))+1]
12 /** \brief Inicializa a 0 el mapa de bits (es mandatorio ejecutar esta función antes de utilizarlo)
13 * \param name nombre del mapa de bits
14 * \param bits cantidad de bits que poseerá el mapa
16 #define BITMAP_INIT(name,bits) memset(&name[0], 0, (bits/(sizeof(unsigned long)*8))+1)
18 /** \brief obtiene el valor de un bit
19 * \param name nombre del mapa de bits
20 * \param bit numero de bit que desea obtenerse
22 #define BITMAP_GET_BIT(name,bit) (((name[bit/sizeof(unsigned long)]) >> (bit%sizeof(long))) & 1)
24 /** \brief setea el valor de un bit dentro del mapa de bits
25 * \param name nombre del mapa de bits
26 * \param bit numero de bit que desea asignarse
27 * \param value valor que desea asignarse al bit
29 #define BITMAP_SET_BIT(name,bit,value) { \
30 unsigned long __aux = 1; \
31 __aux = __aux << (bit%sizeof(long)); \
34 name[bit/sizeof(unsigned long)] &= __aux; \
37 name[bit/sizeof(unsigned long)] |= __aux; \
43 /*! \brief devuelve el primer bit disponible del bitmap que concuerde con el valor value
44 * \param name nombre del bitmap
45 * \param bits tamaño del bitmap
46 * \param value valor del cuál se busca concidencia
47 * \return número de bit disponible en caso de éxito o -1 si todos están utilizados
49 static inline int BITMAP_GET_FIRST_AVAILABLE(unsigned long *name
,long bits
,int value
) {
51 for (_i
= 0 ; _i
<bits
; _i
++) {
52 if ( BITMAP_GET_BIT(name
, _i
)==value
)