ruby-mpfi 0.0.6 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +13 -0
- data/Gemfile +4 -0
- data/README.rdoc +4 -4
- data/Rakefile +2 -45
- data/ext/mpfi/extconf.rb +11 -0
- data/ext/mpfi/ruby_mpfi.c +79 -63
- data/ext/mpfi_complex/mpfi/extconf.rb +11 -0
- data/ext/mpfi_complex/mpfi/ruby_mpfi_complex.c +14 -12
- data/ext/mpfi_matrix/mpfi/extconf.rb +14 -0
- data/ext/mpfi_matrix/mpfi/func_mpfi_matrix.c +17 -17
- data/ext/mpfi_matrix/mpfi/ruby_mpfi_matrix.c +91 -78
- data/lib/mpfi/version.rb +3 -1
- data/ruby-mpfi.gemspec +19 -31
- data/spec/mpfi/marshal_spec.rb +18 -0
- data/spec/mpfi_matrix/mpfi_matrix_marshal_spec.rb +65 -0
- metadata +65 -72
- data/.gemtest +0 -0
- data/Manifest.txt +0 -55
- data/PostInstall.txt +0 -7
- data/ext/mpfi/ruby_mpfr.h +0 -44
- data/ext/mpfi_complex/mpfi/ruby_mpfi.h +0 -42
- data/ext/mpfi_complex/mpfi/ruby_mpfr.h +0 -44
- data/ext/mpfi_matrix/mpfi/func_mpfr_matrix.h +0 -72
- data/ext/mpfi_matrix/mpfi/ruby_mpfi.h +0 -42
- data/ext/mpfi_matrix/mpfi/ruby_mpfr.h +0 -44
- data/ext/mpfi_matrix/mpfi/ruby_mpfr_matrix.h +0 -13
- data/tasks/extconf.rake +0 -36
| @@ -20,5 +20,16 @@ dir_config("mpfr") | |
| 20 20 | 
             
            dir_config("mpfi")
         | 
| 21 21 | 
             
            dir_config("gmp")
         | 
| 22 22 | 
             
            if have_header('mpfr.h') && have_library('mpfr') && have_header('gmp.h') && have_library('gmp')
         | 
| 23 | 
            +
              ruby_mpfr_header_dir = nil
         | 
| 24 | 
            +
              begin
         | 
| 25 | 
            +
                require "rubygems"
         | 
| 26 | 
            +
                spec = Gem::Specification.find_by_name("ruby-mpfr")
         | 
| 27 | 
            +
                ruby_mpfr_header_dir = File.join(spec.full_gem_path, 'ext/mpfr')
         | 
| 28 | 
            +
              rescue LoadError
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
              unless find_header("ruby_mpfr.h", ruby_mpfr_header_dir)
         | 
| 31 | 
            +
                header_not_found("ruby_mpfr.h")
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
              find_header("ruby_mpfi.h", File.join(File.dirname(__FILE__), "../../mpfi"))
         | 
| 23 34 | 
             
              create_makefile("mpfi/complex")
         | 
| 24 35 | 
             
            end
         | 
