diff src/ov-range.cc @ 10605:1834132fb50b

allow non-integer ranges as indices conditionally
author John W. Eaton <jwe@octave.org>
date Wed, 05 May 2010 14:20:58 -0400
parents 57a59eae83cc
children 58bcda68ac11
line wrap: on
line diff
--- a/src/ov-range.cc
+++ b/src/ov-range.cc
@@ -30,6 +30,8 @@
 #include "lo-ieee.h"
 #include "lo-utils.h"
 
+#include "defun.h"
+#include "variables.h"
 #include "gripes.h"
 #include "ops.h"
 #include "oct-obj.h"
@@ -142,6 +144,25 @@
     }
 }
 
+idx_vector
+octave_range::index_vector (void) const
+{
+  if (idx_cache)
+    return *idx_cache;
+  else
+    {
+      if (range.all_elements_are_ints ())
+        return set_idx_cache (idx_vector (range));
+      else
+        {
+          warning_with_id ("Octave:allow-noninteger-ranges-as-indices",
+                           "rounding non-integer range used as index to nearest integer");
+
+          return octave_value (matrix_value ()).round ().index_vector ();
+        }
+    }
+}
+
 double
 octave_range::double_value (bool) const
 {