uniqueSet *uniqueAttributes(overlapSet *os, char *attributeName) { if(!os) return NULL; if(os->l == 0) return NULL; int32_t IDs[os->l], i, j, key, last; if(!strExistsHT(os->tree->htAttributes, attributeName)) return NULL; uniqueSet *us = us_init(os->tree->htAttributes); key = str2valHT(os->tree->htAttributes, attributeName); for(i=0; i<os->l; i++) { IDs[i] = -1; for(j=0; j<os->overlaps[i]->nAttributes; j++) { if(os->overlaps[i]->attrib[j]->key == key) { IDs[i] = os->overlaps[i]->attrib[j]->val; break; } } } qsort((void*) IDs, os->l, sizeof(int32_t), int32_t_cmp); last = -1; for(i=0; i<os->l; i++) { if(IDs[i] != last || last < 0) { us_push(us, IDs[i]); last = IDs[i]; } else { us_inc(us); } } if(us->l) return us; us_destroy(us); return NULL; }
int main(int argc, char* argv[]) { (void) argc; (void) argv; US* us = us_create(); us_repl(us); us_destroy(us); return 0; }