comparison src/ov-cell.cc @ 5275:23b37da9fd5b

[project @ 2005-04-08 16:07:35 by jwe]
author jwe
date Fri, 08 Apr 2005 16:07:37 +0000
parents 57077d0ddc8e
children 4c8a2e4e0717
comparison
equal deleted inserted replaced
5274:eae7b40388e9 5275:23b37da9fd5b
77 77
78 if (tcell.length () == 1) 78 if (tcell.length () == 1)
79 retval(0) = tcell(0,0); 79 retval(0) = tcell(0,0);
80 else 80 else
81 { 81 {
82 int n = tcell.numel (); 82 octave_idx_type n = tcell.numel ();
83 83
84 octave_value_list lst (n, octave_value ()); 84 octave_value_list lst (n, octave_value ());
85 85
86 for (int i = 0; i < n; i++) 86 for (octave_idx_type i = 0; i < n; i++)
87 { 87 {
88 OCTAVE_QUIT; 88 OCTAVE_QUIT;
89 lst(i) = tcell(i); 89 lst(i) = tcell(i);
90 } 90 }
91 91
251 size_t 251 size_t
252 octave_cell::byte_size (void) const 252 octave_cell::byte_size (void) const
253 { 253 {
254 size_t retval = 0; 254 size_t retval = 0;
255 255
256 for (int i = 0; i < numel (); i++) 256 for (octave_idx_type i = 0; i < numel (); i++)
257 retval += matrix(i).byte_size (); 257 retval += matrix(i).byte_size ();
258 258
259 return retval; 259 return retval;
260 } 260 }
261 261
262 octave_value_list 262 octave_value_list
263 octave_cell::list_value (void) const 263 octave_cell::list_value (void) const
264 { 264 {
265 octave_value_list retval; 265 octave_value_list retval;
266 266
267 int nr = rows (); 267 octave_idx_type nr = rows ();
268 int nc = columns (); 268 octave_idx_type nc = columns ();
269 269
270 if (nr == 1 && nc > 0) 270 if (nr == 1 && nc > 0)
271 { 271 {
272 retval.resize (nc); 272 retval.resize (nc);
273 273
274 for (int i = 0; i < nc; i++) 274 for (octave_idx_type i = 0; i < nc; i++)
275 retval(i) = matrix(0,i); 275 retval(i) = matrix(0,i);
276 } 276 }
277 else if (nc == 1 && nr > 0) 277 else if (nc == 1 && nr > 0)
278 { 278 {
279 retval.resize (nr); 279 retval.resize (nr);
280 280
281 for (int i = 0; i < nr; i++) 281 for (octave_idx_type i = 0; i < nr; i++)
282 retval(i) = matrix(i,0); 282 retval(i) = matrix(i,0);
283 } 283 }
284 else 284 else
285 error ("invalid conversion from cell array to list"); 285 error ("invalid conversion from cell array to list");
286 286
290 string_vector 290 string_vector
291 octave_cell::all_strings (bool pad, bool) const 291 octave_cell::all_strings (bool pad, bool) const
292 { 292 {
293 string_vector retval; 293 string_vector retval;
294 294
295 int nr = rows (); 295 octave_idx_type nr = rows ();
296 int nc = columns (); 296 octave_idx_type nc = columns ();
297 297
298 int n_elts = 0; 298 int n_elts = 0;
299 299
300 int max_len = 0; 300 octave_idx_type max_len = 0;
301 301
302 for (int j = 0; j < nc; j++) 302 for (octave_idx_type j = 0; j < nc; j++)
303 { 303 {
304 for (int i = 0; i < nr; i++) 304 for (octave_idx_type i = 0; i < nr; i++)
305 { 305 {
306 string_vector s = matrix(i,j).all_strings (); 306 string_vector s = matrix(i,j).all_strings ();
307 307
308 if (error_state) 308 if (error_state)
309 return retval; 309 return retval;
310 310
311 n_elts += s.length (); 311 n_elts += s.length ();
312 312
313 int s_max_len = s.max_length (); 313 octave_idx_type s_max_len = s.max_length ();
314 314
315 if (s_max_len > max_len) 315 if (s_max_len > max_len)
316 max_len = s_max_len; 316 max_len = s_max_len;
317 } 317 }
318 } 318 }
319 319
320 retval.resize (n_elts); 320 retval.resize (n_elts);
321 321
322 int k = 0; 322 octave_idx_type k = 0;
323 323
324 for (int j = 0; j < nc; j++) 324 for (octave_idx_type j = 0; j < nc; j++)
325 { 325 {
326 for (int i = 0; i < nr; i++) 326 for (octave_idx_type i = 0; i < nr; i++)
327 { 327 {
328 string_vector s = matrix(i,j).all_strings (); 328 string_vector s = matrix(i,j).all_strings ();
329 329
330 int n = s.length (); 330 int n = s.length ();
331 331
332 for (int ii = 0; ii < n; ii++) 332 for (octave_idx_type ii = 0; ii < n; ii++)
333 { 333 {
334 std::string t = s[ii]; 334 std::string t = s[ii];
335 int t_len = t.length (); 335 int t_len = t.length ();
336 336
337 if (pad && max_len > t_len) 337 if (pad && max_len > t_len)
362 { 362 {
363 int nd = matrix.ndims (); 363 int nd = matrix.ndims ();
364 364
365 if (nd == 2) 365 if (nd == 2)
366 { 366 {
367 int nr = rows (); 367 octave_idx_type nr = rows ();
368 int nc = columns (); 368 octave_idx_type nc = columns ();
369 369
370 if (nr > 0 && nc > 0) 370 if (nr > 0 && nc > 0)
371 { 371 {
372 indent (os); 372 indent (os);
373 os << "{"; 373 os << "{";
374 newline (os); 374 newline (os);
375 375
376 increment_indent_level (); 376 increment_indent_level ();
377 377
378 for (int j = 0; j < nc; j++) 378 for (octave_idx_type j = 0; j < nc; j++)
379 { 379 {
380 for (int i = 0; i < nr; i++) 380 for (octave_idx_type i = 0; i < nr; i++)
381 { 381 {
382 OCTAVE_QUIT; 382 OCTAVE_QUIT;
383 383
384 OSSTREAM buf; 384 OSSTREAM buf;
385 buf << "[" << i+1 << "," << j+1 << "]" << OSSTREAM_ENDS; 385 buf << "[" << i+1 << "," << j+1 << "]" << OSSTREAM_ENDS;
424 dim_vector d = dims (); 424 dim_vector d = dims ();
425 if (d.length () > 2) 425 if (d.length () > 2)
426 { 426 {
427 os << "# ndims: " << d.length () << "\n"; 427 os << "# ndims: " << d.length () << "\n";
428 428
429 for (int i=0; i < d.length (); i++) 429 for (int i = 0; i < d.length (); i++)
430 os << " " << d (i); 430 os << " " << d (i);
431 os << "\n"; 431 os << "\n";
432 432
433 Cell tmp = cell_value (); 433 Cell tmp = cell_value ();
434 434
435 for (int i = 0; i < d.numel (); i++) 435 for (octave_idx_type i = 0; i < d.numel (); i++)
436 { 436 {
437 octave_value o_val = tmp.elem (i); 437 octave_value o_val = tmp.elem (i);
438 438
439 // Recurse to print sub-value. 439 // Recurse to print sub-value.
440 bool b = save_ascii_data (os, o_val, CELL_ELT_TAG, infnan_warned, 440 bool b = save_ascii_data (os, o_val, CELL_ELT_TAG, infnan_warned,
451 os << "# rows: " << rows () << "\n" 451 os << "# rows: " << rows () << "\n"
452 << "# columns: " << columns () << "\n"; 452 << "# columns: " << columns () << "\n";
453 453
454 Cell tmp = cell_value (); 454 Cell tmp = cell_value ();
455 455
456 for (int j = 0; j < tmp.cols (); j++) 456 for (octave_idx_type j = 0; j < tmp.cols (); j++)
457 { 457 {
458 for (int i = 0; i < tmp.rows (); i++) 458 for (octave_idx_type i = 0; i < tmp.rows (); i++)
459 { 459 {
460 octave_value o_val = tmp.elem (i, j); 460 octave_value o_val = tmp.elem (i, j);
461 461
462 // Recurse to print sub-value. 462 // Recurse to print sub-value.
463 bool b = save_ascii_data (os, o_val, CELL_ELT_TAG, 463 bool b = save_ascii_data (os, o_val, CELL_ELT_TAG,
484 484
485 keywords[0] = "ndims"; 485 keywords[0] = "ndims";
486 keywords[1] = "rows"; 486 keywords[1] = "rows";
487 487
488 std::string kw; 488 std::string kw;
489 int val = 0; 489 octave_idx_type val = 0;
490 490
491 if (extract_keyword (is, keywords, kw, val, true)) 491 if (extract_keyword (is, keywords, kw, val, true))
492 { 492 {
493 if (kw == "ndims") 493 if (kw == "ndims")
494 { 494 {
495 int mdims = val; 495 int mdims = static_cast<int> (val);
496 496
497 if (mdims >= 0) 497 if (mdims >= 0)
498 { 498 {
499 dim_vector dv; 499 dim_vector dv;
500 dv.resize (mdims); 500 dv.resize (mdims);
502 for (int i = 0; i < mdims; i++) 502 for (int i = 0; i < mdims; i++)
503 is >> dv(i); 503 is >> dv(i);
504 504
505 Cell tmp(dv); 505 Cell tmp(dv);
506 506
507 for (int i = 0; i < dv.numel (); i++) 507 for (octave_idx_type i = 0; i < dv.numel (); i++)
508 { 508 {
509 octave_value t2; 509 octave_value t2;
510 bool dummy; 510 bool dummy;
511 511
512 // recurse to read cell elements 512 // recurse to read cell elements
540 success = false; 540 success = false;
541 } 541 }
542 } 542 }
543 else if (kw == "rows") 543 else if (kw == "rows")
544 { 544 {
545 int nr = val; 545 octave_idx_type nr = val;
546 int nc = 0; 546 octave_idx_type nc = 0;
547 547
548 if (nr >= 0 && extract_keyword (is, "columns", nc) && nc >= 0) 548 if (nr >= 0 && extract_keyword (is, "columns", nc) && nc >= 0)
549 { 549 {
550 if (nr > 0 && nc > 0) 550 if (nr > 0 && nc > 0)
551 { 551 {
552 Cell tmp (nr, nc); 552 Cell tmp (nr, nc);
553 553
554 for (int j = 0; j < nc; j++) 554 for (octave_idx_type j = 0; j < nc; j++)
555 { 555 {
556 for (int i = 0; i < nr; i++) 556 for (octave_idx_type i = 0; i < nr; i++)
557 { 557 {
558 octave_value t2; 558 octave_value t2;
559 bool dummy; 559 bool dummy;
560 560
561 // recurse to read cell elements 561 // recurse to read cell elements
617 return false; 617 return false;
618 618
619 // Use negative value for ndims 619 // Use negative value for ndims
620 FOUR_BYTE_INT di = - d.length(); 620 FOUR_BYTE_INT di = - d.length();
621 os.write (X_CAST (char *, &di), 4); 621 os.write (X_CAST (char *, &di), 4);
622 for (int i=0; i < d.length (); i++) 622 for (int i = 0; i < d.length (); i++)
623 { 623 {
624 di = d(i); 624 di = d(i);
625 os.write (X_CAST (char *, &di), 4); 625 os.write (X_CAST (char *, &di), 4);
626 } 626 }
627 627
628 Cell tmp = cell_value (); 628 Cell tmp = cell_value ();
629 629
630 for (int i = 0; i < d.numel (); i++) 630 for (octave_idx_type i = 0; i < d.numel (); i++)
631 { 631 {
632 octave_value o_val = tmp.elem (i); 632 octave_value o_val = tmp.elem (i);
633 633
634 // Recurse to print sub-value. 634 // Recurse to print sub-value.
635 bool b = save_binary_data (os, o_val, CELL_ELT_TAG, "", 0, 635 bool b = save_binary_data (os, o_val, CELL_ELT_TAG, "", 0,
679 dv.resize (mdims); 679 dv.resize (mdims);
680 dv(1) = dv(0); 680 dv(1) = dv(0);
681 dv(0) = 1; 681 dv(0) = 1;
682 } 682 }
683 683
684 int nel = dv.numel (); 684 octave_idx_type nel = dv.numel ();
685 Cell tmp(dv); 685 Cell tmp(dv);
686 686
687 for (int i = 0; i < nel; i++) 687 for (octave_idx_type i = 0; i < nel; i++)
688 { 688 {
689 octave_value t2; 689 octave_value t2;
690 bool dummy; 690 bool dummy;
691 std::string doc; 691 std::string doc;
692 692
776 776
777 // Recursively add each element of the cell to this group. 777 // Recursively add each element of the cell to this group.
778 778
779 Cell tmp = cell_value (); 779 Cell tmp = cell_value ();
780 780
781 for (int i = 0; i < dv.numel (); i++) 781 for (octave_idx_type i = 0; i < dv.numel (); i++)
782 { 782 {
783 char s[20]; 783 char s[20];
784 sprintf (s, "_%d", i); 784 sprintf (s, "_%d", i);
785 785
786 if (! add_hdf5_data(data_hid, tmp.elem (i), s, "", false, 786 if (! add_hdf5_data(data_hid, tmp.elem (i), s, "", false,
865 group_id = H5Gopen (loc_id, name); 865 group_id = H5Gopen (loc_id, name);
866 H5Gget_num_objs (group_id, &num_obj); 866 H5Gget_num_objs (group_id, &num_obj);
867 H5Gclose (group_id); 867 H5Gclose (group_id);
868 #endif 868 #endif
869 869
870 for (int i = 0; i < dv.numel (); i++) 870 for (octave_idx_type i = 0; i < dv.numel (); i++)
871 { 871 {
872 872
873 #ifdef HAVE_H5GGET_NUM_OBJS 873 #ifdef HAVE_H5GGET_NUM_OBJS
874 if (current_item >= static_cast<int> (num_obj)) 874 if (current_item >= static_cast<int> (num_obj))
875 retval2 = -1; 875 retval2 = -1;
1087 { 1087 {
1088 dim_vector m_dv = m.dims (); 1088 dim_vector m_dv = m.dims ();
1089 1089
1090 string_vector keys = m.keys (); 1090 string_vector keys = m.keys ();
1091 1091
1092 int fields_numel = keys.length (); 1092 octave_idx_type fields_numel = keys.length ();
1093 1093
1094 // The resulting dim_vector should have dimensions: 1094 // The resulting dim_vector should have dimensions:
1095 // [numel(fields) size(struct)] 1095 // [numel(fields) size(struct)]
1096 1096
1097 dim_vector result_dv; 1097 dim_vector result_dv;
1111 1111
1112 // Use ra_idx both for counting and for assignments, so 1112 // Use ra_idx both for counting and for assignments, so
1113 // ra_idx(0) will both contain fields_numel for each call to 1113 // ra_idx(0) will both contain fields_numel for each call to
1114 // increment_index and j for each assignment. 1114 // increment_index and j for each assignment.
1115 1115
1116 Array<int> ra_idx (result_dv.length (), 0); 1116 Array<octave_idx_type> ra_idx (result_dv.length (), 0);
1117 ra_idx(0) = fields_numel; 1117 ra_idx(0) = fields_numel;
1118 1118
1119 for (int i = 0; i < m_dv.numel (); i++) 1119 for (octave_idx_type i = 0; i < m_dv.numel (); i++)
1120 { 1120 {
1121 for (int j = 0; j < fields_numel; j++) 1121 for (octave_idx_type j = 0; j < fields_numel; j++)
1122 { 1122 {
1123 ra_idx(0) = j; 1123 ra_idx(0) = j;
1124 1124
1125 Cell c_tmp = m.contents (keys(j)); 1125 Cell c_tmp = m.contents (keys(j));
1126 1126