31 lines
		
	
	
		
			574 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			31 lines
		
	
	
		
			574 B
		
	
	
	
		
			C
		
	
	
	
	
	
#include "bitmap.h"
 | 
						|
#include <stdlib.h>
 | 
						|
#include <inttypes.h>
 | 
						|
 | 
						|
long long bitmap_find_first(uint8_t* map, size_t length)
 | 
						|
{
 | 
						|
    int offset = 0;
 | 
						|
    for (unsigned i = 0; i < length; i++, offset += 8) {
 | 
						|
        if (map[i] == 0xFF) continue;
 | 
						|
 | 
						|
        return offset + __builtin_ctz(~map[i]);
 | 
						|
    }
 | 
						|
 | 
						|
    return -1;
 | 
						|
}
 | 
						|
 | 
						|
char bitmap_get(uint8_t* map, size_t pos)
 | 
						|
{
 | 
						|
    return map[pos / 8] & (1 << (pos % 8));
 | 
						|
}
 | 
						|
 | 
						|
void bitmap_set(uint8_t* map, size_t pos)
 | 
						|
{
 | 
						|
    map[pos / 8] |= (1 << (pos % 8));
 | 
						|
}
 | 
						|
 | 
						|
void bitmap_unset(uint8_t* map, size_t pos)
 | 
						|
{
 | 
						|
    map[pos / 8] &= ~(1 << (pos % 8));
 | 
						|
}
 |