/*
 * call-seq:
 *  new(record_unit=Senna::Records::DOCUMENT, subrec_unit=Senna::Records::NONE, max_n_subrecs=0)
 *
 * 結果レコードオブジェクトの生成。
 *
 * === Argument
 * record_unit [Integer] :: レコードの単位。次のいずれか。Senna::Records::DOCUMENT(default), Senna::Records::SECTION, Senna::Records::POSITION, Senna::Records::USERDEF, Senna::Records::NONE(default)
 * subrec_unit [Integer] :: サブレコードの単位。指定できる値は record_unit と同じ。
 * max_n_subrecs [Integer] :: レコード内のサブレコードの最大数。
 *
 * === Return
 * Senna::Records
 */
static VALUE records_new(int argc, VALUE *argv, VALUE klass)
{
    VALUE record_unit;
    VALUE subrec_unit;
    VALUE max_n_subrecs;
    sen_records *recs;
    VALUE obj;
    sen_rec_unit _record_unit, _subrec_unit;
    int _max_n_subrecs;
    rb_scan_args(argc, argv, "03", &record_unit, &subrec_unit, &max_n_subrecs);
    _record_unit = NIL_P(record_unit) ? sen_rec_document : NUM2INT(record_unit);
    _subrec_unit = NIL_P(subrec_unit) ? sen_rec_none : NUM2INT(subrec_unit);
    _max_n_subrecs = NIL_P(max_n_subrecs) ? 0 : NUM2INT(max_n_subrecs);
    recs = sen_records_open(_record_unit, _subrec_unit, _max_n_subrecs);
    obj = Data_Wrap_Struct(klass, 0, sen_records_close, recs);
    rb_funcall(obj, rb_intern("initialize"), 3, record_unit, subrec_unit, max_n_subrecs);
    return obj;
}