| @@ -66,9 +66,9 @@ static VALUE r_mpfi_complex_initialize_copy (VALUE self, VALUE other){ | |
| 66 66 | 
             
            /* Return real part. */
         | 
| 67 67 | 
             
            static VALUE r_mpfi_complex_real (VALUE self){
         | 
| 68 68 | 
             
              MPFIComplex *ptr_self;
         | 
| 69 | 
            -
              r_mpfi_get_complex_struct(ptr_self, self);
         | 
| 70 69 | 
             
              VALUE ret;
         | 
| 71 70 | 
             
              MPFI *ptr_ret;
         | 
| 71 | 
            +
              r_mpfi_get_complex_struct(ptr_self, self);
         | 
| 72 72 | 
             
              r_mpfi_make_struct_init(ret, ptr_ret);
         | 
| 73 73 | 
             
              mpfi_set(ptr_ret, ptr_self->re);
         | 
| 74 74 | 
             
              return ret;
         | 
| @@ -77,9 +77,9 @@ static VALUE r_mpfi_complex_real (VALUE self){ | |
| 77 77 | 
             
            /* Return imaginary part. */
         | 
| 78 78 | 
             
            static VALUE r_mpfi_complex_imaginary (VALUE self){
         | 
| 79 79 | 
             
              MPFIComplex *ptr_self;
         | 
| 80 | 
            -
              r_mpfi_get_complex_struct(ptr_self, self);
         | 
| 81 80 | 
             
              VALUE ret;
         | 
| 82 81 | 
             
              MPFI *ptr_ret;
         | 
| 82 | 
            +
              r_mpfi_get_complex_struct(ptr_self, self);
         | 
| 83 83 | 
             
              r_mpfi_make_struct_init(ret, ptr_ret);
         | 
| 84 84 | 
             
              mpfi_set(ptr_ret, ptr_self->im);
         | 
| 85 85 | 
             
              return ret;
         | 
| @@ -88,9 +88,9 @@ static VALUE r_mpfi_complex_imaginary (VALUE self){ | |
| 88 88 | 
             
            /* If _p1_ is 0, return real part. If _p1_ is 1, return imaginary part. */
         | 
| 89 89 | 
             
            static VALUE r_mpfi_complex_element (VALUE self, VALUE arg){
         | 
| 90 90 | 
             
              MPFIComplex *ptr_self;
         | 
| 91 | 
            -
              r_mpfi_get_complex_struct(ptr_self, self);
         | 
| 92 91 | 
             
              VALUE ret;
         | 
| 93 92 | 
             
              MPFI *ptr_ret;
         | 
| 93 | 
            +
              r_mpfi_get_complex_struct(ptr_self, self);
         | 
| 94 94 | 
             
              r_mpfi_make_struct_init(ret, ptr_ret);
         | 
| 95 95 | 
             
              switch(NUM2INT(arg)){
         | 
| 96 96 | 
             
              case 0:
         | 
| @@ -109,8 +109,8 @@ static VALUE r_mpfi_complex_element (VALUE self, VALUE arg){ | |
| 109 109 | 
             
            /* Return conjugate complex number. */
         | 
| 110 110 | 
             
            static VALUE r_mpfi_complex_conjugate (VALUE self){
         | 
| 111 111 | 
             
              MPFIComplex *ptr_self, *ptr_ret;
         | 
| 112 | 
            -
              r_mpfi_get_complex_struct(ptr_self, self);
         | 
| 113 112 | 
             
              VALUE ret;
         | 
| 113 | 
            +
              r_mpfi_get_complex_struct(ptr_self, self);
         | 
| 114 114 | 
             
              r_mpfi_make_complex_struct_init(ret, ptr_ret);
         | 
| 115 115 | 
             
              mpfi_complex_conjugate(ptr_ret, ptr_self);
         | 
| 116 116 | 
             
              return ret;
         | 
| @@ -130,15 +130,16 @@ static VALUE r_mpfi_complex_conjugate (VALUE self){ | |
| 130 130 | 
             
            /* String for inspect. */
         | 
| 131 131 | 
             
            static VALUE r_mpfi_complex_inspect(VALUE self){
         | 
| 132 132 | 
             
              MPFIComplex *ptr_s;
         | 
| 133 | 
            -
              r_mpfi_get_complex_struct(ptr_s, self);
         | 
| 134 133 | 
             
              char *ret_str;
         | 
| 134 | 
            +
              VALUE ret_val;
         | 
| 135 | 
            +
              r_mpfi_get_complex_struct(ptr_s, self);
         | 
| 135 136 | 
             
              if (!mpfr_asprintf(&ret_str, "#<MPFI:%lx,['%.Re %.Re', '%.Re %.Re'], [%d, %d]>",
         | 
| 136 137 | 
             
            		     NUM2LONG(rb_funcall(self, object_id, 0)), r_mpfi_left_ptr(ptr_s->re),
         | 
| 137 138 | 
             
            		     r_mpfi_right_ptr(ptr_s->re), r_mpfi_left_ptr(ptr_s->im), r_mpfi_right_ptr(ptr_s->im),
         | 
| 138 139 | 
             
            		     mpfi_get_prec(ptr_s->re), mpfi_get_prec(ptr_s->im))) {
         | 
| 139 140 | 
             
                rb_raise(rb_eFatal, "Can not allocate a string by mpfr_asprintf.");
         | 
| 140 141 | 
             
              }
         | 
| 141 | 
            -
               | 
| 142 | 
            +
              ret_val = rb_str_new2(ret_str);
         | 
| 142 143 | 
             
              mpfr_free_str(ret_str);
         | 
| 143 144 | 
             
              return ret_val;
         | 
| 144 145 | 
             
            }
         | 
| @@ -146,9 +147,10 @@ static VALUE r_mpfi_complex_inspect(VALUE self){ | |
| 146 147 | 
             
            /* Return array including strings which the elements is converted to by _p1_. */
         | 
| 147 148 | 
             
            static VALUE r_mpfi_complex_str_ary(VALUE self, VALUE format_str){
         | 
| 148 149 | 
             
              MPFIComplex *ptr_self;
         | 
| 149 | 
            -
               | 
| 150 | 
            -
              char *format = StringValuePtr(format_str), *tmp_str;
         | 
| 150 | 
            +
              char *format, *tmp_str;
         | 
| 151 151 | 
             
              VALUE ret_val[2];
         | 
| 152 | 
            +
              r_mpfi_get_complex_struct(ptr_self, self);
         | 
| 153 | 
            +
              format = StringValuePtr(format_str);
         | 
| 152 154 | 
             
              gmp_asprintf(&tmp_str, format, ptr_self->re);
         | 
| 153 155 | 
             
              ret_val[0] = rb_str_new2(tmp_str);
         | 
| 154 156 | 
             
              free(tmp_str);
         | 
| @@ -161,9 +163,9 @@ static VALUE r_mpfi_complex_str_ary(VALUE self, VALUE format_str){ | |
| 161 163 | 
             
            /* Return _self_ + _p1_.*/
         | 
| 162 164 | 
             
            static VALUE r_mpfi_complex_add (VALUE self, VALUE other){
         | 
| 163 165 | 
             
              MPFIComplex *ptr_self, *ptr_other, *ptr_ret;
         | 
| 166 | 
            +
              VALUE ret;
         | 
| 164 167 | 
             
              r_mpfi_get_complex_struct(ptr_self, self);
         | 
| 165 168 | 
             
              r_mpfi_get_complex_struct(ptr_other, other);
         | 
| 166 | 
            -
              VALUE ret;
         | 
| 167 169 | 
             
              r_mpfi_make_complex_struct_init(ret, ptr_ret);
         | 
| 168 170 | 
             
              mpfi_complex_add(ptr_ret, ptr_self, ptr_other);
         | 
| 169 171 | 
             
              return ret;
         | 
| @@ -172,9 +174,9 @@ static VALUE r_mpfi_complex_add (VALUE self, VALUE other){ | |
| 172 174 | 
             
            /* Return _self_ - _p1_.*/
         | 
| 173 175 | 
             
            static VALUE r_mpfi_complex_sub (VALUE self, VALUE other){
         | 
| 174 176 | 
             
              MPFIComplex *ptr_self, *ptr_other, *ptr_ret;
         | 
| 177 | 
            +
              VALUE ret;
         | 
| 175 178 | 
             
              r_mpfi_get_complex_struct(ptr_self, self);
         | 
| 176 179 | 
             
              r_mpfi_get_complex_struct(ptr_other, other);
         | 
| 177 | 
            -
              VALUE ret;
         | 
| 178 180 | 
             
              r_mpfi_make_complex_struct_init(ret, ptr_ret);
         | 
| 179 181 | 
             
              mpfi_complex_sub(ptr_ret, ptr_self, ptr_other);
         | 
| 180 182 | 
             
              return ret;
         | 
| @@ -183,9 +185,9 @@ static VALUE r_mpfi_complex_sub (VALUE self, VALUE other){ | |
| 183 185 | 
             
            /* Return _self_ * _p1_.*/
         | 
| 184 186 | 
             
            static VALUE r_mpfi_complex_mul (VALUE self, VALUE other){
         | 
| 185 187 | 
             
              MPFIComplex *ptr_self, *ptr_other, *ptr_ret;
         | 
| 188 | 
            +
              VALUE ret;
         | 
| 186 189 | 
             
              r_mpfi_get_complex_struct(ptr_self, self);
         | 
| 187 190 | 
             
              r_mpfi_get_complex_struct(ptr_other, other);
         | 
| 188 | 
            -
              VALUE ret;
         | 
| 189 191 | 
             
              r_mpfi_make_complex_struct_init(ret, ptr_ret);
         | 
| 190 192 | 
             
              mpfi_complex_mul(ptr_ret, ptr_self, ptr_other);
         | 
| 191 193 | 
             
              return ret;
         | 
| @@ -194,9 +196,9 @@ static VALUE r_mpfi_complex_mul (VALUE self, VALUE other){ | |
| 194 196 | 
             
            /* Return _self_ / _p1_.*/
         | 
| 195 197 | 
             
            static VALUE r_mpfi_complex_div (VALUE self, VALUE other){
         | 
| 196 198 | 
             
              MPFIComplex *ptr_self, *ptr_other, *ptr_ret;
         | 
| 199 | 
            +
              VALUE ret;
         | 
| 197 200 | 
             
              r_mpfi_get_complex_struct(ptr_self, self);
         | 
| 198 201 | 
             
              r_mpfi_get_complex_struct(ptr_other, other);
         | 
| 199 | 
            -
              VALUE ret;
         | 
| 200 202 | 
             
              r_mpfi_make_complex_struct_init(ret, ptr_ret);
         | 
| 201 203 | 
             
              mpfi_complex_div(ptr_ret, ptr_self, ptr_other);
         | 
| 202 204 | 
             
              return ret;
         | 
| @@ -19,5 +19,19 @@ dir_config('mpfi') | |
| 19 19 | 
             
            dir_config('gmp')
         | 
| 20 20 |  | 
| 21 21 | 
             
            if have_header('mpfr.h') && have_library('mpfr') && have_header('mpfi.h') && have_library('mpfi') && have_header('gmp.h') && have_library('gmp')
         | 
| 22 | 
            +
              ruby_mpfr_dir = nil
         | 
| 23 | 
            +
              begin
         | 
| 24 | 
            +
                require "rubygems"
         | 
| 25 | 
            +
                spec = Gem::Specification.find_by_name("ruby-mpfr")
         | 
| 26 | 
            +
                ruby_mpfr_dir = File.join(spec.full_gem_path, 'ext')
         | 
| 27 | 
            +
              rescue LoadError
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
              unless find_header("ruby_mpfr.h", File.join(ruby_mpfr_dir, 'mpfr'))
         | 
| 30 | 
            +
                header_not_found("ruby_mpfr.h")
         | 
| 31 | 
            +
              end
         | 
| 32 | 
            +
              unless find_header("ruby_mpfr_matrix.h", File.join(ruby_mpfr_dir, 'mpfr_matrix/mpfr'))
         | 
| 33 | 
            +
                header_not_found("ruby_mpfr_matrix.h")
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
              find_header("ruby_mpfi.h", File.join(File.dirname(__FILE__), "../../mpfi"))
         | 
| 22 36 | 
             
              create_makefile("mpfi/matrix")
         | 
| 23 37 | 
             
            end
         | 
| @@ -1,12 +1,12 @@ | |
| 1 1 | 
             
            #include "ruby_mpfi_matrix.h"
         | 
| 2 2 |  | 
| 3 3 | 
             
            void mpfi_matrix_init(MPFIMatrix *mat, int row, int column){
         | 
| 4 | 
            +
              int i;
         | 
| 4 5 | 
             
              mat->row = row;
         | 
| 5 6 | 
             
              mat->column = column;
         | 
| 6 7 | 
             
              mat->size = row * column;
         | 
| 7 8 | 
             
              /* mat->data = (MPFI *)malloc(sizeof(MPFI) * mat->size); */
         | 
| 8 9 | 
             
              mat->data = ALLOC_N(MPFI, mat->size);
         | 
| 9 | 
            -
              int i;
         | 
| 10 10 | 
             
              for(i = 0; i < mat->size; i++){
         | 
| 11 11 | 
             
                mpfi_init(mat->data + i);
         | 
| 12 12 | 
             
              }
         | 
| @@ -305,8 +305,8 @@ int mpfi_matrix_union(MPFIMatrix *z, MPFIMatrix *x, MPFIMatrix *y){ | |
| 305 305 |  | 
| 306 306 | 
             
            void mpfi_matrix_inner_product(MPFI *pr, MPFIMatrix *x, MPFIMatrix *y){
         | 
| 307 307 | 
             
              MPFI *tmp;
         | 
| 308 | 
            -
              r_mpfi_temp_alloc_init(tmp);
         | 
| 309 308 | 
             
              int i;
         | 
| 309 | 
            +
              r_mpfi_temp_alloc_init(tmp);
         | 
| 310 310 | 
             
              mpfi_set_si(pr, 0);
         | 
| 311 311 | 
             
              for(i = 0; i < x->size; i++){
         | 
| 312 312 | 
             
                mpfi_mul(tmp, x->data + i, y->data + i);
         | 
| @@ -317,8 +317,8 @@ void mpfi_matrix_inner_product(MPFI *pr, MPFIMatrix *x, MPFIMatrix *y){ | |
| 317 317 |  | 
| 318 318 | 
             
            void mpfi_matrix_vector_distance(MPFI *distance, MPFIMatrix *x, MPFIMatrix *y){
         | 
| 319 319 | 
             
              MPFI *tmp;
         | 
| 320 | 
            -
              r_mpfi_temp_alloc_init(tmp);
         | 
| 321 320 | 
             
              int i;
         | 
| 321 | 
            +
              r_mpfi_temp_alloc_init(tmp);
         | 
| 322 322 | 
             
              mpfi_set_si(distance, 0);
         | 
| 323 323 | 
             
              for(i = 0; i < x->size; i++){
         | 
| 324 324 | 
             
                mpfi_sub(tmp, x->data + i, y->data + i);
         | 
| @@ -344,8 +344,8 @@ void mpfi_matrix_vector_distance_center_pts(MPFR *distance, MPFIMatrix *x, MPFIM | |
| 344 344 |  | 
| 345 345 | 
             
            void mpfi_matrix_vector_norm(MPFI *norm, MPFIMatrix *x){
         | 
| 346 346 | 
             
              MPFI *tmp;
         | 
| 347 | 
            -
              r_mpfi_temp_alloc_init(tmp);
         | 
| 348 347 | 
             
              int i;
         | 
| 348 | 
            +
              r_mpfi_temp_alloc_init(tmp);
         | 
| 349 349 | 
             
              mpfi_set_si(norm, 0);
         | 
| 350 350 | 
             
              for(i = 0; i < x->size; i++){
         | 
| 351 351 | 
             
                mpfi_mul(tmp, x->data + i, x->data + i);
         | 
| @@ -357,9 +357,9 @@ void mpfi_matrix_vector_norm(MPFI *norm, MPFIMatrix *x){ | |
| 357 357 |  | 
| 358 358 | 
             
            void mpfi_matrix_max_norm(MPFI *norm, MPFIMatrix *x){
         | 
| 359 359 | 
             
              MPFI *tmp, *abs;
         | 
| 360 | 
            +
              int i;
         | 
| 360 361 | 
             
              r_mpfi_temp_alloc_init(tmp);
         | 
| 361 362 | 
             
              r_mpfi_temp_alloc_init(abs);
         | 
| 362 | 
            -
              int i;
         | 
| 363 363 | 
             
              mpfi_set_si(norm, 0);
         | 
| 364 364 | 
             
              for(i = 0; i < x->size; i++){
         | 
| 365 365 | 
             
                mpfi_abs(abs, x->data + i);
         | 
| @@ -395,24 +395,24 @@ void mpfi_matrix_max_diam_abs(MPFR *diam, MPFIMatrix *x){ | |
| 395 395 | 
             
            /* ------------------- vector --------------------- */
         | 
| 396 396 |  | 
| 397 397 | 
             
            void mpfi_col_vector_init(MPFIMatrix *mat, int row){
         | 
| 398 | 
            +
              int i;
         | 
| 398 399 | 
             
              mat->row = row;
         | 
| 399 400 | 
             
              mat->column = 1;
         | 
| 400 401 | 
             
              mat->size = row;
         | 
| 401 402 | 
             
              /* mat->data = (MPFI *)malloc(sizeof(MPF) * mat->size); */
         | 
| 402 403 | 
             
              mat->data = ALLOC_N(MPFI, mat->size);
         | 
| 403 | 
            -
              int i;
         | 
| 404 404 | 
             
              for(i = 0; i < mat->size; i++){
         | 
| 405 405 | 
             
                mpfi_init(mat->data + i);
         | 
| 406 406 | 
             
              }
         | 
| 407 407 | 
             
            }
         | 
| 408 408 |  | 
| 409 409 | 
             
            void mpfi_row_vector_init(MPFIMatrix *mat, int column){
         | 
| 410 | 
            +
              int i;
         | 
| 410 411 | 
             
              mat->row = 1;
         | 
| 411 412 | 
             
              mat->column = column;
         | 
| 412 413 | 
             
              mat->size = column;
         | 
| 413 414 | 
             
              /* mat->data = (MPFI *)malloc(sizeof(MPF) * mat->size); */
         | 
| 414 415 | 
             
              mat->data = ALLOC_N(MPFI, mat->size);
         | 
| 415 | 
            -
              int i;
         | 
| 416 416 | 
             
              for(i = 0; i < mat->size; i++){
         | 
| 417 417 | 
             
                mpfi_init(mat->data + i);
         | 
| 418 418 | 
             
              }
         | 
| @@ -421,12 +421,12 @@ void mpfi_row_vector_init(MPFIMatrix *mat, int column){ | |
| 421 421 | 
             
            /* If length of MPFIMatrix *x is zero, return 1. Otherwise return 0. */
         | 
| 422 422 | 
             
            int mpfi_vector_normalize(MPFIMatrix *new, MPFIMatrix *x){
         | 
| 423 423 | 
             
              MPFRMatrix *fr_mat;
         | 
| 424 | 
            +
              MPFR *norm;
         | 
| 425 | 
            +
              int i, j, index, ret = 0;
         | 
| 424 426 | 
             
              r_mpfr_matrix_temp_alloc_init(fr_mat, x->row, x->column);
         | 
| 425 427 | 
             
              mpfi_matrix_mid(fr_mat, x);
         | 
| 426 | 
            -
              MPFR *norm;
         | 
| 427 428 | 
             
              r_mpfr_temp_alloc_init(norm);
         | 
| 428 429 | 
             
              mpfr_matrix_vector_norm(norm, fr_mat);
         | 
| 429 | 
            -
              int i, j, index, ret = 0;
         | 
| 430 430 | 
             
              if(mpfr_cmp_ui(norm, 0) > 0){
         | 
| 431 431 | 
             
                for(j = 0; j < x->column; j++){
         | 
| 432 432 | 
             
                  index = j * x->row;
         | 
| @@ -454,11 +454,11 @@ void mpfi_vector_midpoint(MPFIMatrix *new, MPFIMatrix *x, MPFIMatrix *y){ | |
| 454 454 | 
             
            int mpfi_vector_set_length(MPFIMatrix *new, MPFIMatrix *x, MPFR *length){
         | 
| 455 455 | 
             
              MPFI *norm_i;
         | 
| 456 456 | 
             
              MPFR *factor_r;
         | 
| 457 | 
            +
              int i, j, index, ret = 0;
         | 
| 457 458 | 
             
              r_mpfi_temp_alloc_init(norm_i);
         | 
| 458 459 | 
             
              r_mpfr_temp_alloc_init(factor_r);
         | 
| 459 460 | 
             
              mpfi_matrix_vector_norm(norm_i, x);
         | 
| 460 461 | 
             
              mpfi_mid(factor_r, norm_i);
         | 
| 461 | 
            -
              int i, j, index, ret = 0;
         | 
| 462 462 | 
             
              if(mpfr_cmp_ui(factor_r, 0) > 0){
         | 
| 463 463 | 
             
                mpfr_ui_div(factor_r, 1, factor_r, GMP_RNDN);
         | 
| 464 464 | 
             
                mpfr_mul(factor_r, factor_r, length, GMP_RNDN);
         | 
| @@ -629,8 +629,9 @@ void mpfi_square_matrix_determinant(MPFI *det, MPFIMatrix *x){ | |
| 629 629 | 
             
                mpfi_3d_square_matrix_determinant(det, x);
         | 
| 630 630 | 
             
              }else{
         | 
| 631 631 | 
             
                MPFIMatrix *ptr_lu;
         | 
| 632 | 
            +
                int *indx, i;
         | 
| 632 633 | 
             
                r_mpfi_matrix_temp_alloc_init(ptr_lu, x->row, x->column);
         | 
| 633 | 
            -
                int  | 
| 634 | 
            +
                indx = (int *) malloc(sizeof(int) * x->row);
         | 
| 634 635 | 
             
                if((i = mpfi_square_matrix_lu_decomp (ptr_lu, indx, x)) >= 0){
         | 
| 635 636 | 
             
                  if (i == 0) {
         | 
| 636 637 | 
             
            	mpfi_set_si(det, 1);
         | 
| @@ -644,22 +645,22 @@ void mpfi_square_matrix_determinant(MPFI *det, MPFIMatrix *x){ | |
| 644 645 | 
             
                  mpfi_set_ui(det, 0);
         | 
| 645 646 | 
             
                }
         | 
| 646 647 | 
             
                r_mpfi_matrix_temp_free(ptr_lu);
         | 
| 648 | 
            +
                free(indx);
         | 
| 647 649 | 
             
              }
         | 
| 648 | 
            -
             | 
| 649 650 | 
             
            }
         | 
| 650 651 |  | 
| 651 652 | 
             
            void mpfi_square_matrix_qr_decomp(MPFIMatrix *q, MPFIMatrix *r, MPFIMatrix *x){
         | 
| 652 653 | 
             
              MPFIMatrix *q_mat, *r_mat;
         | 
| 654 | 
            +
              int size, i, j, k, ind1, ind2, ind3;
         | 
| 655 | 
            +
              MPFIMatrix *ary;
         | 
| 656 | 
            +
              MPFI *tmp;
         | 
| 653 657 | 
             
              r_mpfi_matrix_temp_alloc_init(q_mat, q->row, q->column);
         | 
| 654 658 | 
             
              r_mpfi_matrix_temp_alloc_init(r_mat, r->row, r->column);
         | 
| 655 659 |  | 
| 656 | 
            -
               | 
| 657 | 
            -
              MPFIMatrix *ary;
         | 
| 660 | 
            +
              size = x->row;
         | 
| 658 661 | 
             
              r_mpfi_matrix_temp_alloc_init(ary, size, size);
         | 
| 659 662 | 
             
              mpfi_matrix_set(ary, x);
         | 
| 660 | 
            -
              MPFI *tmp;
         | 
| 661 663 | 
             
              r_mpfi_temp_alloc_init(tmp);
         | 
| 662 | 
            -
              int i, j, k, ind1, ind2, ind3;
         | 
| 663 664 | 
             
              for (i = 0; i < size; i++) {
         | 
| 664 665 | 
             
                ind1 = i * size;
         | 
| 665 666 | 
             
                ind2 = i + ind1;
         | 
| @@ -707,5 +708,4 @@ void mpfi_square_matrix_identity(MPFIMatrix *id){ | |
| 707 708 | 
             
                  }
         | 
| 708 709 | 
             
                }
         | 
| 709 710 | 
             
              }
         | 
| 710 | 
            -
              
         | 
| 711 711 | 
             
            }
         | 
| @@ -273,10 +273,10 @@ static VALUE r_mpfi_row_vector_initialize (VALUE self, VALUE arg){ | |
| 273 273 | 
             
            static VALUE r_mpfi_matrix_marshal_dump(VALUE self)
         | 
| 274 274 | 
             
            {
         | 
| 275 275 | 
             
              MPFIMatrix *ptr;
         | 
| 276 | 
            -
              r_mpfi_get_matrix_struct(ptr, self);
         | 
| 277 276 | 
             
              int i;
         | 
| 278 277 | 
             
              char *tmp_str;
         | 
| 279 278 | 
             
              VALUE ret_ary;
         | 
| 279 | 
            +
              r_mpfi_get_matrix_struct(ptr, self);
         | 
| 280 280 | 
             
              ret_ary = rb_ary_new();
         | 
| 281 281 | 
             
              rb_ary_push(ret_ary, INT2FIX(ptr->row));
         | 
| 282 282 | 
             
              rb_ary_push(ret_ary, INT2FIX(ptr->column));
         | 
| @@ -293,15 +293,15 @@ static VALUE r_mpfi_matrix_marshal_dump(VALUE self) | |
| 293 293 | 
             
            static VALUE r_mpfi_matrix_marshal_load(VALUE self, VALUE dump_ary)
         | 
| 294 294 | 
             
            {
         | 
| 295 295 | 
             
              MPFIMatrix *ptr;
         | 
| 296 | 
            +
              int i;
         | 
| 297 | 
            +
              char *dump;
         | 
| 298 | 
            +
              VALUE dump_element;
         | 
| 296 299 | 
             
              r_mpfi_get_matrix_struct(ptr, self);
         | 
| 297 300 |  | 
| 298 301 | 
             
              ptr->row = NUM2INT(rb_ary_entry(dump_ary, 0));
         | 
| 299 302 | 
             
              ptr->column = NUM2INT(rb_ary_entry(dump_ary, 1));
         | 
| 300 303 | 
             
              ptr->size = ptr->row * ptr->column;
         | 
| 301 304 | 
             
              ptr->data = ALLOC_N(MPFI, ptr->size);
         | 
| 302 | 
            -
              int i;
         | 
| 303 | 
            -
              char *dump;
         | 
| 304 | 
            -
              VALUE dump_element;
         | 
| 305 305 |  | 
| 306 306 | 
             
              for(i = 0; i < ptr->size; i++){
         | 
| 307 307 | 
             
                dump_element = rb_ary_entry(dump_ary, i + 2);
         | 
| @@ -336,8 +336,9 @@ static VALUE r_mpfi_matrix_row_size (VALUE self){ | |
| 336 336 | 
             
            /* Return element at _arg_.*/
         | 
| 337 337 | 
             
            static VALUE r_mpfi_matrix_at (VALUE self, VALUE arg){
         | 
| 338 338 | 
             
              MPFIMatrix *ptr_self;
         | 
| 339 | 
            +
              int i;
         | 
| 339 340 | 
             
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 340 | 
            -
               | 
| 341 | 
            +
              i = NUM2INT(arg);
         | 
| 341 342 | 
             
              if (i < ptr_self->size) {
         | 
| 342 343 | 
             
                VALUE ret;
         | 
| 343 344 | 
             
                MPFI *ptr_ret;
         | 
| @@ -352,8 +353,10 @@ static VALUE r_mpfi_matrix_at (VALUE self, VALUE arg){ | |
| 352 353 | 
             
            /* Return element with _row_ and _column_.*/
         | 
| 353 354 | 
             
            static VALUE r_mpfi_matrix_element (VALUE self, VALUE row, VALUE column){
         | 
| 354 355 | 
             
              MPFIMatrix *ptr_self;
         | 
| 356 | 
            +
              int i, j;
         | 
| 355 357 | 
             
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 356 | 
            -
               | 
| 358 | 
            +
              i = NUM2INT(row);
         | 
| 359 | 
            +
              j = NUM2INT(column);
         | 
| 357 360 | 
             
              if (i < ptr_self->row && j < ptr_self->column) {
         | 
| 358 361 | 
             
                VALUE ret;
         | 
| 359 362 | 
             
                MPFI*ptr_ret;
         | 
| @@ -368,8 +371,10 @@ static VALUE r_mpfi_matrix_element (VALUE self, VALUE row, VALUE column){ | |
| 368 371 | 
             
            /* Set _robj_ to element of which row is _row_ and column is _column_. */
         | 
| 369 372 | 
             
            static VALUE r_mpfi_matrix_set_element (VALUE self, VALUE row, VALUE column, VALUE robj){
         | 
| 370 373 | 
             
              MPFIMatrix *ptr_self;
         | 
| 374 | 
            +
              int i, j;
         | 
| 371 375 | 
             
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 372 | 
            -
               | 
| 376 | 
            +
              i = NUM2INT(row);
         | 
| 377 | 
            +
              j = NUM2INT(column);
         | 
| 373 378 | 
             
              if (i < ptr_self->row && j < ptr_self->column) {
         | 
| 374 379 | 
             
                r_mpfi_set_robj(ptr_self->data + i + j * ptr_self->row, robj);
         | 
| 375 380 | 
             
              }
         | 
| @@ -379,9 +384,10 @@ static VALUE r_mpfi_matrix_set_element (VALUE self, VALUE row, VALUE column, VAL | |
| 379 384 | 
             
            /* Evaluate block with each element of matrix. */
         | 
| 380 385 | 
             
            static VALUE r_mpfi_matrix_each_element (VALUE self){
         | 
| 381 386 | 
             
              MPFIMatrix *ptr_self;
         | 
| 382 | 
            -
               | 
| 383 | 
            -
              VALUE ret = Qnil;
         | 
| 387 | 
            +
              VALUE ret;
         | 
| 384 388 | 
             
              int i, j;
         | 
| 389 | 
            +
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 390 | 
            +
              ret = Qnil;
         | 
| 385 391 | 
             
              for (i = 0; i < ptr_self->row; i++) {
         | 
| 386 392 | 
             
                for (j = 0; j < ptr_self->column; j++) {
         | 
| 387 393 | 
             
                  volatile VALUE arg = r_mpfi_make_new_fi_obj(ptr_self->data + i + j * ptr_self->row);
         | 
| @@ -394,9 +400,10 @@ static VALUE r_mpfi_matrix_each_element (VALUE self){ | |
| 394 400 | 
             
            /* Evaluate block with each element and its index. */
         | 
| 395 401 | 
             
            static VALUE r_mpfi_matrix_each_element_with_index (VALUE self){
         | 
| 396 402 | 
             
              MPFIMatrix *ptr_self;
         | 
| 397 | 
            -
               | 
| 398 | 
            -
              VALUE ret = Qnil, tmp_i;
         | 
| 403 | 
            +
              VALUE ret, tmp_i;
         | 
| 399 404 | 
             
              int i, j;
         | 
| 405 | 
            +
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 406 | 
            +
              ret = Qnil;
         | 
| 400 407 | 
             
              for (i = 0; i < ptr_self->row; i++) {
         | 
| 401 408 | 
             
                tmp_i = INT2NUM(i);
         | 
| 402 409 | 
             
                for (j = 0; j < ptr_self->column; j++) {
         | 
| @@ -410,8 +417,8 @@ static VALUE r_mpfi_matrix_each_element_with_index (VALUE self){ | |
| 410 417 | 
             
            /* Return one dimensinal array which has strings converted elements to. */
         | 
| 411 418 | 
             
            static VALUE r_mpfi_matrix_str_ary_for_inspect(VALUE self){
         | 
| 412 419 | 
             
              MPFIMatrix *ptr_self;
         | 
| 413 | 
            -
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 414 420 | 
             
              char *tmp_str;
         | 
| 421 | 
            +
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 415 422 | 
             
              VALUE ret_val[ptr_self->size];
         | 
| 416 423 | 
             
              int i;
         | 
| 417 424 | 
             
              for (i = 0; i < ptr_self->size; i++) {
         | 
| @@ -428,10 +435,10 @@ static VALUE r_mpfi_matrix_str_ary_for_inspect(VALUE self){ | |
| 428 435 | 
             
            /* Return two dimensinal array which has strings converted elements to. */
         | 
| 429 436 | 
             
            static VALUE r_mpfi_matrix_str_ary_for_inspect2(VALUE self){
         | 
| 430 437 | 
             
              MPFIMatrix *ptr_self;
         | 
| 431 | 
            -
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 432 438 | 
             
              char *tmp_str;
         | 
| 433 | 
            -
              VALUE ary[ptr_self->row];
         | 
| 434 439 | 
             
              int i, j;
         | 
| 440 | 
            +
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 441 | 
            +
              VALUE ary[ptr_self->row];
         | 
| 435 442 | 
             
              for(i = 0; i < ptr_self->row; i++){
         | 
| 436 443 | 
             
                ary[i] = rb_ary_new();
         | 
| 437 444 | 
             
              }
         | 
| @@ -450,10 +457,10 @@ static VALUE r_mpfi_matrix_str_ary_for_inspect2(VALUE self){ | |
| 450 457 |  | 
| 451 458 | 
             
            static VALUE r_mpfi_matrix_to_str_ary(VALUE self){
         | 
| 452 459 | 
             
              MPFIMatrix *ptr_self;
         | 
| 453 | 
            -
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 454 460 | 
             
              char *tmp_str1, *tmp_str2;
         | 
| 455 | 
            -
              VALUE ary[ptr_self->row];
         | 
| 456 461 | 
             
              int i, j;
         | 
| 462 | 
            +
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 463 | 
            +
              VALUE ary[ptr_self->row];
         | 
| 457 464 | 
             
              for(i = 0; i < ptr_self->row; i++){
         | 
| 458 465 | 
             
                ary[i] = rb_ary_new();
         | 
| 459 466 | 
             
              }
         | 
| @@ -475,11 +482,11 @@ static VALUE r_mpfi_matrix_to_str_ary(VALUE self){ | |
| 475 482 |  | 
| 476 483 | 
             
            static VALUE r_mpfi_matrix_to_strf_ary(VALUE self, VALUE format_str){
         | 
| 477 484 | 
             
              MPFIMatrix *ptr_self;
         | 
| 485 | 
            +
              char *tmp_str1, *tmp_str2, *format;
         | 
| 486 | 
            +
              int i, j;
         | 
| 478 487 | 
             
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 479 | 
            -
               | 
| 480 | 
            -
              char *format = StringValuePtr(format_str);
         | 
| 488 | 
            +
              format = StringValuePtr(format_str);
         | 
| 481 489 | 
             
              VALUE ary[ptr_self->row];
         | 
| 482 | 
            -
              int i, j;
         | 
| 483 490 | 
             
              for(i = 0; i < ptr_self->row; i++){
         | 
| 484 491 | 
             
                ary[i] = rb_ary_new();
         | 
| 485 492 | 
             
              }
         | 
| @@ -501,9 +508,9 @@ static VALUE r_mpfi_matrix_to_strf_ary(VALUE self, VALUE format_str){ | |
| 501 508 |  | 
| 502 509 | 
             
            static VALUE r_mpfi_matrix_to_array(VALUE self){
         | 
| 503 510 | 
             
              MPFIMatrix *ptr_self;
         | 
| 511 | 
            +
              int i;
         | 
| 504 512 | 
             
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 505 513 | 
             
              VALUE ret_val[ptr_self->size];
         | 
| 506 | 
            -
              int i;
         | 
| 507 514 | 
             
              for (i = 0; i < ptr_self->size; i++) {
         | 
| 508 515 | 
             
                ret_val[i] = r_mpfi_make_new_fi_obj(ptr_self->data + i);
         | 
| 509 516 | 
             
              }
         | 
| @@ -512,9 +519,9 @@ static VALUE r_mpfi_matrix_to_array(VALUE self){ | |
| 512 519 |  | 
| 513 520 | 
             
            static VALUE r_mpfi_matrix_to_array2(VALUE self){
         | 
| 514 521 | 
             
              MPFIMatrix *ptr_self;
         | 
| 522 | 
            +
              int i, j;
         | 
| 515 523 | 
             
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 516 524 | 
             
              VALUE ary[ptr_self->row];
         | 
| 517 | 
            -
              int i, j;
         | 
| 518 525 | 
             
              for(i = 0; i < ptr_self->row; i++){
         | 
| 519 526 | 
             
                ary[i] = rb_ary_new();
         | 
| 520 527 | 
             
              }
         | 
| @@ -528,9 +535,10 @@ static VALUE r_mpfi_matrix_to_array2(VALUE self){ | |
| 528 535 |  | 
| 529 536 | 
             
            static VALUE r_mpfi_matrix_row (VALUE self, VALUE arg) {
         | 
| 530 537 | 
             
              MPFIMatrix *ptr_self, *ptr_ret;
         | 
| 531 | 
            -
               | 
| 532 | 
            -
              int num = NUM2INT(arg);
         | 
| 538 | 
            +
              int num;
         | 
| 533 539 | 
             
              VALUE ret;
         | 
| 540 | 
            +
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 541 | 
            +
              num = NUM2INT(arg);
         | 
| 534 542 | 
             
              if(num < ptr_self->row){
         | 
| 535 543 | 
             
                r_mpfi_matrix_suitable_matrix_init (&ret, &ptr_ret, 1, ptr_self->column);
         | 
| 536 544 | 
             
                mpfi_matrix_row(ptr_ret, ptr_self, num);
         | 
| @@ -542,9 +550,10 @@ static VALUE r_mpfi_matrix_row (VALUE self, VALUE arg) { | |
| 542 550 |  | 
| 543 551 | 
             
            static VALUE r_mpfi_matrix_column (VALUE self, VALUE arg) {
         | 
| 544 552 | 
             
              MPFIMatrix *ptr_self, *ptr_ret;
         | 
| 545 | 
            -
               | 
| 546 | 
            -
              int num = NUM2INT(arg);
         | 
| 553 | 
            +
              int num;
         | 
| 547 554 | 
             
              VALUE ret;
         | 
| 555 | 
            +
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 556 | 
            +
              num = NUM2INT(arg);
         | 
| 548 557 | 
             
              if(num < ptr_self->column){
         | 
| 549 558 | 
             
                r_mpfi_matrix_suitable_matrix_init (&ret, &ptr_ret, ptr_self->row, 1);
         | 
| 550 559 | 
             
                mpfi_matrix_column(ptr_ret, ptr_self, num);
         | 
| @@ -557,8 +566,8 @@ static VALUE r_mpfi_matrix_column (VALUE self, VALUE arg) { | |
| 557 566 | 
             
            /* Return transposed matrix which is new object. */
         | 
| 558 567 | 
             
            static VALUE r_mpfi_matrix_transpose (VALUE self){
         | 
| 559 568 | 
             
              MPFIMatrix *ptr_self, *ptr_ret;
         | 
| 560 | 
            -
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 561 569 | 
             
              VALUE ret;
         | 
| 570 | 
            +
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 562 571 | 
             
              r_mpfi_matrix_suitable_matrix_init (&ret, &ptr_ret, ptr_self->column, ptr_self->row);
         | 
| 563 572 | 
             
              mpfi_matrix_transpose(ptr_ret, ptr_self);
         | 
| 564 573 | 
             
              return ret;
         | 
| @@ -567,6 +576,7 @@ static VALUE r_mpfi_matrix_transpose (VALUE self){ | |
| 567 576 | 
             
            /* Transpose self. This method is destroying method. */
         | 
| 568 577 | 
             
            static VALUE r_mpfi_matrix_transpose2 (VALUE self){
         | 
| 569 578 | 
             
              MPFIMatrix *ptr_self, tmp;
         | 
| 579 | 
            +
              int i;
         | 
| 570 580 | 
             
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 571 581 | 
             
              if (ptr_self->column > 1 && ptr_self->row > 1) {
         | 
| 572 582 | 
             
                mpfi_matrix_init(&tmp, ptr_self->column, ptr_self->row);
         | 
| @@ -574,7 +584,6 @@ static VALUE r_mpfi_matrix_transpose2 (VALUE self){ | |
| 574 584 | 
             
                mpfi_matrix_set(ptr_self, &tmp);
         | 
| 575 585 | 
             
                mpfi_matrix_clear(&tmp);
         | 
| 576 586 | 
             
              }
         | 
| 577 | 
            -
              int i;
         | 
| 578 587 | 
             
              i = ptr_self->column;
         | 
| 579 588 | 
             
              ptr_self->column = ptr_self->row;
         | 
| 580 589 | 
             
              ptr_self->row = i;
         | 
| @@ -584,8 +593,8 @@ static VALUE r_mpfi_matrix_transpose2 (VALUE self){ | |
| 584 593 | 
             
            /* Return transposed matrix which is new object. */
         | 
| 585 594 | 
             
            static VALUE r_mpfi_matrix_neg (VALUE self){
         | 
| 586 595 | 
             
              MPFIMatrix *ptr_self, *ptr_ret;
         | 
| 587 | 
            -
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 588 596 | 
             
              VALUE ret;
         | 
| 597 | 
            +
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 589 598 | 
             
              r_mpfi_matrix_suitable_matrix_init (&ret, &ptr_ret, ptr_self->row, ptr_self->column);
         | 
| 590 599 | 
             
              mpfi_matrix_neg(ptr_ret, ptr_self);
         | 
| 591 600 | 
             
              return ret;
         | 
| @@ -597,19 +606,18 @@ static VALUE r_mpfi_matrix_equal_p (VALUE self, VALUE other){ | |
| 597 606 | 
             
              MPFIMatrix *ptr_self, *ptr_other;
         | 
| 598 607 | 
             
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 599 608 | 
             
              r_mpfi_get_matrix_struct(ptr_other, other);
         | 
| 600 | 
            -
              VALUE ret = Qtrue;
         | 
| 601 609 | 
             
              if (mpfi_matrix_equal_p(ptr_self, ptr_other) != 0) {
         | 
| 602 | 
            -
                 | 
| 610 | 
            +
                return Qnil;
         | 
| 603 611 | 
             
              }
         | 
| 604 | 
            -
              return  | 
| 612 | 
            +
              return Qtrue;
         | 
| 605 613 | 
             
            }
         | 
| 606 614 |  | 
| 607 615 | 
             
            /* Return _self_ + _other_. */
         | 
| 608 616 | 
             
            static VALUE r_mpfi_matrix_add (VALUE self, VALUE other){
         | 
| 609 617 | 
             
              MPFIMatrix *ptr_self, *ptr_other, *ptr_ret;
         | 
| 618 | 
            +
              VALUE ret;
         | 
| 610 619 | 
             
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 611 620 | 
             
              r_mpfi_get_matrix_struct(ptr_other, other);
         | 
| 612 | 
            -
              VALUE ret;
         | 
| 613 621 | 
             
              if (ptr_self->column == ptr_other->column && ptr_self->row == ptr_other->row) {
         | 
| 614 622 | 
             
                r_mpfi_matrix_suitable_matrix_init (&ret, &ptr_ret, ptr_self->row, ptr_self->column);
         | 
| 615 623 | 
             
                mpfi_matrix_add(ptr_ret, ptr_self, ptr_other);
         | 
| @@ -622,8 +630,8 @@ static VALUE r_mpfi_matrix_add (VALUE self, VALUE other){ | |
| 622 630 | 
             
            /* Return _self_ + _other_ which is MPFI::Matrix. */
         | 
| 623 631 | 
             
            static VALUE r_mpfi_matrix_add2 (VALUE self, VALUE other){
         | 
| 624 632 | 
             
              MPFIMatrix *ptr_self, *ptr_ret;
         | 
| 625 | 
            -
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 626 633 | 
             
              VALUE ret;
         | 
| 634 | 
            +
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 627 635 | 
             
              r_mpfi_make_matrix_struct(ret, ptr_ret);
         | 
| 628 636 |  | 
| 629 637 | 
             
              if(RTEST(rb_funcall(__mpfi_matrix_class__, eqq, 1, other))){
         | 
| @@ -653,9 +661,9 @@ static VALUE r_mpfi_matrix_add2 (VALUE self, VALUE other){ | |
| 653 661 | 
             
            /* Return _self_ - _other_. */
         | 
| 654 662 | 
             
            static VALUE r_mpfi_matrix_sub (VALUE self, VALUE other){
         | 
| 655 663 | 
             
              MPFIMatrix *ptr_self, *ptr_other, *ptr_ret;
         | 
| 664 | 
            +
              VALUE ret;
         | 
| 656 665 | 
             
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 657 666 | 
             
              r_mpfi_get_matrix_struct(ptr_other, other);
         | 
| 658 | 
            -
              VALUE ret;
         | 
| 659 667 | 
             
              r_mpfi_make_matrix_struct(ret, ptr_ret);
         | 
| 660 668 | 
             
              if (ptr_self->column == ptr_other->column && ptr_self->row == ptr_other->row) {
         | 
| 661 669 | 
             
                r_mpfi_matrix_suitable_matrix_init (&ret, &ptr_ret, ptr_self->row, ptr_self->column);
         | 
| @@ -669,8 +677,8 @@ static VALUE r_mpfi_matrix_sub (VALUE self, VALUE other){ | |
| 669 677 | 
             
            /* Return _self_ - _other_ which is MPFI::Matrix. */
         | 
| 670 678 | 
             
            static VALUE r_mpfi_matrix_sub2 (VALUE self, VALUE other){
         | 
| 671 679 | 
             
              MPFIMatrix *ptr_self, *ptr_ret;
         | 
| 672 | 
            -
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 673 680 | 
             
              VALUE ret;
         | 
| 681 | 
            +
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 674 682 | 
             
              r_mpfi_make_matrix_struct(ret, ptr_ret);
         | 
| 675 683 |  | 
| 676 684 | 
             
              if(RTEST(rb_funcall(__mpfi_matrix_class__, eqq, 1, other))){
         | 
| @@ -699,10 +707,10 @@ static VALUE r_mpfi_matrix_sub2 (VALUE self, VALUE other){ | |
| 699 707 |  | 
| 700 708 | 
             
            static VALUE r_mpfi_matrix_vector_inner_product (VALUE self, VALUE arg){
         | 
| 701 709 | 
             
              MPFIMatrix *ptr_self, *ptr_arg;
         | 
| 702 | 
            -
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 703 | 
            -
              r_mpfi_get_matrix_struct(ptr_arg, arg);
         | 
| 704 710 | 
             
              VALUE ret;
         | 
| 705 711 | 
             
              MPFI *ptr_ret;
         | 
| 712 | 
            +
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 713 | 
            +
              r_mpfi_get_matrix_struct(ptr_arg, arg);
         | 
| 706 714 | 
             
              r_mpfi_make_struct_init(ret, ptr_ret);
         | 
| 707 715 | 
             
              if(ptr_self->size == ptr_arg->size){
         | 
| 708 716 | 
             
                mpfi_matrix_inner_product(ptr_ret, ptr_self, ptr_arg);
         | 
| @@ -715,9 +723,9 @@ static VALUE r_mpfi_matrix_vector_inner_product (VALUE self, VALUE arg){ | |
| 715 723 | 
             
            /* Return _self_ * _other_. */
         | 
| 716 724 | 
             
            static VALUE r_mpfi_matrix_mul_matrix (VALUE self, VALUE other){
         | 
| 717 725 | 
             
              MPFIMatrix *ptr_self, *ptr_other, *ptr_ret;
         | 
| 726 | 
            +
              VALUE ret;
         | 
| 718 727 | 
             
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 719 728 | 
             
              r_mpfi_get_matrix_struct(ptr_other, other);
         | 
| 720 | 
            -
              VALUE ret;
         | 
| 721 729 | 
             
              r_mpfi_make_matrix_struct(ret, ptr_ret);
         | 
| 722 730 | 
             
              if (ptr_self->column == ptr_other->row) {
         | 
| 723 731 | 
             
                if((ptr_other->column == 1) && (ptr_self->row == 1)){
         | 
| @@ -735,8 +743,8 @@ static VALUE r_mpfi_matrix_mul_matrix (VALUE self, VALUE other){ | |
| 735 743 | 
             
            /* Return _self_ * _other_ which is MPFI::Matrix. */
         | 
| 736 744 | 
             
            static VALUE r_mpfi_matrix_mul_matrix2 (VALUE self, VALUE other){
         | 
| 737 745 | 
             
              MPFIMatrix *ptr_self, *ptr_ret;
         | 
| 738 | 
            -
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 739 746 | 
             
              VALUE ret;
         | 
| 747 | 
            +
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 740 748 | 
             
              r_mpfi_make_matrix_struct(ret, ptr_ret);
         | 
| 741 749 |  | 
| 742 750 | 
             
              if(RTEST(rb_funcall(__mpfi_matrix_class__, eqq, 1, other))){
         | 
| @@ -767,8 +775,8 @@ static VALUE r_mpfi_matrix_mul_matrix2 (VALUE self, VALUE other){ | |
| 767 775 | 
             
            static VALUE r_mpfi_matrix_mul_scalar (VALUE self, VALUE scalar){
         | 
| 768 776 | 
             
              MPFIMatrix *ptr_self, *ptr_ret;
         | 
| 769 777 | 
             
              MPFI *ptr_scalar;
         | 
| 770 | 
            -
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 771 778 | 
             
              VALUE ret;
         | 
| 779 | 
            +
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 772 780 | 
             
              r_mpfi_matrix_suitable_matrix_init (&ret, &ptr_ret, ptr_self->row, ptr_self->column);
         | 
| 773 781 | 
             
              if(RTEST(rb_funcall(r_mpfi_class, eqq, 1, scalar))){
         | 
| 774 782 | 
             
                r_mpfi_get_struct(ptr_scalar, scalar);
         | 
| @@ -785,8 +793,8 @@ static VALUE r_mpfi_matrix_mul_scalar (VALUE self, VALUE scalar){ | |
| 785 793 | 
             
            static VALUE r_mpfi_matrix_div_scalar (VALUE self, VALUE scalar){
         | 
| 786 794 | 
             
              MPFIMatrix *ptr_self, *ptr_ret;
         | 
| 787 795 | 
             
              MPFI *ptr_scalar;
         | 
| 788 | 
            -
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 789 796 | 
             
              VALUE ret;
         | 
| 797 | 
            +
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 790 798 | 
             
              r_mpfi_matrix_suitable_matrix_init (&ret, &ptr_ret, ptr_self->row, ptr_self->column);
         | 
| 791 799 | 
             
              if(RTEST(rb_funcall(r_mpfi_class, eqq, 1, scalar))){
         | 
| 792 800 | 
             
                r_mpfi_get_struct(ptr_scalar, scalar);
         | 
| @@ -803,8 +811,9 @@ static VALUE r_mpfi_matrix_div_scalar (VALUE self, VALUE scalar){ | |
| 803 811 |  | 
| 804 812 | 
             
            static VALUE r_mpfi_matrix_include_p (VALUE self, VALUE other){
         | 
| 805 813 | 
             
              MPFIMatrix *ptr_self;
         | 
| 814 | 
            +
              VALUE ret;
         | 
| 806 815 | 
             
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 807 | 
            -
               | 
| 816 | 
            +
              ret = Qnil;
         | 
| 808 817 | 
             
              if(RTEST(rb_funcall(r_mpfi_matrix, eqq, 1, other))){
         | 
| 809 818 | 
             
                MPFIMatrix *ptr_other;
         | 
| 810 819 | 
             
                r_mpfi_get_matrix_struct(ptr_other, other);
         | 
| @@ -825,8 +834,9 @@ static VALUE r_mpfi_matrix_include_p (VALUE self, VALUE other){ | |
| 825 834 |  | 
| 826 835 | 
             
            static VALUE r_mpfi_matrix_strictly_include_p (VALUE self, VALUE other){
         | 
| 827 836 | 
             
              MPFIMatrix *ptr_self;
         | 
| 837 | 
            +
              VALUE ret;
         | 
| 828 838 | 
             
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 829 | 
            -
               | 
| 839 | 
            +
              ret = Qnil;
         | 
| 830 840 | 
             
              if(RTEST(rb_funcall(r_mpfi_matrix, eqq, 1, other))){
         | 
| 831 841 | 
             
                MPFIMatrix *ptr_other;
         | 
| 832 842 | 
             
                r_mpfi_get_matrix_struct(ptr_other, other);
         | 
| @@ -851,9 +861,9 @@ static VALUE r_mpfi_matrix_bounded_p (VALUE self) { | |
| 851 861 |  | 
| 852 862 | 
             
            static VALUE r_mpfi_matrix_mid (VALUE self){
         | 
| 853 863 | 
             
              MPFIMatrix *ptr_self;
         | 
| 854 | 
            -
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 855 864 | 
             
              VALUE val_ret;
         | 
| 856 865 | 
             
              MPFRMatrix *ptr_ret;
         | 
| 866 | 
            +
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 857 867 | 
             
              r_mpfr_matrix_suitable_matrix_init(&val_ret, &ptr_ret, ptr_self->row, ptr_self->column);
         | 
| 858 868 | 
             
              mpfi_matrix_mid(ptr_ret, ptr_self);
         | 
| 859 869 | 
             
              return val_ret;
         | 
| @@ -861,8 +871,8 @@ static VALUE r_mpfi_matrix_mid (VALUE self){ | |
| 861 871 |  | 
| 862 872 | 
             
            static VALUE r_mpfi_matrix_mid_interval (VALUE self){
         | 
| 863 873 | 
             
              MPFIMatrix *ptr_self, *ptr_ret;
         | 
| 864 | 
            -
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 865 874 | 
             
              VALUE val_ret;
         | 
| 875 | 
            +
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 866 876 | 
             
              r_mpfi_matrix_suitable_matrix_init(&val_ret, &ptr_ret, ptr_self->row, ptr_self->column);
         | 
| 867 877 | 
             
              mpfi_matrix_mid_interval(ptr_ret, ptr_self);
         | 
| 868 878 | 
             
              return val_ret;
         | 
| @@ -870,9 +880,9 @@ static VALUE r_mpfi_matrix_mid_interval (VALUE self){ | |
| 870 880 |  | 
| 871 881 | 
             
            static VALUE r_mpfi_matrix_intersect (VALUE self, VALUE other){
         | 
| 872 882 | 
             
              MPFIMatrix *ptr_self, *ptr_other, *ptr_ret;
         | 
| 883 | 
            +
              VALUE val_ret;
         | 
| 873 884 | 
             
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 874 885 | 
             
              r_mpfi_get_matrix_struct(ptr_other, other);
         | 
| 875 | 
            -
              VALUE val_ret;
         | 
| 876 886 | 
             
              r_mpfi_matrix_suitable_matrix_init(&val_ret, &ptr_ret, ptr_self->row, ptr_self->column);
         | 
| 877 887 | 
             
              if(mpfi_matrix_intersect(ptr_ret, ptr_self, ptr_other) == 0){
         | 
| 878 888 | 
             
                return val_ret;
         | 
| @@ -883,9 +893,9 @@ static VALUE r_mpfi_matrix_intersect (VALUE self, VALUE other){ | |
| 883 893 |  | 
| 884 894 | 
             
            static VALUE r_mpfi_matrix_union (VALUE self, VALUE other){
         | 
| 885 895 | 
             
              MPFIMatrix *ptr_self, *ptr_other, *ptr_ret;
         | 
| 896 | 
            +
              VALUE val_ret;
         | 
| 886 897 | 
             
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 887 898 | 
             
              r_mpfi_get_matrix_struct(ptr_other, other);
         | 
| 888 | 
            -
              VALUE val_ret;
         | 
| 889 899 | 
             
              r_mpfi_matrix_suitable_matrix_init(&val_ret, &ptr_ret, ptr_self->row, ptr_self->column);
         | 
| 890 900 | 
             
              if(mpfi_matrix_union(ptr_ret, ptr_self, ptr_other) == 0){
         | 
| 891 901 | 
             
                return val_ret;
         | 
| @@ -897,9 +907,9 @@ static VALUE r_mpfi_matrix_union (VALUE self, VALUE other){ | |
| 897 907 |  | 
| 898 908 | 
             
            static VALUE r_mpfi_matrix_max_diam_abs (VALUE self){
         | 
| 899 909 | 
             
              MPFIMatrix *ptr_self;
         | 
| 900 | 
            -
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 901 910 | 
             
              MPFR *ptr_ret;
         | 
| 902 911 | 
             
              VALUE ret_val;
         | 
| 912 | 
            +
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 903 913 | 
             
              r_mpfr_make_struct_init(ret_val, ptr_ret);
         | 
| 904 914 | 
             
              mpfi_matrix_max_diam_abs(ptr_ret, ptr_self);
         | 
| 905 915 | 
             
              return ret_val;
         | 
| @@ -916,13 +926,13 @@ static VALUE r_mpfi_square_matrix_dim (VALUE self){ | |
| 916 926 | 
             
            static VALUE r_mpfi_square_matrix_lu_decomp (VALUE self){
         | 
| 917 927 | 
             
              MPFIMatrix *ptr_self, *ptr_ret_l, *ptr_ret_u;
         | 
| 918 928 | 
             
              VALUE ret_l, ret_u;
         | 
| 929 | 
            +
              int i, j;
         | 
| 919 930 | 
             
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 920 931 | 
             
              r_mpfi_matrix_suitable_matrix_init (&ret_l, &ptr_ret_l, ptr_self->row, ptr_self->column);
         | 
| 921 932 | 
             
              r_mpfi_matrix_suitable_matrix_init (&ret_u, &ptr_ret_u, ptr_self->row, ptr_self->column);
         | 
| 922 933 | 
             
              VALUE ret_indx[ptr_self->row];
         | 
| 923 934 | 
             
              int indx[ptr_self->row];
         | 
| 924 935 | 
             
              if(mpfi_square_matrix_lu_decomp (ptr_ret_u, indx, ptr_self) >= 0){
         | 
| 925 | 
            -
                int i, j;
         | 
| 926 936 | 
             
                for(i = 1; i < ptr_ret_u->row; i++){
         | 
| 927 937 | 
             
                  for(j = 0; j < i; j++){
         | 
| 928 938 | 
             
            	mpfi_set(mpfi_matrix_get_element(ptr_ret_l, i, j), mpfi_matrix_get_element(ptr_ret_u, i, j));
         | 
| @@ -948,9 +958,9 @@ static VALUE r_mpfi_square_matrix_lu_decomp (VALUE self){ | |
| 948 958 |  | 
| 949 959 | 
             
            static VALUE r_mpfi_square_matrix_determinant (VALUE self){
         | 
| 950 960 | 
             
              MPFIMatrix *ptr_self;
         | 
| 951 | 
            -
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 952 961 | 
             
              MPFI *ptr_ret;
         | 
| 953 962 | 
             
              VALUE ret;
         | 
| 963 | 
            +
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 954 964 | 
             
              r_mpfi_make_struct_init(ret, ptr_ret);
         | 
| 955 965 | 
             
              mpfi_square_matrix_determinant(ptr_ret, ptr_self);
         | 
| 956 966 | 
             
              return ret;
         | 
| @@ -958,8 +968,8 @@ static VALUE r_mpfi_square_matrix_determinant (VALUE self){ | |
| 958 968 |  | 
| 959 969 | 
             
            static VALUE r_mpfi_square_matrix_qr_decomp (VALUE self){
         | 
| 960 970 | 
             
              MPFIMatrix *ptr_self, *ptr_q, *ptr_r;
         | 
| 961 | 
            -
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 962 971 | 
             
              VALUE q, r;
         | 
| 972 | 
            +
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 963 973 | 
             
              r_mpfi_matrix_suitable_matrix_init (&q, &ptr_q, ptr_self->row, ptr_self->column);
         | 
| 964 974 | 
             
              r_mpfi_matrix_suitable_matrix_init (&r, &ptr_r, ptr_self->column, ptr_self->column);
         | 
| 965 975 | 
             
              mpfi_square_matrix_qr_decomp(ptr_q, ptr_r, ptr_self);
         | 
| @@ -986,9 +996,9 @@ static VALUE r_mpfi_vector_dim (VALUE self){ | |
| 986 996 | 
             
            /* Take matrix for vector and return length of the vector. */
         | 
| 987 997 | 
             
            static VALUE r_mpfi_vector_abs (VALUE self){
         | 
| 988 998 | 
             
              MPFIMatrix *ptr_self;
         | 
| 989 | 
            -
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 990 999 | 
             
              VALUE ret;
         | 
| 991 1000 | 
             
              MPFI *ptr_ret;
         | 
| 1001 | 
            +
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 992 1002 | 
             
              r_mpfi_make_struct_init(ret, ptr_ret);
         | 
| 993 1003 | 
             
              mpfi_matrix_vector_norm(ptr_ret, ptr_self);
         | 
| 994 1004 | 
             
              return ret;
         | 
| @@ -997,8 +1007,9 @@ static VALUE r_mpfi_vector_abs (VALUE self){ | |
| 997 1007 | 
             
            /* Return element at _arg_.*/
         | 
| 998 1008 | 
             
            static VALUE r_mpfi_vector_element (VALUE self, VALUE arg){
         | 
| 999 1009 | 
             
              MPFIMatrix *ptr_self;
         | 
| 1010 | 
            +
              int i;
         | 
| 1000 1011 | 
             
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 1001 | 
            -
               | 
| 1012 | 
            +
              i = NUM2INT(arg);
         | 
| 1002 1013 | 
             
              if (i < ptr_self->size) {
         | 
| 1003 1014 | 
             
                VALUE ret;
         | 
| 1004 1015 | 
             
                MPFI *ptr_ret;
         | 
| @@ -1013,8 +1024,9 @@ static VALUE r_mpfi_vector_element (VALUE self, VALUE arg){ | |
| 1013 1024 | 
             
            /* Set _robj_ to _arg_ th element. */
         | 
| 1014 1025 | 
             
            static VALUE r_mpfi_vector_set_element (VALUE self, VALUE arg, VALUE robj){
         | 
| 1015 1026 | 
             
              MPFIMatrix *ptr_self;
         | 
| 1027 | 
            +
              int i;
         | 
| 1016 1028 | 
             
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 1017 | 
            -
               | 
| 1029 | 
            +
              i = NUM2INT(arg);
         | 
| 1018 1030 | 
             
              if (i < ptr_self->size) {
         | 
| 1019 1031 | 
             
                r_mpfi_set_robj(ptr_self->data + i, robj);
         | 
| 1020 1032 | 
             
              }
         | 
| @@ -1024,11 +1036,12 @@ static VALUE r_mpfi_vector_set_element (VALUE self, VALUE arg, VALUE robj){ | |
| 1024 1036 | 
             
            /* Evaluate block with each element of vector. */
         | 
| 1025 1037 | 
             
            static VALUE r_mpfi_vector_each_element (VALUE self){
         | 
| 1026 1038 | 
             
              MPFIMatrix *ptr_self;
         | 
| 1027 | 
            -
               | 
| 1028 | 
            -
              VALUE ret = Qnil, tmp;
         | 
| 1039 | 
            +
              VALUE ret, tmp;
         | 
| 1029 1040 | 
             
              MPFI *tmp_ptr;
         | 
| 1030 | 
            -
              r_mpfi_make_struct_init(tmp, tmp_ptr);
         | 
| 1031 1041 | 
             
              int i;
         | 
| 1042 | 
            +
              ret = Qnil;
         | 
| 1043 | 
            +
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 1044 | 
            +
              r_mpfi_make_struct_init(tmp, tmp_ptr);
         | 
| 1032 1045 | 
             
              for (i = 0; i < ptr_self->size; i++) {
         | 
| 1033 1046 | 
             
                mpfi_set(tmp_ptr, ptr_self->data + i);
         | 
| 1034 1047 | 
             
                ret = rb_yield(tmp);
         | 
| @@ -1039,11 +1052,12 @@ static VALUE r_mpfi_vector_each_element (VALUE self){ | |
| 1039 1052 | 
             
            /* Evaluate block with each element and its index. */
         | 
| 1040 1053 | 
             
            static VALUE r_mpfi_vector_each_element_with_index (VALUE self){
         | 
| 1041 1054 | 
             
              MPFIMatrix *ptr_self;
         | 
| 1042 | 
            -
               | 
| 1043 | 
            -
              VALUE ret = Qnil, tmp;
         | 
| 1055 | 
            +
              VALUE ret, tmp;
         | 
| 1044 1056 | 
             
              MPFI *tmp_ptr;
         | 
| 1045 | 
            -
              r_mpfi_make_struct_init(tmp, tmp_ptr);
         | 
| 1046 1057 | 
             
              int i;
         | 
| 1058 | 
            +
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 1059 | 
            +
              r_mpfi_make_struct_init(tmp, tmp_ptr);
         | 
| 1060 | 
            +
              ret = Qnil;
         | 
| 1047 1061 | 
             
              for (i = 0; i < ptr_self->size; i++) {
         | 
| 1048 1062 | 
             
                mpfi_set(tmp_ptr, ptr_self->data + i);
         | 
| 1049 1063 | 
             
                ret = rb_yield(rb_ary_new3(2, tmp, INT2NUM(i)));
         | 
| @@ -1053,10 +1067,10 @@ static VALUE r_mpfi_vector_each_element_with_index (VALUE self){ | |
| 1053 1067 |  | 
| 1054 1068 | 
             
            static VALUE r_mpfi_vector_inner_product (VALUE self, VALUE arg){
         | 
| 1055 1069 | 
             
              MPFIMatrix *ptr_self, *ptr_arg;
         | 
| 1056 | 
            -
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 1057 | 
            -
              r_mpfi_get_matrix_struct(ptr_arg, arg);
         | 
| 1058 1070 | 
             
              VALUE ret;
         | 
| 1059 1071 | 
             
              MPFI *ptr_ret;
         | 
| 1072 | 
            +
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 1073 | 
            +
              r_mpfi_get_matrix_struct(ptr_arg, arg);
         | 
| 1060 1074 | 
             
              r_mpfi_make_struct_init(ret, ptr_ret);
         | 
| 1061 1075 | 
             
              if(ptr_self->size == ptr_arg->size){
         | 
| 1062 1076 | 
             
                mpfi_matrix_inner_product(ptr_ret, ptr_self, ptr_arg);
         | 
| @@ -1068,10 +1082,10 @@ static VALUE r_mpfi_vector_inner_product (VALUE self, VALUE arg){ | |
| 1068 1082 |  | 
| 1069 1083 | 
             
            static VALUE r_mpfi_vector_distance_from (VALUE self, VALUE arg){
         | 
| 1070 1084 | 
             
              MPFIMatrix *ptr_self, *ptr_arg;
         | 
| 1071 | 
            -
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 1072 | 
            -
              r_mpfi_get_matrix_struct(ptr_arg, arg);
         | 
| 1073 1085 | 
             
              VALUE ret;
         | 
| 1074 1086 | 
             
              MPFI *ptr_ret;
         | 
| 1087 | 
            +
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 1088 | 
            +
              r_mpfi_get_matrix_struct(ptr_arg, arg);
         | 
| 1075 1089 | 
             
              r_mpfi_make_struct_init(ret, ptr_ret);
         | 
| 1076 1090 | 
             
              if(ptr_self->size == ptr_arg->size){
         | 
| 1077 1091 | 
             
                mpfi_matrix_vector_distance(ptr_ret, ptr_self, ptr_arg);
         | 
| @@ -1083,10 +1097,10 @@ static VALUE r_mpfi_vector_distance_from (VALUE self, VALUE arg){ | |
| 1083 1097 |  | 
| 1084 1098 | 
             
            static VALUE r_mpfi_vector_distance_center_pts (VALUE self, VALUE arg){
         | 
| 1085 1099 | 
             
              MPFIMatrix *ptr_self, *ptr_arg;
         | 
| 1086 | 
            -
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 1087 | 
            -
              r_mpfi_get_matrix_struct(ptr_arg, arg);
         | 
| 1088 1100 | 
             
              VALUE ret;
         | 
| 1089 1101 | 
             
              MPFR *ptr_ret;
         | 
| 1102 | 
            +
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 1103 | 
            +
              r_mpfi_get_matrix_struct(ptr_arg, arg);
         | 
| 1090 1104 | 
             
              r_mpfr_make_struct_init(ret, ptr_ret);
         | 
| 1091 1105 | 
             
              if(ptr_self->size == ptr_arg->size){
         | 
| 1092 1106 | 
             
                mpfi_matrix_vector_distance_center_pts(ptr_ret, ptr_self, ptr_arg);
         | 
| @@ -1098,9 +1112,9 @@ static VALUE r_mpfi_vector_distance_center_pts (VALUE self, VALUE arg){ | |
| 1098 1112 |  | 
| 1099 1113 | 
             
            static VALUE r_mpfi_vector_midpoint (VALUE self, VALUE arg){
         | 
| 1100 1114 | 
             
              MPFIMatrix *ptr_self, *ptr_arg, *ptr_ret;
         | 
| 1115 | 
            +
              VALUE ret;
         | 
| 1101 1116 | 
             
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 1102 1117 | 
             
              r_mpfi_get_matrix_struct(ptr_arg, arg);
         | 
| 1103 | 
            -
              VALUE ret;
         | 
| 1104 1118 | 
             
              r_mpfi_matrix_suitable_matrix_init (&ret, &ptr_ret, ptr_self->row, ptr_self->column);
         | 
| 1105 1119 | 
             
              mpfi_vector_midpoint(ptr_ret, ptr_self, ptr_arg);
         | 
| 1106 1120 | 
             
              return ret;
         | 
| @@ -1108,8 +1122,8 @@ static VALUE r_mpfi_vector_midpoint (VALUE self, VALUE arg){ | |
| 1108 1122 |  | 
| 1109 1123 | 
             
            static VALUE r_mpfi_vector_normalize (VALUE self){
         | 
| 1110 1124 | 
             
              MPFIMatrix *ptr_self, *ptr_ret;
         | 
| 1111 | 
            -
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 1112 1125 | 
             
              VALUE ret;
         | 
| 1126 | 
            +
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 1113 1127 | 
             
              r_mpfi_matrix_suitable_matrix_init (&ret, &ptr_ret, ptr_self->row, ptr_self->column);
         | 
| 1114 1128 | 
             
              if(mpfi_vector_normalize(ptr_ret, ptr_self) == 0){
         | 
| 1115 1129 | 
             
                return ret;
         | 
| @@ -1121,8 +1135,9 @@ static VALUE r_mpfi_vector_normalize (VALUE self){ | |
| 1121 1135 | 
             
            /* Return normalized vector of _self_. This method is destroy method. */
         | 
| 1122 1136 | 
             
            static VALUE r_mpfi_vector_normalize2 (VALUE self){
         | 
| 1123 1137 | 
             
              MPFIMatrix *ptr_self, tmp;
         | 
| 1138 | 
            +
              VALUE ret;
         | 
| 1124 1139 | 
             
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 1125 | 
            -
               | 
| 1140 | 
            +
              ret = self;
         | 
| 1126 1141 | 
             
              mpfi_matrix_init(&tmp, ptr_self->column, ptr_self->row);
         | 
| 1127 1142 | 
             
              if(mpfi_vector_normalize(&tmp, ptr_self) == 0){
         | 
| 1128 1143 | 
             
                mpfi_matrix_set(ptr_self, &tmp);
         | 
| @@ -1135,9 +1150,10 @@ static VALUE r_mpfi_vector_normalize2 (VALUE self){ | |
| 1135 1150 |  | 
| 1136 1151 | 
             
            static VALUE r_mpfi_vector_set_length (VALUE self, VALUE arg){
         | 
| 1137 1152 | 
             
              MPFIMatrix *ptr_self, *ptr_ret;
         | 
| 1138 | 
            -
               | 
| 1139 | 
            -
              VALUE ret, returned_value = Qnil;
         | 
| 1153 | 
            +
              VALUE ret, returned_value;
         | 
| 1140 1154 | 
             
              MPFR *ptr_l;
         | 
| 1155 | 
            +
              returned_value = Qnil;
         | 
| 1156 | 
            +
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 1141 1157 | 
             
              r_mpfi_matrix_suitable_matrix_init (&ret, &ptr_ret, ptr_self->row, ptr_self->column);
         | 
| 1142 1158 | 
             
              if(RTEST(rb_funcall(r_mpfr_class, eqq, 1, arg))){
         | 
| 1143 1159 | 
             
                r_mpfr_get_struct(ptr_l, arg);
         | 
| @@ -1157,9 +1173,10 @@ static VALUE r_mpfi_vector_set_length (VALUE self, VALUE arg){ | |
| 1157 1173 |  | 
| 1158 1174 | 
             
            static VALUE r_mpfi_vector_set_length2 (VALUE self, VALUE arg){
         | 
| 1159 1175 | 
             
              MPFIMatrix *ptr_self, *ptr_ret;
         | 
| 1160 | 
            -
               | 
| 1161 | 
            -
              VALUE ret, returned_value = Qnil;
         | 
| 1176 | 
            +
              VALUE ret, returned_value;
         | 
| 1162 1177 | 
             
              MPFR *ptr_l;
         | 
| 1178 | 
            +
              returned_value = Qnil;
         | 
| 1179 | 
            +
              r_mpfi_get_matrix_struct(ptr_self, self);
         | 
| 1163 1180 | 
             
              r_mpfi_matrix_suitable_matrix_init (&ret, &ptr_ret, ptr_self->row, ptr_self->column);
         | 
| 1164 1181 | 
             
              if(RTEST(rb_funcall(r_mpfi_class, eqq, 1, arg))){
         | 
| 1165 1182 | 
             
                r_mpfr_get_struct(ptr_l, arg);
         | 
| @@ -1180,19 +1197,17 @@ static VALUE r_mpfi_vector_set_length2 (VALUE self, VALUE arg){ | |
| 1180 1197 | 
             
            }
         | 
| 1181 1198 |  | 
| 1182 1199 |  | 
| 1183 | 
            -
             | 
| 1184 1200 | 
             
            static VALUE r_mpfr_matrix_to_fi_matrix(VALUE self){
         | 
| 1185 1201 | 
             
              MPFRMatrix *ptr;
         | 
| 1186 | 
            -
              r_mpfr_get_matrix_struct(ptr, self);
         | 
| 1187 1202 | 
             
              VALUE ret;
         | 
| 1188 1203 | 
             
              MPFIMatrix *ptr_ret;
         | 
| 1204 | 
            +
              r_mpfr_get_matrix_struct(ptr, self);
         | 
| 1189 1205 | 
             
              r_mpfi_matrix_suitable_matrix_init (&ret, &ptr_ret, ptr->row, ptr->column);
         | 
| 1190 1206 | 
             
              mpfi_matrix_from_mpfr_matrix(ptr_ret, ptr);
         | 
| 1191 1207 | 
             
              return ret;
         | 
| 1192 1208 | 
             
            }
         | 
| 1193 1209 |  | 
| 1194 1210 | 
             
            void Init_matrix(){
         | 
| 1195 | 
            -
             | 
| 1196 1211 | 
             
              /* Initialization of MPFI::Matrix, MPFI::SquareMatrix, MPFI::ColumnVector and MPFI::RowVector */
         | 
| 1197 1212 | 
             
              VALUE tmp_r_mpfi_class = rb_define_class("MPFI", rb_cNumeric);
         | 
| 1198 1213 | 
             
              r_mpfi_matrix = rb_define_class_under(tmp_r_mpfi_class, "Matrix", rb_cObject);
         | 
| @@ -1316,6 +1331,4 @@ void Init_matrix(){ | |
| 1316 1331 | 
             
              eqq = rb_intern("===");
         | 
| 1317 1332 | 
             
              __mpfr_matrix_class__ = rb_eval_string("MPFR::Matrix");
         | 
| 1318 1333 | 
             
              __mpfi_matrix_class__ = rb_eval_string("MPFI::Matrix");
         | 
| 1319 | 
            -
             | 
| 1320 1334 | 
             
            }
         | 
| 1321 | 
            -
             |