#include "baint32.h"
#include <stdint.h>

uint32_t one_bit(uint32_t i) {
  uint32_t ibv;
  ibv = i;
  return 1u << ibv;
}

int bit_set(uint32_t x, uint32_t i) {
  uint32_t bi, ba;
  bi = one_bit(i);
  ba = x & bi;
  return !(ba == 0u);
}

uint32_t set_bit(uint32_t x, uint32_t i) {
  return x | one_bit(i);
}

uint32_t * create(uint32_t size) {
  uint32_t n, i, o;
  uint32_t * p;
  n = 1U + (size - 1U) / 32U;
  p = malloc(n * sizeof(uint32_t));
  assert (p);
  o = n - 1U;
  for (i = 0U; ; ++i) {
    p[(int32_t)i] = 0u;
    if (i == o) {
      break;
    }
  }
  return p;
}

int get(uint32_t * a, uint32_t i) {
  return bit_set(a[(int32_t)(i / 32U)], i % 32U);
}

void set(uint32_t * a, uint32_t i) {
  int32_t j;
  uint32_t x;
  j = (int32_t)(i / 32U);
  x = a[j];
  a[j] = set_bit(x, i % 32U);
  return;
}