Fix delete_if (reject!) for the STL container wrappers.
Previously they would sometimes seg fault or not work.
This commit is contained in:
parent
38b2b95c30
commit
2e0d1b12dc
5 changed files with 46 additions and 21 deletions
|
|
@ -152,10 +152,29 @@
|
|||
}
|
||||
%}
|
||||
|
||||
%define %swig_sequence_methods_extra_set(Sequence...)
|
||||
%extend {
|
||||
%alias reject_bang "delete_if";
|
||||
Sequence* reject_bang() {
|
||||
if ( !rb_block_given_p() )
|
||||
rb_raise( rb_eArgError, "no block given" );
|
||||
|
||||
for ( Sequence::iterator i = $self->begin(); i != $self->end(); ) {
|
||||
VALUE r = swig::from< Sequence::value_type >(*i);
|
||||
Sequence::iterator current = i++;
|
||||
if ( RTEST( rb_yield(r) ) )
|
||||
$self->erase(current);
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
}
|
||||
%enddef
|
||||
|
||||
%define %swig_set_methods(set...)
|
||||
|
||||
%swig_sequence_methods_common(%arg(set));
|
||||
%swig_sequence_methods_extra_set(%arg(set));
|
||||
|
||||
%fragment("RubyPairBoolOutputIterator","header",fragment=SWIG_From_frag(bool),fragment="RubySequence_Cont") {}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue