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; }
PyObject* PyCOMPSDict_getiteritems(PyObject *self) { PyObject *res; res = PyCOMPSDictIter_new(&PyCOMPS_DictIterType, NULL, NULL); PyCOMPSDictIter_init((PyCOMPS_DictIter*)res, NULL, NULL); ((PyCOMPS_DictIter*)res)->hslist = comps_objdict_pairs(((PyCOMPS_Dict*)self)->dict); ((PyCOMPS_DictIter*)res)->hsit = ((PyCOMPS_DictIter*)res)->hslist->first; ((PyCOMPS_DictIter*)res)->out_func = &__pycomps_dict_pair_out; 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; }
int PyCOMPSDict_print(PyObject *self, FILE *f, int flags) { COMPS_HSList *pairlist; COMPS_HSListItem *it; char *tmpstr; (void)flags; fprintf(f, "{"); pairlist = comps_objdict_pairs(((PyCOMPS_Dict*)self)->dict); for (it = pairlist->first; it != pairlist->last; it = it->next) { //printf("x\n"); tmpstr = comps_object_tostr(((COMPS_ObjRTreePair*)it->data)->data); fprintf(f, "%s = '%s', ", ((COMPS_RTreePair*)it->data)->key, tmpstr); free(tmpstr); } if (it) { tmpstr = comps_object_tostr(((COMPS_ObjRTreePair*)it->data)->data); fprintf(f, "%s = '%s'", ((COMPS_RTreePair*)it->data)->key, tmpstr); free(tmpstr); } fprintf(f, "}"); comps_hslist_destroy(&pairlist); return 0; }
PyObject* PyCOMPSDict_str(PyObject *self) { COMPS_HSList *pairlist; COMPS_HSListItem *it; PyObject *ret, *tmp = NULL, *tmp2 = NULL, *tmpkey = NULL, *tmpval = NULL; ret = PyUnicode_FromString("{"); pairlist = comps_objdict_pairs(((PyCOMPS_Dict*)self)->dict); char *tmpstr; for (it = pairlist->first; it != pairlist->last; it = it->next) { tmp = ret; tmpkey = __pycomps_lang_decode(((COMPS_ObjRTreePair*)it->data)->key); if (!tmpkey) { PyErr_SetString(PyExc_TypeError, "key convert error"); goto out; } tmpstr = comps_object_tostr(((COMPS_ObjRTreePair*)it->data)->data); tmpval = __pycomps_lang_decode(tmpstr); free(tmpstr); if (!tmpval) { PyErr_SetString(PyExc_TypeError, "val convert error"); goto out; } tmp2 = PyUnicode_FromFormat("%U = '%U', ", tmpkey, tmpval); ret = PyUnicode_Concat(ret, tmp2); Py_XDECREF(tmp); Py_XDECREF(tmp2); Py_XDECREF(tmpkey); Py_XDECREF(tmpval); } tmp = ret; tmpkey = __pycomps_lang_decode(((COMPS_RTreePair*)it->data)->key); if (!tmpkey) { goto out; } tmpstr = comps_object_tostr(((COMPS_ObjRTreePair*)it->data)->data); tmpval = __pycomps_lang_decode(tmpstr); free(tmpstr); if (!tmpval) { //PyErr_SetString(PyExc_TypeError, "val convert error"); goto out; } tmp2 = PyUnicode_FromFormat("%U = '%U'", tmpkey, tmpval); ret = PyUnicode_Concat(ret, tmp2); Py_XDECREF(tmp); Py_XDECREF(tmp2); Py_XDECREF(tmpkey); Py_XDECREF(tmpval); tmp = ret; tmp2 = PyUnicode_FromString("}"); ret = PyUnicode_Concat(ret, tmp2); Py_XDECREF(tmp); Py_XDECREF(tmp2); comps_hslist_destroy(&pairlist); return ret; out: Py_XDECREF(tmp); Py_XDECREF(tmp2); Py_XDECREF(tmpkey); Py_XDECREF(tmpval); comps_hslist_destroy(&pairlist); return NULL; }
__comps_xml_prop((aliases[i])?aliases[i]:props[i], (char*)default_val[i], writer); } } else { if (obj) { str = tostrf[i](obj); if (!default_val[i] || (strcmp(str, default_val[i]) != 0)) { __comps_xml_prop((aliases[i])?aliases[i]:props[i], str, writer); } free(str); } } } else { if (*(void**)(((char*)group)+type[i]) == (void*)group->name_by_lang){ pairlist = comps_objdict_pairs(group->name_by_lang); } else { pairlist = comps_objdict_pairs(group->desc_by_lang); } for (hsit = pairlist->first; hsit != NULL; hsit = hsit->next) { ret = xmlTextWriterStartElement(writer, (const xmlChar*)((aliases[i])?aliases[i]:props[i])); COMPS_XMLRET_CHECK(comps_hslist_destroy(&pairlist)) ret = xmlTextWriterWriteAttribute(writer, BAD_CAST "xml:lang", (xmlChar*) ((COMPS_ObjRTreePair*)hsit->data)->key); COMPS_XMLRET_CHECK(comps_hslist_destroy(&pairlist)) str = tostrf[i](((COMPS_ObjRTreePair*)hsit->data)->data); ret = xmlTextWriterWriteString(writer, (xmlChar*)str); COMPS_XMLRET_CHECK(comps_hslist_destroy(&pairlist)) free(str);