1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

enumerator.c: Add rb_arithmetic_sequence_components_t

Add rb_arithmetic_sequence_components_t struct for encapsulating
the components of ArithmeticSequence.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66353 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
mrkn 2018-12-12 07:16:07 +00:00
parent c8cb0565a1
commit 31eb48a0ac
2 changed files with 16 additions and 10 deletions

View file

@ -2778,20 +2778,20 @@ arith_seq_exclude_end_p(VALUE self)
}
int
rb_arithmetic_sequence_extract(VALUE obj, VALUE *begin, VALUE *end, VALUE *step, int *exclude_end)
rb_arithmetic_sequence_extract(VALUE obj, rb_arithmetic_sequence_components_t *component)
{
if (rb_obj_is_kind_of(obj, rb_cArithSeq)) {
*begin = arith_seq_begin(obj);
*end = arith_seq_end(obj);
*step = arith_seq_step(obj);
*exclude_end = arith_seq_exclude_end_p(obj);
component->begin = arith_seq_begin(obj);
component->end = arith_seq_end(obj);
component->step = arith_seq_step(obj);
component->exclude_end = arith_seq_exclude_end_p(obj);
return 1;
}
else if (rb_obj_is_kind_of(obj, rb_cRange)) {
*begin = RANGE_BEG(obj);
*end = RANGE_END(obj);
*step = INT2FIX(1);
*exclude_end = RTEST(RANGE_EXCL(obj));
component->begin = RANGE_BEG(obj);
component->end = RANGE_END(obj);
component->step = INT2FIX(1);
component->exclude_end = RTEST(RANGE_EXCL(obj));
return 1;
}

View file

@ -244,7 +244,13 @@ VALUE rb_enumeratorize_with_size(VALUE, VALUE, int, const VALUE *, rb_enumerator
return SIZED_ENUMERATOR(obj, argc, argv, size_fn); \
} while (0)
#define RETURN_ENUMERATOR(obj, argc, argv) RETURN_SIZED_ENUMERATOR(obj, argc, argv, 0)
int rb_arithmetic_sequence_extract(VALUE, VALUE *, VALUE *, VALUE *, int *);
typedef struct {
VALUE begin;
VALUE end;
VALUE step;
int exclude_end;
} rb_arithmetic_sequence_components_t;
int rb_arithmetic_sequence_extract(VALUE, rb_arithmetic_sequence_components_t *);
/* error.c */
VALUE rb_exc_new(VALUE, const char*, long);
VALUE rb_exc_new_cstr(VALUE, const char*);