/*
* call-seq:
* top_doc.to_json() -> string
*
* Returns a json representation of the top_doc.
*/
static VALUE
frt_td_to_json(VALUE self)
{
int i;
VALUE rhits = rb_funcall(self, id_hits, 0);
VALUE rhit;
LazyDoc *lzd;
Searcher *sea = (Searcher *)DATA_PTR(rb_funcall(self, id_searcher, 0));
const int num_hits = RARRAY(rhits)->len;
int doc_id;
int len = 32768;
char *str = ALLOC_N(char, len);
char *s = str;
VALUE rstr;
*(s++) = '[';
for (i = 0; i < num_hits; i++) {
if (i) *(s++) = ',';
*(s++) = '{';
rhit = RARRAY(rhits)->ptr[i];
doc_id = FIX2INT(rb_funcall(rhit, id_doc, 0));
lzd = sea->get_lazy_doc(sea, doc_id);
s = frt_lzd_load_to_json(lzd, &str, s, &len);
lazy_doc_close(lzd);
*(s++) = '}';
}
*(s++) = ']';
*(s++) = '\0';
rstr = rb_str_new2(str);
free(str);
return rstr;
}