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();