Mercurial > octave-nkf
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 |