diff liboctave/array/Array.cc @ 21136:7cac4e7458f2

maint: clean up code around calls to current_liboctave_error_handler. Remove statements after call to handler that are no longer reachable. Place input validation first and immediately call handler if necessary. Change if/error_handler/else to if/error_handler and re-indent code. * Array-util.cc, Array.cc, CColVector.cc, CDiagMatrix.cc, CMatrix.cc, CNDArray.cc, CRowVector.cc, CSparse.cc, DiagArray2.cc, MArray.cc, PermMatrix.cc, Sparse.cc, Sparse.h, chMatrix.cc, chNDArray.cc, dColVector.cc, dDiagMatrix.cc, dMatrix.cc, dNDArray.cc, dRowVector.cc, dSparse.cc, fCColVector.cc, fCDiagMatrix.cc, fCMatrix.cc, fCNDArray.cc, fCRowVector.cc, fColVector.cc, fDiagMatrix.cc, fMatrix.cc, fNDArray.cc, fRowVector.cc, idx-vector.cc, CmplxAEPBAL.cc, CmplxCHOL.cc, CmplxGEPBAL.cc, CmplxHESS.cc, CmplxLU.cc, CmplxQR.cc, CmplxSCHUR.cc, CmplxSVD.cc, DASPK.cc, EIG.cc, LSODE.cc, Quad.cc, SparseCmplxCHOL.cc, SparseCmplxLU.cc, SparseCmplxQR.cc, SparseQR.cc, SparsedbleCHOL.cc, SparsedbleLU.cc, base-lu.cc, bsxfun-defs.cc, dbleAEPBAL.cc, dbleCHOL.cc, dbleGEPBAL.cc, dbleHESS.cc, dbleLU.cc, dbleQR.cc, dbleSCHUR.cc, dbleSVD.cc, eigs-base.cc, fCmplxAEPBAL.cc, fCmplxCHOL.cc, fCmplxLU.cc, fCmplxQR.cc, fCmplxSCHUR.cc, fEIG.cc, floatAEPBAL.cc, floatCHOL.cc, floatGEPBAL.cc, floatHESS.cc, floatLU.cc, floatQR.cc, floatSCHUR.cc, floatSVD.cc, lo-specfun.cc, oct-fftw.cc, oct-rand.cc, oct-spparms.cc, sparse-base-chol.cc, sparse-dmsolve.cc, file-ops.cc, lo-sysdep.cc, mach-info.cc, oct-env.cc, oct-syscalls.cc, cmd-edit.cc, cmd-hist.cc, data-conv.cc, lo-ieee.cc, lo-regexp.cc, oct-base64.cc, oct-shlib.cc, pathsearch.cc, singleton-cleanup.cc, sparse-util.cc, unwind-prot.cc: Remove statements after call to handler that are no longer reachable. Place input validation first and immediately call handler if necessary. Change if/error_handler/else to if/error_handler and re-indent code.
author Rik <rik@octave.org>
date Sat, 23 Jan 2016 13:52:03 -0800
parents 54527108599a
children 538b57866b90
line wrap: on
line diff
--- a/liboctave/array/Array.cc	Fri Jan 22 13:45:21 2016 -0500
+++ b/liboctave/array/Array.cc	Sat Jan 23 13:52:03 2016 -0800
@@ -467,22 +467,14 @@
     {
       octave_idx_type perm_elt = perm_vec.elem (i);
       if (perm_elt >= perm_vec_len || perm_elt < 0)
-        {
-          (*current_liboctave_error_handler)
-            ("%s: permutation vector contains an invalid element",
-             inv ? "ipermute" : "permute");
-
-          return retval;
-        }
+        (*current_liboctave_error_handler)
+          ("%s: permutation vector contains an invalid element",
+           inv ? "ipermute" : "permute");
 
       if (checked[perm_elt])
-        {
-          (*current_liboctave_error_handler)
-            ("%s: permutation vector cannot contain identical elements",
-             inv ? "ipermute" : "permute");
-
-          return retval;
-        }
+        (*current_liboctave_error_handler)
+          ("%s: permutation vector cannot contain identical elements",
+           inv ? "ipermute" : "permute");
       else
         {
           checked[perm_elt] = true;
@@ -1446,11 +1438,7 @@
 Array<T>::delete_elements (int dim, const idx_vector& i)
 {
   if (dim < 0 || dim >= ndims ())
-    {
-      (*current_liboctave_error_handler)
-        ("invalid dimension in delete_elements");
-      return;
-    }
+    (*current_liboctave_error_handler) ("invalid dimension in delete_elements");
 
   octave_idx_type n = dimensions(dim);
   if (i.is_colon ())
@@ -1779,11 +1767,7 @@
 Array<T>::sort (int dim, sortmode mode) const
 {
   if (dim < 0)
-    {
-      (*current_liboctave_error_handler)
-        ("sort: invalid dimension");
-      return Array<T> ();
-    }
+    (*current_liboctave_error_handler) ("sort: invalid dimension");
 
   Array<T> m (dims ());
 
@@ -1900,11 +1884,7 @@
                 sortmode mode) const
 {
   if (dim < 0 || dim >= ndims ())
-    {
-      (*current_liboctave_error_handler)
-        ("sort: invalid dimension");
-      return Array<T> ();
-    }
+    (*current_liboctave_error_handler) ("sort: invalid dimension");
 
   Array<T> m (dims ());
 
@@ -2340,11 +2320,7 @@
 Array<T>::nth_element (const idx_vector& n, int dim) const
 {
   if (dim < 0)
-    {
-      (*current_liboctave_error_handler)
-        ("nth_element: invalid dimension");
-      return Array<T> ();
-    }
+    (*current_liboctave_error_handler) ("nth_element: invalid dimension");
 
   dim_vector dv = dims ();
   if (dim >= dv.length ())
@@ -2391,20 +2367,13 @@
     }
 
   if (mode == UNSORTED)
-    {
-      (*current_liboctave_error_handler)
-        ("nth_element: n must be a scalar or a contiguous range");
-      return Array<T> ();
-    }
+    (*current_liboctave_error_handler)
+      ("nth_element: n must be a scalar or a contiguous range");
 
   octave_idx_type up = lo + nn;
 
   if (lo < 0 || up > ns)
-    {
-      (*current_liboctave_error_handler)
-        ("nth_element: invalid element index");
-      return Array<T> ();
-    }
+    (*current_liboctave_error_handler) ("nth_element: invalid element index");
 
   octave_idx_type iter = numel () / ns;
   octave_idx_type stride = 1;
@@ -2544,78 +2513,76 @@
 
   if (nd > 2)
     (*current_liboctave_error_handler) ("Matrix must be 2-dimensional");
+
+  octave_idx_type nnr = dv(0);
+  octave_idx_type nnc = dv(1);
+
+  if (nnr == 0 && nnc == 0)
+    ; // do nothing for empty matrix
+  else if (nnr != 1 && nnc != 1)
+    {
+      // Extract diag from matrix
+      if (k > 0)
+        nnc -= k;
+      else if (k < 0)
+        nnr += k;
+
+      if (nnr > 0 && nnc > 0)
+        {
+          octave_idx_type ndiag = (nnr < nnc) ? nnr : nnc;
+
+          d.resize (dim_vector (ndiag, 1));
+
+          if (k > 0)
+            {
+              for (octave_idx_type i = 0; i < ndiag; i++)
+                d.xelem (i) = elem (i, i+k);
+            }
+          else if (k < 0)
+            {
+              for (octave_idx_type i = 0; i < ndiag; i++)
+                d.xelem (i) = elem (i-k, i);
+            }
+          else
+            {
+              for (octave_idx_type i = 0; i < ndiag; i++)
+                d.xelem (i) = elem (i, i);
+            }
+        }
+      else  // Matlab returns [] 0x1 for out-of-range diagonal
+        d.resize (dim_vector (0, 1));
+    }
   else
     {
-      octave_idx_type nnr = dv(0);
-      octave_idx_type nnc = dv(1);
-
-      if (nnr == 0 && nnc == 0)
-        ; // do nothing for empty matrix
-      else if (nnr != 1 && nnc != 1)
+      // Create diag matrix from vector
+      octave_idx_type roff = 0;
+      octave_idx_type coff = 0;
+      if (k > 0)
+        {
+          roff = 0;
+          coff = k;
+        }
+      else if (k < 0)
         {
-          // Extract diag from matrix
-          if (k > 0)
-            nnc -= k;
-          else if (k < 0)
-            nnr += k;
-
-          if (nnr > 0 && nnc > 0)
-            {
-              octave_idx_type ndiag = (nnr < nnc) ? nnr : nnc;
-
-              d.resize (dim_vector (ndiag, 1));
-
-              if (k > 0)
-                {
-                  for (octave_idx_type i = 0; i < ndiag; i++)
-                    d.xelem (i) = elem (i, i+k);
-                }
-              else if (k < 0)
-                {
-                  for (octave_idx_type i = 0; i < ndiag; i++)
-                    d.xelem (i) = elem (i-k, i);
-                }
-              else
-                {
-                  for (octave_idx_type i = 0; i < ndiag; i++)
-                    d.xelem (i) = elem (i, i);
-                }
-            }
-          else  // Matlab returns [] 0x1 for out-of-range diagonal
-            d.resize (dim_vector (0, 1));
+          roff = -k;
+          coff = 0;
+        }
+
+      if (nnr == 1)
+        {
+          octave_idx_type n = nnc + std::abs (k);
+          d = Array<T> (dim_vector (n, n), resize_fill_value ());
+
+          for (octave_idx_type i = 0; i < nnc; i++)
+            d.xelem (i+roff, i+coff) = elem (0, i);
         }
       else
         {
-          // Create diag matrix from vector
-          octave_idx_type roff = 0;
-          octave_idx_type coff = 0;
-          if (k > 0)
-            {
-              roff = 0;
-              coff = k;
-            }
-          else if (k < 0)
-            {
-              roff = -k;
-              coff = 0;
-            }
-
-          if (nnr == 1)
-            {
-              octave_idx_type n = nnc + std::abs (k);
-              d = Array<T> (dim_vector (n, n), resize_fill_value ());
-
-              for (octave_idx_type i = 0; i < nnc; i++)
-                d.xelem (i+roff, i+coff) = elem (0, i);
-            }
-          else
-            {
-              octave_idx_type n = nnr + std::abs (k);
-              d = Array<T> (dim_vector (n, n), resize_fill_value ());
-
-              for (octave_idx_type i = 0; i < nnr; i++)
-                d.xelem (i+roff, i+coff) = elem (i, 0);
-            }
+          octave_idx_type n = nnr + std::abs (k);
+          d = Array<T> (dim_vector (n, n), resize_fill_value ());
+
+          for (octave_idx_type i = 0; i < nnr; i++)
+            d.xelem (i+roff, i+coff) = elem (i, 0);
         }
     }
 
@@ -2626,18 +2593,13 @@
 Array<T>
 Array<T>::diag (octave_idx_type m, octave_idx_type n) const
 {
-  Array<T> retval;
-
-  if (ndims () == 2 && (rows () == 1 || cols () == 1))
-    {
-      retval.resize (dim_vector (m, n), resize_fill_value ());
-
-      for (octave_idx_type i = 0; i < numel (); i++)
-        retval.xelem (i, i) = xelem (i);
-    }
-  else
-    (*current_liboctave_error_handler)
-      ("cat: invalid dimension");
+  if (ndims () != 2 || (rows () != 1 && cols () != 1))
+    (*current_liboctave_error_handler) ("cat: invalid dimension");
+
+  Array<T> retval (dim_vector (m, n), resize_fill_value ());
+
+  for (octave_idx_type i = 0; i < numel (); i++)
+    retval.xelem (i, i) = xelem (i);
 
   return retval;
 }
@@ -2655,8 +2617,7 @@
       dim = -dim - 1;
     }
   else if (dim < 0)
-    (*current_liboctave_error_handler)
-      ("cat: invalid dimension");
+    (*current_liboctave_error_handler) ("cat: invalid dimension");
 
   if (n == 1)
     return array_list[0];
@@ -2707,8 +2668,7 @@
 
   for (octave_idx_type i = istart; i < n; i++)
     if (! (dv.*concat_rule) (array_list[i].dims (), dim))
-      (*current_liboctave_error_handler)
-        ("cat: dimension mismatch");
+      (*current_liboctave_error_handler) ("cat: dimension mismatch");
 
   Array<T> retval (dv);