Skip to content

Commit

Permalink
Add NArray#mod! method
Browse files Browse the repository at this point in the history
Also adds NArray#mod as an alias for NArray#%.
  • Loading branch information
david-macmahon committed Jan 4, 2011
1 parent 11104cd commit 65a2c4e
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 0 deletions.
9 changes: 9 additions & 0 deletions mkop.rb
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,15 @@
["*p1 = rb_funcall(*p1,'/',1,*p2);"]
)

mkfuncs('ModU', $data_types, $data_types,
[nil] +
["if (*p2==0) {na_zerodiv();}
*p1 %= *p2;"]*3 +
["*p1 = fmod(*p1, *p2);"]*2 +
[nil]*2 +
["*p1 = rb_funcall(*p1,'%',1,*p2);"]
)


# method: imag=
mkfuncs('ImgSet',$data_types,$real_types,
Expand Down
6 changes: 6 additions & 0 deletions na_func.c
Original file line number Diff line number Diff line change
Expand Up @@ -819,6 +819,10 @@ static VALUE na_div_bang(VALUE obj1, VALUE obj2)
static VALUE na_mul_bang(VALUE obj1, VALUE obj2)
{ return na_set_func( obj1, obj2, MulUFuncs ); }

/* method: self.mod!(other) */
static VALUE na_mod_bang(VALUE obj1, VALUE obj2)
{ return na_set_func( obj1, obj2, ModUFuncs ); }

/* method: self.conj! */
static VALUE na_conj_bang(VALUE self)
{ return na_set_func( self, self, ConjFuncs ); }
Expand Down Expand Up @@ -1552,6 +1556,7 @@ void Init_na_funcs(void)
rb_define_method(cNArray, "*", na_mul, 1);
rb_define_method(cNArray, "/", na_div, 1);
rb_define_method(cNArray, "%", na_mod, 1);
rb_define_alias (cNArray, "mod", "%");
rb_define_method(cNArray, "&", na_bit_and, 1);
rb_define_method(cNArray, "|", na_bit_or, 1);
rb_define_method(cNArray, "^", na_bit_xor, 1);
Expand All @@ -1561,6 +1566,7 @@ void Init_na_funcs(void)
rb_define_method(cNArray, "sbt!", na_sbt_bang, 1);
rb_define_method(cNArray, "mul!", na_mul_bang, 1);
rb_define_method(cNArray, "div!", na_div_bang, 1);
rb_define_method(cNArray, "mod!", na_mod_bang, 1);
rb_define_method(cNArray, "imag=",na_imag_set, 1);

rb_define_method(cNArray, "swap_byte", na_swap_byte, 0);
Expand Down
2 changes: 2 additions & 0 deletions na_linalg.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ typedef struct NARRAY_FUNCSET {
void (*sbt)();
void (*mul)();
void (*div)();
void (*mod)();
void (*muladd)();
void (*mulsbt)();
void (*cmp)();
Expand Down Expand Up @@ -590,6 +591,7 @@ void Init_na_linalg()
na_funcset[i].sbt = SbtUFuncs[i];
na_funcset[i].mul = MulUFuncs[i];
na_funcset[i].div = DivUFuncs[i];
na_funcset[i].mod = ModUFuncs[i];
na_funcset[i].muladd = MulAddFuncs[i];
na_funcset[i].mulsbt = MulSbtFuncs[i];
na_funcset[i].cmp = CmpFuncs[i];
Expand Down
1 change: 1 addition & 0 deletions narray_local.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ extern na_ufunc_t AddUFuncs;
extern na_ufunc_t SbtUFuncs;
extern na_ufunc_t MulUFuncs;
extern na_ufunc_t DivUFuncs;
extern na_ufunc_t ModUFuncs;
extern na_bifunc_t AddBFuncs;
extern na_bifunc_t SbtBFuncs;
extern na_bifunc_t MulBFuncs;
Expand Down

0 comments on commit 65a2c4e

Please sign in to comment.