/*
 * 次のレコードを読む。
 *
 * === Return
 * String:: レコードのキー
 * Integer:: レコードのスコア
 */
static VALUE records_next(VALUE obj)
{
    sen_records *recs;
    int keylen;
    char keybuf[256];
    char *bufp;
    int score;
    VALUE key;
    Data_Get_Struct(obj, sen_records, recs);
    keylen = sen_records_next(recs, keybuf, sizeof(keybuf), &score);
    if (keylen == 0)
        return Qnil;
    if (keylen <= sizeof(keybuf)) {
        key = rb_str_new(keybuf, keylen-1);
    } else {
        bufp = xmalloc(keylen);
        sen_records_curr_key(recs, bufp, keylen);
        key = rb_str_new(bufp, keylen-1);
        xfree(bufp);
    }
    return rb_ary_new3(2, key, INT2NUM(score));
}