    /*
     *  call-seq:
     *     term_doc_enum.each_position {|pos| do_something } -> term_doc_enum
     *
     *  Iterate through each of the positions occupied by the current term in the
     *  current document. This can only be called once per document. It can be
     *  used within the each method. For example, to print the terms documents and
     *  positions;
     *
     *    tde.each do |doc_id, freq|
     *      puts "term appeared #{freq} times in document #{doc_id}:"
     *      positions = []
     *      tde.each_position {|pos| positions << pos}
     *      puts "  #{positions.join(', ')}"
     *    end
     */
    static VALUE
    frb_tde_each_position(VALUE self)
    {
        TermDocEnum *tde = (TermDocEnum *)DATA_PTR(self);
        int pos;
        if (tde->next_position == NULL) {
            rb_raise(rb_eNotImpError, "to scan through positions you must create "
                     "the TermDocEnum with Index#term_positions method rather "
                     "than the Index#term_docs method");
        }
        while (0 <= (pos = tde->next_position(tde))) {
            rb_yield(INT2FIX(pos));
        }
        return self;
    }