Math-Prime-Util

 view release on metacpan or  search on metacpan

ds_iset.c  view on Meta::CPAN

    size_t h = _iset_pos(set->arr, set->mask, val);
    if (set->arr[h] == val)
      return 0;
    set->arr[h] = val;
    if (++set->size > FILL_RATIO * (double)set->maxsize)
      _iset_resize(set);
  }
  return 1;
}

iset_t iset_create_from_array(UV* d, size_t dlen, int dsign) {
  iset_t s = iset_create(dlen);

  if (dsign != 0) {
    unsigned char typemask = ((dsign > 0) ? ISET_TYPE_UV : ISET_TYPE_IV);
    size_t i;
    for (i = 0; i < dlen; i++) {
      UV val = d[i];
      if (val == 0) {
        if (!s.contains_zero) { s.contains_zero = 1;  s.size++; }
      } else {
        size_t h = _iset_pos(s.arr, s.mask, val);
        if (s.arr[h] != val) {
          s.arr[h] = val;
          if (++s.size > FILL_RATIO * (double)s.maxsize)

ds_iset.h  view on Meta::CPAN

  size_t mask;
  size_t maxsize;
  size_t size;
  bool contains_zero;
  unsigned char type;
} iset_t;

iset_t iset_create(size_t init_size);
void  iset_destroy(iset_t *set);

iset_t iset_create_from_array(UV* d, size_t dlen, int dsign);

/* Returns 1 if unsigned, -1 if signed, 0 if messed up. */
static int iset_sign(const iset_t set) {
  static const signed char _iset_typeret[4] = {1,1,-1,0};
  return _iset_typeret[set.type];
}
static int iset_is_invalid(const iset_t set)
  { return set.type == ISET_TYPE_INVALID; }

static size_t iset_size(const iset_t set) { return set.size; }



( run in 0.821 second using v1.01-cache-2.11-cpan-71847e10f99 )