LINUX.ORG.RU

История изменений

Исправление 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]