idset 41 libutil/idset.c #define IS_EMPTY(idset) ((idset)->min == END_OF_ID ? 1 : 0) idset 91 libutil/idset.c IDSET *idset = (IDSET *)check_malloc(sizeof(IDSET)); idset 99 libutil/idset.c idset->set = (unsigned long *)check_calloc(sizeof(unsigned long), (size + LONG_BIT - 1) / LONG_BIT); idset 100 libutil/idset.c idset->size = size; idset 105 libutil/idset.c idset->min = idset->max = idset->lastid = END_OF_ID; idset 106 libutil/idset.c return idset; idset 115 libutil/idset.c idset_empty(IDSET *idset) idset 117 libutil/idset.c return IS_EMPTY(idset); idset 126 libutil/idset.c idset_add(IDSET *idset, unsigned int id) idset 128 libutil/idset.c int empty = IS_EMPTY(idset); idset 130 libutil/idset.c if (id >= idset->size) idset 132 libutil/idset.c idset->set[id / LONG_BIT] |= bit[id % LONG_BIT]; idset 134 libutil/idset.c idset->max = idset->min = id; idset 135 libutil/idset.c else if (id > idset->max) idset 136 libutil/idset.c idset->max = id; idset 137 libutil/idset.c else if (id < idset->min) idset 138 libutil/idset.c idset->min = id; idset 148 libutil/idset.c idset_contains(IDSET *idset, unsigned int id) idset 150 libutil/idset.c if (IS_EMPTY(idset)) idset 152 libutil/idset.c if (id < idset->min || id > idset->max) idset 154 libutil/idset.c return (idset->set[id / LONG_BIT] & bit[id % LONG_BIT]) != 0; idset 164 libutil/idset.c idset_first(IDSET *idset) idset 168 libutil/idset.c return idset->lastid = idset->min; idset 178 libutil/idset.c idset_next(IDSET *idset) idset 183 libutil/idset.c if (IS_EMPTY(idset)) idset 185 libutil/idset.c if (idset->lastid >= idset->max) idset 187 libutil/idset.c limit = idset->max / LONG_BIT + 1; idset 188 libutil/idset.c index0 = idset->lastid / LONG_BIT; idset 189 libutil/idset.c index1 = idset->lastid % LONG_BIT; idset 191 libutil/idset.c if (bit[i] & idset->set[index0]) idset 192 libutil/idset.c return idset->lastid = index0 * LONG_BIT + i; idset 194 libutil/idset.c for (i = index0; i < limit && idset->set[i] == 0; i++) idset 200 libutil/idset.c if (bit[i] & idset->set[index0]) idset 201 libutil/idset.c return idset->lastid = index0 * LONG_BIT + i; idset 211 libutil/idset.c idset_count(IDSET *idset) idset 215 libutil/idset.c for (id = idset_first(idset); id != END_OF_ID; id = idset_next(idset)) idset 223 libutil/idset.c idset_close(IDSET *idset) idset 225 libutil/idset.c free(idset->set); idset 226 libutil/idset.c free(idset);