diff liboctave/DiagArray2.h @ 14630:9e4ad3f1f291

maint: periodic merge of stable to default
author John W. Eaton <jwe@octave.org>
date Sat, 12 May 2012 12:39:09 -0400
parents 13cc11418393 63ae976ac2e7
children 97e3d1769be0
line wrap: on
line diff
--- a/liboctave/DiagArray2.h
+++ b/liboctave/DiagArray2.h
@@ -119,22 +119,33 @@
   T& dgelem (octave_idx_type i)
     { return Array<T>::elem (i); }
 
-  void check_idx (octave_idx_type r, octave_idx_type c) const;
+  T checkelem (octave_idx_type r, octave_idx_type c) const
+    {
+      return check_idx (r, c) ? elem (r, c) : T (0);
+    }
 
   T operator () (octave_idx_type r, octave_idx_type c) const
     {
 #if defined (BOUNDS_CHECKING)
-      check_idx (r, c);
+      checkelem (r, c);
+#else
+      return elem (r, c);
 #endif
-      return elem (r, c);
+    }
+
+  T& checkelem (octave_idx_type r, octave_idx_type c)
+    {
+      static T zero (0);
+      return check_idx (r, c) ? elem (r, c) : zero;
     }
 
   T& operator () (octave_idx_type r, octave_idx_type c)
     {
 #if defined (BOUNDS_CHECKING)
-      check_idx (r, c);
+      return checkelem (r, c);
+#else
+      return elem (r, c);
 #endif
-      return elem (r, c);
     }
 
   // No checking.
@@ -169,6 +180,10 @@
 
   void print_info (std::ostream& os, const std::string& prefix) const
     { Array<T>::print_info (os, prefix); }
+
+private:
+
+  bool check_idx (octave_idx_type r, octave_idx_type c) const;
 };
 
 #endif