/* * 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 frt_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; }