Mercurial > octave-nkf
comparison src/DLD-FUNCTIONS/cellfun.cc @ 5989:e049385342f6
[project @ 2006-09-14 02:10:46 by jwe]
author | jwe |
---|---|
date | Thu, 14 Sep 2006 02:10:46 +0000 |
parents | d9ce802628e6 |
children | 9b982dd07654 |
comparison
equal
deleted
inserted
replaced
5988:d9ce802628e6 | 5989:e049385342f6 |
---|---|
272 error ("unknown function"); | 272 error ("unknown function"); |
273 else | 273 else |
274 { | 274 { |
275 octave_value_list idx; | 275 octave_value_list idx; |
276 octave_value_list inputlist; | 276 octave_value_list inputlist; |
277 octave_value_list errlist; | |
278 bool UniformOutput = true; | 277 bool UniformOutput = true; |
279 bool haveErrorHandler = false; | 278 bool haveErrorHandler = false; |
280 std::string err_name; | 279 std::string err_name; |
281 octave_function *ErrorHandler; | 280 octave_function *ErrorHandler; |
282 int offset = 1; | 281 int offset = 1; |
356 { | 355 { |
357 retval.resize(nargout); | 356 retval.resize(nargout); |
358 | 357 |
359 for (octave_idx_type count = 0; count < k ; count++) | 358 for (octave_idx_type count = 0; count < k ; count++) |
360 { | 359 { |
361 for (int i = 0; i < nargin-offset; i++) | 360 for (int j = 0; j < nargin-offset; j++) |
362 inputlist(i) = inputs[i](count); | 361 inputlist(j) = inputs[j](count); |
363 | 362 |
364 octave_value_list tmp = feval (func, inputlist, nargout); | 363 octave_value_list tmp = feval (func, inputlist, nargout); |
365 | 364 |
366 if (error_state && haveErrorHandler) | 365 if (error_state && haveErrorHandler) |
367 { | 366 { |
392 if (error_state) | 391 if (error_state) |
393 break; | 392 break; |
394 | 393 |
395 if (count == 0) | 394 if (count == 0) |
396 { | 395 { |
397 for (int i = 0; i < nargout; i++) | 396 for (int j = 0; j < nargout; j++) |
398 { | 397 { |
399 octave_value val; | 398 octave_value val; |
400 val = tmp(i); | 399 val = tmp(j); |
401 | 400 |
402 if (error_state) | 401 if (error_state) |
403 goto cellfun_err; | 402 goto cellfun_err; |
404 | 403 |
405 val.resize(f_args.dims()); | 404 val.resize(f_args.dims()); |
406 retval(i) = val; | 405 retval(j) = val; |
407 } | 406 } |
408 } | 407 } |
409 else | 408 else |
410 { | 409 { |
411 idx(0) = octave_value (static_cast<double>(count+1)); | 410 idx(0) = octave_value (static_cast<double>(count+1)); |
412 for (int i = 0; i < nargout; i++) | 411 for (int j = 0; j < nargout; j++) |
413 retval(i) = | 412 { |
414 retval(i).subsasgn ("(", | 413 // FIXME -- need an easier way to express |
415 std::list<octave_value_list> | 414 // this test. |
416 (1, idx(0)), tmp(i)); | 415 octave_value val = tmp(j); |
416 | |
417 if (val.ndims () == 2 | |
418 && val.rows () == 1 && val.columns () == 1) | |
419 retval(j) = | |
420 retval(j).subsasgn ("(", | |
421 std::list<octave_value_list> | |
422 (1, idx(0)), val); | |
423 else | |
424 error ("cellfun: expecting all values to be scalars for UniformOutput = true"); | |
425 } | |
417 } | 426 } |
418 | 427 |
419 if (error_state) | 428 if (error_state) |
420 break; | 429 break; |
421 } | 430 } |
422 } | 431 } |
423 else | 432 else |
424 { | 433 { |
425 OCTAVE_LOCAL_BUFFER (Cell, results, nargout); | 434 OCTAVE_LOCAL_BUFFER (Cell, results, nargout); |
426 for (int i = 0; i < nargout; i++) | 435 for (int j = 0; j < nargout; j++) |
427 results[i].resize(f_args.dims()); | 436 results[j].resize(f_args.dims()); |
428 | 437 |
429 for (octave_idx_type count = 0; count < k ; count++) | 438 for (octave_idx_type count = 0; count < k ; count++) |
430 { | 439 { |
431 for (int i = 0; i < nargin-offset; i++) | 440 for (int j = 0; j < nargin-offset; j++) |
432 inputlist(i) = inputs[i](count); | 441 inputlist(j) = inputs[j](count); |
433 | 442 |
434 octave_value_list tmp = feval (func, inputlist, nargout); | 443 octave_value_list tmp = feval (func, inputlist, nargout); |
435 | 444 |
436 if (error_state && haveErrorHandler) | 445 if (error_state && haveErrorHandler) |
437 { | 446 { |
461 | 470 |
462 if (error_state) | 471 if (error_state) |
463 break; | 472 break; |
464 | 473 |
465 | 474 |
466 for (int i = 0; i < nargout; i++) | 475 for (int j = 0; j < nargout; j++) |
467 results[i](count) = tmp(i); | 476 results[j](count) = tmp(j); |
468 } | 477 } |
469 | 478 |
470 retval.resize(nargout); | 479 retval.resize(nargout); |
471 for (int i = 0; i < nargout; i++) | 480 for (int j = 0; j < nargout; j++) |
472 retval(i) = results[i]; | 481 retval(j) = results[j]; |
473 } | 482 } |
474 | 483 |
475 cellfun_err: | 484 cellfun_err: |
476 if (error_state) | 485 if (error_state) |
477 retval = octave_value_list(); | 486 retval = octave_value_list(); |