Math-Prime-Util
view release on metacpan or search on metacpan
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)
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 )