+ *flp = 0;
+ size_t num_facets = ZOOM_resultset_facets_size(m_resultset);
+ if (num_facets > 0)
+ {
+ size_t i;
+ Z_FacetList *fl = (Z_FacetList *) odr_malloc(odr, sizeof(*fl));
+ fl->elements = (Z_FacetField **)
+ odr_malloc(odr, num_facets * sizeof(*fl->elements));
+ for (i = 0; i < num_facets; i++)
+ {
+ ZOOM_facet_field ff =
+ ZOOM_resultset_get_facet_field_by_index(m_resultset, i);
+ if (!ff)
+ break;
+ Z_AttributeList *al = (Z_AttributeList *)
+ odr_malloc(odr, sizeof(*al));
+ al->num_attributes = 1;
+ al->attributes = (Z_AttributeElement **)
+ odr_malloc(odr, sizeof(*al->attributes));
+ Z_AttributeElement *ae = al->attributes[0] = (Z_AttributeElement *)
+ odr_malloc(odr, sizeof(**al->attributes));
+ ae->attributeSet = 0;
+ ae->attributeType = odr_intdup(odr, 1);
+ ae->which = Z_AttributeValue_complex;
+ ae->value.complex = (Z_ComplexAttribute *)
+ odr_malloc(odr, sizeof(*ae->value.complex));
+ ae->value.complex->num_list = 1;
+ ae->value.complex->list = (Z_StringOrNumeric **)
+ odr_malloc(odr, sizeof(**ae->value.complex->list));
+ ae->value.complex->list[0] = (Z_StringOrNumeric *)
+ odr_malloc(odr, sizeof(**ae->value.complex->list));
+ ae->value.complex->list[0]->which = Z_StringOrNumeric_string;
+ ae->value.complex->list[0]->u.string =
+ odr_strdup(odr, ZOOM_facet_field_name(ff));
+ ae->value.complex->num_semanticAction = 0;
+ ae->value.complex->semanticAction = 0;
+
+ int num_terms = ZOOM_facet_field_term_count(ff);
+ fl->elements[i] = (Z_FacetField *)
+ odr_malloc(odr, sizeof(Z_FacetField));
+ fl->elements[i]->attributes = al;
+ fl->elements[i]->num_terms = num_terms;
+ fl->elements[i]->terms = (Z_FacetTerm **)
+ odr_malloc(odr, num_terms * sizeof(Z_FacetTerm *));
+ int j;
+ for (j = 0; j < num_terms; j++)
+ {
+ int freq;
+ const char *a_term = ZOOM_facet_field_get_term(ff, j, &freq);
+ Z_FacetTerm *ft = (Z_FacetTerm *) odr_malloc(odr, sizeof(*ft));
+ ft->term = z_Term_create(odr, Z_Term_general, a_term,
+ strlen(a_term));
+ ft->count = odr_intdup(odr, freq);
+
+ fl->elements[i]->terms[j] = ft;
+ }
+ }
+ fl->num = i;
+ *flp = fl;
+ }