COMPS_DocGroup* comps_docgroup_intersect(COMPS_DocGroup *g1, COMPS_DocGroup *g2) { COMPS_DocGroup *res; COMPS_ObjListIt *it; COMPS_HSListItem *hsit; COMPS_Set *set; COMPS_DocGroupPackage *newpkg; COMPS_HSList *pairs1, *pairs2; res = COMPS_OBJECT_CREATE(COMPS_DocGroup, NULL); set = comps_set_create(); //comps_objrtree_paircmp(void *obj1, void *obj2) { comps_set_init(set, NULL, NULL, NULL, &comps_objrtree_paircmp); pairs1 = comps_objdict_pairs(g1->properties); for (hsit = pairs1->first; hsit != NULL; hsit = hsit->next) { comps_set_add(set, hsit->data); } pairs2 = comps_objdict_pairs(g2->properties); for (hsit = pairs2->first; hsit != NULL; hsit = hsit->next) { if (comps_set_in(set, hsit->data)) { comps_objdict_set(res->properties, ((COMPS_RTreePair*)hsit->data)->key, ((COMPS_RTreePair*)hsit->data)->data); } } comps_hslist_destroy(&pairs1); comps_hslist_destroy(&pairs2); comps_set_clear(set); //res->packages = (COMPS_ObjList*)comps_object_create(&COMPS_ObjList_ObjInfo, // NULL); //set = comps_set_create(); comps_set_init(set, NULL, NULL, NULL, &comps_docpackage_cmp_set); for (it = g1->packages->first; it != NULL; it = it->next) { comps_set_add(set, it->comps_obj); } for (it = g2->packages->first; it != NULL; it = it->next) { if (comps_set_in(set, it->comps_obj)) { newpkg = (COMPS_DocGroupPackage*) comps_object_copy(it->comps_obj); comps_docgroup_add_package(res, newpkg); } } comps_set_destroy(&set); return res; }
COMPS_DocCategory* comps_doccategory_intersect(COMPS_DocCategory *c1, COMPS_DocCategory *c2) { COMPS_DocCategory *res; COMPS_ObjListIt *it; COMPS_HSListItem *hsit; COMPS_Set *set; COMPS_HSList *pairs1, *pairs2; res = COMPS_OBJECT_CREATE(COMPS_DocCategory, NULL); set = comps_set_create(); comps_set_init(set, NULL, NULL, NULL, &comps_objrtree_paircmp); pairs1 = comps_objdict_pairs(c1->properties); for (hsit = pairs1->first; hsit != NULL; hsit = hsit->next) { comps_set_add(set, hsit->data); } pairs2 = comps_objdict_pairs(c2->properties); for (hsit = pairs2->first; hsit != NULL; hsit = hsit->next) { if (comps_set_in(set, hsit->data)) { comps_objdict_set(res->properties, ((COMPS_RTreePair*)hsit->data)->key, ((COMPS_RTreePair*)hsit->data)->data); } } comps_hslist_destroy(&pairs1); comps_hslist_destroy(&pairs2); comps_set_clear(set); comps_set_init(set, NULL, NULL, NULL, &__comps_docgroupid_cmp_set); for (it = c1->group_ids->first; it != NULL; it = it->next) { comps_set_add(set, it->comps_obj); } for (it = c2->group_ids->first; it != NULL; it = it->next) { if (comps_set_in(set, it->comps_obj)) { comps_doccategory_add_groupid(res, (COMPS_DocGroupId*)comps_object_copy(it->comps_obj)); } } comps_set_destroy(&set); return res; }