diff libinterp/corefcn/bitfcns.cc @ 20918:6f0bd96f93c0

maint: Use new C++ archetype in more files. Place input validation first in files. Move declaration of retval down in function to be closer to point of usage. Eliminate else clause after if () error. Use "return ovl()" where it makes sense. * __dispatch__.cc, __dsearchn__.cc, __ichol__.cc, __lin_interpn__.cc, balance.cc, betainc.cc, bitfcns.cc, bsxfun.cc, cellfun.cc, colloc.cc, conv2.cc, daspk.cc, dasrt.cc, dassl.cc, data.cc, debug.cc, dirfns.cc, dlmread.cc, dot.cc, eig.cc, error.cc, fft.cc, fft2.cc, fftn.cc, file-io.cc, ov-type-conv.h: Use new C++ archetype in more files.
author Rik <rik@octave.org>
date Wed, 16 Dec 2015 15:00:31 -0800
parents 020b71557b12
children 81c2b14c209f
line wrap: on
line diff
--- a/libinterp/corefcn/bitfcns.cc	Wed Dec 16 17:09:44 2015 -0500
+++ b/libinterp/corefcn/bitfcns.cc	Wed Dec 16 15:00:31 2015 -0800
@@ -154,11 +154,11 @@
 octave_value
 bitop (const std::string& fname, const octave_value_list& args)
 {
-  octave_value retval;
-
   if (args.length () != 2)
     print_usage ();
 
+  octave_value retval;
+
   if (args(0).class_name () == octave_scalar::static_class_name ()
       || args(0).class_name () == octave_float_scalar::static_class_name ()
       || args(0).class_name () == octave_bool::static_class_name ()
@@ -570,21 +570,19 @@
 @seealso{bitand, bitor, bitxor, bitset, bitget, bitcmp, intmax, flintmax}\n\
 @end deftypefn")
 {
-  octave_value retval;
-
   int nargin = args.length ();
 
   if (nargin < 2 || nargin > 3)
     print_usage ();
 
-  int nbits = 64;
+  NDArray n = args(1).xarray_value ("bitshift: K must be a scalar or array of integers");
 
-  NDArray n = args(1).xarray_value ("bitshift: K must be a scalar or array of integers");
+  int nbits = 64;
 
   if (nargin == 3)
     {
-      // FIXME: for compatibility, we should accept an array
-      // or a scalar as the third argument.
+      // FIXME: for compatibility, we should accept an array or a scalar
+      //        as the third argument.
       if (args(2).numel () > 1)
         error ("bitshift: N must be a scalar integer");
       else
@@ -596,10 +594,28 @@
         }
     }
 
+  octave_value retval;
+
   octave_value m_arg = args(0);
   std::string cname = m_arg.class_name ();
 
-  if (cname == "uint8")
+  if (cname == "double")
+    {
+      static const int bits_in_mantissa
+        = std::numeric_limits<double>::digits;
+
+      nbits = (nbits < bits_in_mantissa ? nbits : bits_in_mantissa);
+      int64_t mask = max_mantissa_value<double> ();
+      if (nbits < bits_in_mantissa)
+        mask = mask >> (bits_in_mantissa - nbits);
+      else if (nbits < 1)
+        mask = 0;
+      int bits_in_type = sizeof (double)
+        * std::numeric_limits<unsigned char>::digits;
+      NDArray m = m_arg.array_value ();
+      DO_BITSHIFT ();
+    }
+  else if (cname == "uint8")
     DO_UBITSHIFT (uint8, nbits < 8 ? nbits : 8);
   else if (cname == "uint16")
     DO_UBITSHIFT (uint16, nbits < 16 ? nbits : 16);
@@ -615,22 +631,6 @@
     DO_SBITSHIFT (int32, nbits < 32 ? nbits : 32);
   else if (cname == "int64")
     DO_SBITSHIFT (int64, nbits < 64 ? nbits : 64);
-  else if (cname == "double")
-    {
-      static const int bits_in_mantissa
-        = std::numeric_limits<double>::digits;
-
-      nbits = (nbits < bits_in_mantissa ? nbits : bits_in_mantissa);
-      int64_t mask = max_mantissa_value<double> ();
-      if (nbits < bits_in_mantissa)
-        mask = mask >> (bits_in_mantissa - nbits);
-      else if (nbits < 1)
-        mask = 0;
-      int bits_in_type = sizeof (double)
-        * std::numeric_limits<unsigned char>::digits;
-      NDArray m = m_arg.array_value ();
-      DO_BITSHIFT ();
-    }
   else if (cname == "single")
     {
       static const int bits_in_mantissa
@@ -679,26 +679,21 @@
 @seealso{intmax, realmax, realmin}\n\
 @end deftypefn")
 {
-  octave_value retval;
-
-  std::string cname = "double";
-
   int nargin = args.length ();
 
   if (nargin > 1)
     print_usage ();
 
+  std::string cname = "double";
   if (nargin == 1)
     cname = args(0).xstring_value ("flintmax: argument must be a string");
 
   if (cname == "double")
-    retval = (static_cast<double> (max_mantissa_value<double> () + 1));
+    return ovl (static_cast<double> (max_mantissa_value<double> () + 1));
   else if (cname == "single")
-    retval = (static_cast<float> (max_mantissa_value<float> () + 1));
+    return ovl (static_cast<float> (max_mantissa_value<float> () + 1));
   else
     error ("flintmax: not defined for class '%s'", cname.c_str ());
-
-  return retval;
 }
 
 /*
@@ -749,18 +744,17 @@
 @seealso{intmin, flintmax}\n\
 @end deftypefn")
 {
-  octave_value retval;
-
-  std::string cname = "int32";
-
   int nargin = args.length ();
 
   if (nargin > 1)
     print_usage ();
 
+  std::string cname = "int32";
   if (nargin == 1)
     cname = args(0).xstring_value ("intmax: argument must be a string");
 
+  octave_value retval;
+
   if (cname == "uint8")
     retval = octave_uint8 (std::numeric_limits<uint8_t>::max ());
   else if (cname == "uint16")
@@ -837,18 +831,17 @@
 @seealso{intmax, flintmax}\n\
 @end deftypefn")
 {
-  octave_value retval;
-
-  std::string cname = "int32";
-
   int nargin = args.length ();
 
   if (nargin > 1)
     print_usage ();
 
+  std::string cname = "int32";
   if (nargin == 1)
     cname = args(0).xstring_value ("intmin: argument must be a string");
 
+  octave_value retval;
+
   if (cname == "uint8")
     retval = octave_uint8 (std::numeric_limits<uint8_t>::min ());
   else if (cname == "uint16")