comparison liboctave/idx-vector.cc @ 11586:12df7854fa7c

strip trailing whitespace from source files
author John W. Eaton <jwe@octave.org>
date Thu, 20 Jan 2011 17:24:59 -0500
parents 57632dea2446
children 4ced6b90fffb
comparison
equal deleted inserted replaced
11585:1473d0cf86d2 11586:12df7854fa7c
96 96
97 count++; 97 count++;
98 return this; 98 return this;
99 } 99 }
100 100
101 std::ostream& 101 std::ostream&
102 idx_vector::idx_colon_rep::print (std::ostream& os) const 102 idx_vector::idx_colon_rep::print (std::ostream& os) const
103 { 103 {
104 return os << ":"; 104 return os << ":";
105 } 105 }
106 106
132 err = true; 132 err = true;
133 } 133 }
134 else if (len > 0) 134 else if (len > 0)
135 { 135 {
136 if (r.all_elements_are_ints ()) 136 if (r.all_elements_are_ints ())
137 { 137 {
138 start = static_cast<octave_idx_type> (r.base ()) - 1; 138 start = static_cast<octave_idx_type> (r.base ()) - 1;
139 step = static_cast<octave_idx_type> (r.inc ()); 139 step = static_cast<octave_idx_type> (r.inc ());
140 if (start < 0 || (step < 0 && start + (len-1)*step < 0)) 140 if (start < 0 || (step < 0 && start + (len-1)*step < 0))
141 { 141 {
142 gripe_invalid_index (); 142 gripe_invalid_index ();
193 count++; 193 count++;
194 return this; 194 return this;
195 } 195 }
196 } 196 }
197 197
198 std::ostream& 198 std::ostream&
199 idx_vector::idx_range_rep::print (std::ostream& os) const 199 idx_vector::idx_range_rep::print (std::ostream& os) const
200 { 200 {
201 os << start << ':' << step << ':' << start + len*step; 201 os << start << ':' << step << ':' << start + len*step;
202 return os; 202 return os;
203 } 203 }
204 204
205 Range 205 Range
206 idx_vector::idx_range_rep::unconvert (void) const 206 idx_vector::idx_range_rep::unconvert (void) const
207 { 207 {
208 return Range (static_cast<double> (start+1), 208 return Range (static_cast<double> (start+1),
209 static_cast<double> (step), len); 209 static_cast<double> (step), len);
210 } 210 }
211 211
212 Array<octave_idx_type> 212 Array<octave_idx_type>
213 idx_vector::idx_range_rep::as_array (void) 213 idx_vector::idx_range_rep::as_array (void)
218 218
219 return retval; 219 return retval;
220 } 220 }
221 221
222 inline octave_idx_type 222 inline octave_idx_type
223 convert_index (octave_idx_type i, bool& conv_error, 223 convert_index (octave_idx_type i, bool& conv_error,
224 octave_idx_type& ext) 224 octave_idx_type& ext)
225 { 225 {
226 if (i <= 0) 226 if (i <= 0)
227 conv_error = true; 227 conv_error = true;
228 228
229 if (ext < i) 229 if (ext < i)
230 ext = i; 230 ext = i;
231 231
249 return convert_index (static_cast<double> (x), conv_error, ext); 249 return convert_index (static_cast<double> (x), conv_error, ext);
250 } 250 }
251 251
252 template <class T> 252 template <class T>
253 inline octave_idx_type 253 inline octave_idx_type
254 convert_index (octave_int<T> x, bool& conv_error, 254 convert_index (octave_int<T> x, bool& conv_error,
255 octave_idx_type& ext) 255 octave_idx_type& ext)
256 { 256 {
257 octave_idx_type i = octave_int<octave_idx_type> (x).value (); 257 octave_idx_type i = octave_int<octave_idx_type> (x).value ();
258 258
259 return convert_index (i, conv_error, ext); 259 return convert_index (i, conv_error, ext);
271 271
272 if (err) 272 if (err)
273 gripe_invalid_index (); 273 gripe_invalid_index ();
274 } 274 }
275 275
276 idx_vector::idx_scalar_rep::idx_scalar_rep (octave_idx_type i) 276 idx_vector::idx_scalar_rep::idx_scalar_rep (octave_idx_type i)
277 : data (i) 277 : data (i)
278 { 278 {
279 if (data < 0) 279 if (data < 0)
280 { 280 {
281 gripe_invalid_index (); 281 gripe_invalid_index ();
282 err = true; 282 err = true;
283 } 283 }
284 } 284 }
337 } 337 }
338 338
339 // Note that this makes a shallow copy of the index array. 339 // Note that this makes a shallow copy of the index array.
340 340
341 idx_vector::idx_vector_rep::idx_vector_rep (const Array<octave_idx_type>& inda) 341 idx_vector::idx_vector_rep::idx_vector_rep (const Array<octave_idx_type>& inda)
342 : data (inda.data ()), len (inda.numel ()), ext (0), 342 : data (inda.data ()), len (inda.numel ()), ext (0),
343 aowner (new Array<octave_idx_type> (inda)), orig_dims (inda.dims ()) 343 aowner (new Array<octave_idx_type> (inda)), orig_dims (inda.dims ())
344 { 344 {
345 if (len != 0) 345 if (len != 0)
346 { 346 {
347 octave_idx_type max = -1; 347 octave_idx_type max = -1;
348 for (octave_idx_type i = 0; i < len; i++) 348 for (octave_idx_type i = 0; i < len; i++)
349 { 349 {
350 octave_idx_type k = inda.xelem (i); 350 octave_idx_type k = inda.xelem (i);
351 if (k < 0) 351 if (k < 0)
352 err = true; 352 err = true;
353 else if (k > max) 353 else if (k > max)
354 max = k; 354 max = k;
355 } 355 }
356 356
357 ext = max + 1; 357 ext = max + 1;
358 358
361 } 361 }
362 } 362 }
363 363
364 idx_vector::idx_vector_rep::idx_vector_rep (const Array<octave_idx_type>& inda, 364 idx_vector::idx_vector_rep::idx_vector_rep (const Array<octave_idx_type>& inda,
365 octave_idx_type _ext, direct) 365 octave_idx_type _ext, direct)
366 : data (inda.data ()), len (inda.numel ()), ext (_ext), 366 : data (inda.data ()), len (inda.numel ()), ext (_ext),
367 aowner (new Array<octave_idx_type> (inda)), orig_dims (inda.dims ()) 367 aowner (new Array<octave_idx_type> (inda)), orig_dims (inda.dims ())
368 { 368 {
369 // No checking. 369 // No checking.
370 if (ext < 0) 370 if (ext < 0)
371 { 371 {
398 len = bnda.nnz (); 398 len = bnda.nnz ();
399 399
400 const dim_vector dv = bnda.dims (); 400 const dim_vector dv = bnda.dims ();
401 401
402 if (! dv.all_zero ()) 402 if (! dv.all_zero ())
403 orig_dims = ((dv.length () == 2 && dv(0) == 1) 403 orig_dims = ((dv.length () == 2 && dv(0) == 1)
404 ? dim_vector (1, len) : dim_vector (len, 1)); 404 ? dim_vector (1, len) : dim_vector (len, 1));
405 405
406 if (len != 0) 406 if (len != 0)
407 { 407 {
408 octave_idx_type *d = new octave_idx_type [len]; 408 octave_idx_type *d = new octave_idx_type [len];
439 439
440 octave_idx_type k = 0; 440 octave_idx_type k = 0;
441 // FIXME: I hope this is OK, i.e. the element iterated this way are correctly ordered. 441 // FIXME: I hope this is OK, i.e. the element iterated this way are correctly ordered.
442 for (octave_idx_type i = 0; i < nnz; i++) 442 for (octave_idx_type i = 0; i < nnz; i++)
443 { 443 {
444 if (bnda.data (i)) 444 if (bnda.data (i))
445 d[k++] = bnda.cidx (i) + bnda.rows () * bnda.ridx (i); 445 d[k++] = bnda.cidx (i) + bnda.rows () * bnda.ridx (i);
446 } 446 }
447 447
448 data = d; 448 data = d;
449 449
450 ext = d[k-1] + 1; 450 ext = d[k-1] + 1;
451 } 451 }
452 } 452 }
453 453
454 idx_vector::idx_vector_rep::~idx_vector_rep (void) 454 idx_vector::idx_vector_rep::~idx_vector_rep (void)
455 { 455 {
456 if (aowner) 456 if (aowner)
457 delete aowner; 457 delete aowner;
458 else 458 else
459 delete [] data; 459 delete [] data;
460 } 460 }
461 461
462 octave_idx_type 462 octave_idx_type
463 idx_vector::idx_vector_rep::checkelem (octave_idx_type n) const 463 idx_vector::idx_vector_rep::checkelem (octave_idx_type n) const
464 { 464 {
479 count++; 479 count++;
480 return this; 480 return this;
481 } 481 }
482 482
483 // This is wrapped in auto_ptr so that we don't leak on out-of-memory. 483 // This is wrapped in auto_ptr so that we don't leak on out-of-memory.
484 std::auto_ptr<idx_vector_rep> new_rep ( 484 std::auto_ptr<idx_vector_rep> new_rep (
485 new idx_vector_rep (0, len, ext, orig_dims, DIRECT)); 485 new idx_vector_rep (0, len, ext, orig_dims, DIRECT));
486 486
487 if (ext > len*xlog2 (1.0 + len)) 487 if (ext > len*xlog2 (1.0 + len))
488 { 488 {
489 // Use standard sort via octave_sort. 489 // Use standard sort via octave_sort.
602 } 602 }
603 603
604 return new_rep.release (); 604 return new_rep.release ();
605 } 605 }
606 606
607 std::ostream& 607 std::ostream&
608 idx_vector::idx_vector_rep::print (std::ostream& os) const 608 idx_vector::idx_vector_rep::print (std::ostream& os) const
609 { 609 {
610 os << '['; 610 os << '[';
611 611
612 for (octave_idx_type ii = 0; ii < len - 1; ii++) 612 for (octave_idx_type ii = 0; ii < len - 1; ii++)
673 ext--; 673 ext--;
674 674
675 const dim_vector dv = bnda.dims (); 675 const dim_vector dv = bnda.dims ();
676 676
677 if (! dv.all_zero ()) 677 if (! dv.all_zero ())
678 orig_dims = ((dv.length () == 2 && dv(0) == 1) 678 orig_dims = ((dv.length () == 2 && dv(0) == 1)
679 ? dim_vector (1, len) : dim_vector (len, 1)); 679 ? dim_vector (1, len) : dim_vector (len, 1));
680 680
681 aowner = new Array<bool> (bnda); 681 aowner = new Array<bool> (bnda);
682 data = bnda.data (); 682 data = bnda.data ();
683 } 683 }
684 684
685 idx_vector::idx_mask_rep::~idx_mask_rep (void) 685 idx_vector::idx_mask_rep::~idx_mask_rep (void)
686 { 686 {
687 if (aowner) 687 if (aowner)
688 delete aowner; 688 delete aowner;
689 else 689 else
690 delete [] data; 690 delete [] data;
691 } 691 }
692 692
693 octave_idx_type 693 octave_idx_type
694 idx_vector::idx_mask_rep::xelem (octave_idx_type n) const 694 idx_vector::idx_mask_rep::xelem (octave_idx_type n) const
695 { 695 {
718 } 718 }
719 719
720 return xelem (n); 720 return xelem (n);
721 } 721 }
722 722
723 std::ostream& 723 std::ostream&
724 idx_vector::idx_mask_rep::print (std::ostream& os) const 724 idx_vector::idx_mask_rep::print (std::ostream& os) const
725 { 725 {
726 os << '['; 726 os << '[';
727 727
728 for (octave_idx_type ii = 0; ii < ext - 1; ii++) 728 for (octave_idx_type ii = 0; ii < ext - 1; ii++)
1148 OCTAVE_LOCAL_BUFFER_INIT (bool, left, n, true); 1148 OCTAVE_LOCAL_BUFFER_INIT (bool, left, n, true);
1149 1149
1150 retval = true; 1150 retval = true;
1151 1151
1152 for (octave_idx_type i = 0, len = length (); i < len; i++) 1152 for (octave_idx_type i = 0, len = length (); i < len; i++)
1153 { 1153 {
1154 octave_idx_type k = xelem (i); 1154 octave_idx_type k = xelem (i);
1155 if (left[k]) 1155 if (left[k])
1156 left[k] = false; 1156 left[k] = false;
1157 else 1157 else
1158 { 1158 {
1209 const bool *data = r->get_data (); 1209 const bool *data = r->get_data ();
1210 octave_idx_type ext = r->extent (0), len = r->length (0); 1210 octave_idx_type ext = r->extent (0), len = r->length (0);
1211 octave_idx_type *idata = new octave_idx_type [len]; 1211 octave_idx_type *idata = new octave_idx_type [len];
1212 1212
1213 for (octave_idx_type i = 0, j = 0; i < ext; i++) 1213 for (octave_idx_type i = 0, j = 0; i < ext; i++)
1214 if (data[i]) 1214 if (data[i])
1215 idata[j++] = i; 1215 idata[j++] = i;
1216 1216
1217 ext = len > 0 ? idata[len - 1] + 1 : 0; 1217 ext = len > 0 ? idata[len - 1] + 1 : 0;
1218 1218
1219 return new idx_vector_rep (idata, len, ext, r->orig_dimensions (), 1219 return new idx_vector_rep (idata, len, ext, r->orig_dimensions (),
1222 else 1222 else
1223 return *this; 1223 return *this;
1224 } 1224 }
1225 1225
1226 void idx_vector::unconvert (idx_class_type& iclass, 1226 void idx_vector::unconvert (idx_class_type& iclass,
1227 double& scalar, Range& range, 1227 double& scalar, Range& range,
1228 Array<double>& array, Array<bool>& mask) const 1228 Array<double>& array, Array<bool>& mask) const
1229 { 1229 {
1230 iclass = idx_class (); 1230 iclass = idx_class ();
1231 switch (iclass) 1231 switch (iclass)
1232 { 1232 {
1265 assert (false); 1265 assert (false);
1266 break; 1266 break;
1267 } 1267 }
1268 } 1268 }
1269 1269
1270 Array<octave_idx_type> 1270 Array<octave_idx_type>
1271 idx_vector::as_array (void) const 1271 idx_vector::as_array (void) const
1272 { 1272 {
1273 return rep->as_array (); 1273 return rep->as_array ();
1274 } 1274 }
1275 1275
1276 bool 1276 bool
1277 idx_vector::is_vector (void) const 1277 idx_vector::is_vector (void) const
1278 { 1278 {
1279 return idx_class () != class_vector || orig_dimensions ().is_vector (); 1279 return idx_class () != class_vector || orig_dimensions ().is_vector ();
1280 } 1280 }
1281 1281
1282 octave_idx_type 1282 octave_idx_type
1283 idx_vector::freeze (octave_idx_type z_len, const char *, bool resize_ok) 1283 idx_vector::freeze (octave_idx_type z_len, const char *, bool resize_ok)
1284 { 1284 {
1285 if (! resize_ok && extent (z_len) > z_len) 1285 if (! resize_ok && extent (z_len) > z_len)
1286 { 1286 {
1287 (*current_liboctave_error_handler) 1287 (*current_liboctave_error_handler)
1291 } 1291 }
1292 1292
1293 return length (z_len); 1293 return length (z_len);
1294 } 1294 }
1295 1295
1296 octave_idx_type 1296 octave_idx_type
1297 idx_vector::ones_count () const 1297 idx_vector::ones_count () const
1298 { 1298 {
1299 octave_idx_type n = 0; 1299 octave_idx_type n = 0;
1300 1300
1301 if (is_colon ()) 1301 if (is_colon ())