История изменений
Исправление beastie, (текущая версия) :
int data[4096];
#define set(n) data[n] = 1 // O(1)
#define isset(n) data[n] == 1 // O(1)
#define clear() data = {0} // O(1)
for (n = 0; n < 4096; n++) { // O(N)
if (isset(n)) {
do_something_with(n);
}
}
Вроде все условия выполнил. KISS.
Для 4k значений байто-дрочиво можно опустить.
Из готового:
#include <sys/param.h>
→ https://github.com/openbsd/src/blob/master/sys/sys/param.h
Даст тебе следующий набор:
/* Bit map related macros. */
#define setbit(a,i) ((a)[(i)>>3] |= 1<<((i)&(NBBY-1)))
#define clrbit(a,i) ((a)[(i)>>3] &= ~(1<<((i)&(NBBY-1))))
#define isset(a,i) ((a)[(i)>>3] & (1<<((i)&(NBBY-1))))
#define isclr(a,i) (((a)[(i)>>3] & (1<<((i)&(NBBY-1)))) == 0)
Исправление beastie, :
int data[4096];
#define set(n) data[n] = 1 // O(1)
#define isset(n) data[n] == 1 // O(1)
#define clear() data = {0} // O(1)
for (n = 0; n < 4096; n++) { // O(N)
if (isset(n)) {
do_something_with(n)
}
}
Вроде все условия выполнил. KISS.
Для 4k значений байто-дрочиво можно опустить.
Из готового:
#include <sys/param.h>
→ https://github.com/openbsd/src/blob/master/sys/sys/param.h
Даст тебе следующий набор:
/* Bit map related macros. */
#define setbit(a,i) ((a)[(i)>>3] |= 1<<((i)&(NBBY-1)))
#define clrbit(a,i) ((a)[(i)>>3] &= ~(1<<((i)&(NBBY-1))))
#define isset(a,i) ((a)[(i)>>3] & (1<<((i)&(NBBY-1))))
#define isclr(a,i) (((a)[(i)>>3] & (1<<((i)&(NBBY-1)))) == 0)
Исправление beastie, :
int data[4096];
#define set(n) data[n] = 1 // O(1)
#define isset(n) data[n] == 1 // O(1)
#define clear() data = {0} // O(1)
for (n = 0; n < 4096; n++) { // O(N)
if (isset(n)) {
do_something_with(n)
}
}
Вроде все условия выполнил. KISS.
Для 4k значений байто-дрочиво можно опустить.
Из готового:
#include <sys/params.h>
Даст тебе следующий набор:
/* Bit map related macros. */
#define setbit(a,i) ((a)[(i)>>3] |= 1<<((i)&(NBBY-1)))
#define clrbit(a,i) ((a)[(i)>>3] &= ~(1<<((i)&(NBBY-1))))
#define isset(a,i) ((a)[(i)>>3] & (1<<((i)&(NBBY-1))))
#define isclr(a,i) (((a)[(i)>>3] & (1<<((i)&(NBBY-1)))) == 0)
Исправление beastie, :
int data[4096];
#define set(n) data[n] = 1 // O(1)
#define isset(n) data[n] == 1 // O(1)
#define clear() data = {0} // O(1)
for (n = 0; n < 4096; n++) { // O(N)
if (isset(n)) {
do_something_with(n)
}
}
Вроде все условия выполнил. KISS.
Для 4k значений байто-дрочиво можно опустить.
Из готового:
#include <sys/params.h>
Даст тебе следующий набор:
/* Bit map related macros. */
#define setbit(a,i) ((a)[(i)>>3] |= 1<<((i)&(NBBY-1)))
#define clrbit(a,i) ((a)[(i)>>3] &= ~(1<<((i)&(NBBY-1))))
#define isset(a,i) ((a)[(i)>>3] & (1<<((i)&(NBBY-1))))
#define isclr(a,i) (((a)[(i)>>3] & (1<<((i)&(NBBY-1)))) == 0)
Исправление beastie, :
int data[4096];
#define set(n) data[n] = 1 // O(1)
#define isset(n) data[n] == 1 // O(1)
#define clear() data = {0} // O(1)
for (n = 0; n < 4096; n++) { // O(N)
if (isset(n)) {
do_something_with(n)
}
}
Вроде все условия выполнил.
Исправление beastie, :
int data[4096];
#define set(n) data[n] = 1 // O(1)
#define isset(n) data[n] == 1 // O(1)
#define clear() data = {0} // O(1)
for (n = 0; n < 4096; n++) { // O(N)
if (isset(n)) {
do_something_with(n)
}
}
Исправление beastie, :
int data[4096];
#define set(n) data[n] = 1 // O(1)
#define isset(n) data[n] // O(1)
#define clear() data = {0} // O(1)
for (n = 0; n < 4096; n++) { // O(N)
if (isset(n)) {
do_something_with(n)
}
}
Исправление beastie, :
int data[4096];
#define set(n) data[n] = 1 // O(1)
#define isset(n) data[n] // O(1)
#define clear() data = {0} // O(1)
for n = 0; n < 4096; n++ { // O(N)
do_something_with(data[n])
}
Исходная версия beastie, :
int data[4096];
#define set(n) data[n] = 1
#define isset(n) data[n]