    /*
     *  call-seq:
     *     term_enum.each {|term, doc_freq| do_something() } -> term_count
     *
     *  Iterates through all the terms in the field, yielding the term and the
     *  document frequency.
     */
    static VALUE
    frt_te_each(VALUE self)
    {
        TermEnum *te = (TermEnum *)DATA_PTR(self);
        char *term;
        int term_cnt = 0;
        VALUE vals = rb_ary_new2(2);
        RARRAY(vals)->len = 2;
        rb_mem_clear(RARRAY(vals)->ptr, 2);

        /* each is being called so there will be no current term */
        rb_ivar_set(self, id_term, Qnil);

        while (NULL != (term = te->next(te))) {
            term_cnt++;
            RARRAY(vals)->ptr[0] = rb_str_new(term, te->curr_term_len);
            RARRAY(vals)->ptr[1] = INT2FIX(te->curr_ti.doc_freq);
            rb_yield(vals);
        }
        return INT2FIX(term_cnt);
    }