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;
}
Beispiel #2
0
Datei: repl.c Projekt: gonzus/us
int main(int argc, char* argv[])
{
    (void) argc;
    (void) argv;

    US* us = us_create();
    us_repl(us);
    us_destroy(us);
    return 0;
}