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