diff src/DLD-FUNCTIONS/besselj.cc @ 4844:9f7ef92b50b0

[project @ 2004-04-02 17:26:53 by jwe]
author jwe
date Fri, 02 Apr 2004 17:26:54 +0000
parents 6b96ce9f5743
children 23b37da9fd5b
line wrap: on
line diff
--- a/src/DLD-FUNCTIONS/besselj.cc	Fri Apr 02 14:54:20 2004 +0000
+++ b/src/DLD-FUNCTIONS/besselj.cc	Fri Apr 02 17:26:54 2004 +0000
@@ -97,6 +97,24 @@
   return retval;
 }
 
+static inline NDArray
+int_arrayN_to_array (const ArrayN<int>& a)
+{
+  dim_vector dv = a.dims ();
+  int nel = dv.numel ();
+
+  NDArray retval (dv);
+
+  for (int i = 0; i < nel; i++)
+    {
+      OCTAVE_QUIT;
+      
+      retval(i) = (double) (a(i));
+    }
+
+  return retval;
+}
+
 static void
 gripe_bessel_arg (const char *fn, const char *arg)
 {
@@ -145,17 +163,17 @@
 		}
 	      else
 		{
-		  ComplexMatrix x = x_arg.complex_matrix_value ();
+		  ComplexNDArray x = x_arg.complex_array_value ();
 
 		  if (! error_state)
 		    {
-		      Array2<int> ierr;
+		      ArrayN<int> ierr;
 		      octave_value result;
 
 		      DO_BESSEL (type, alpha, x, scaled, ierr, result);
 
 		      if (nargout > 1)
-			retval(1) = int_array2_to_matrix (ierr);
+			retval(1) = int_arrayN_to_array (ierr);
 
 		      retval(0) = result;
 		    }
@@ -168,21 +186,28 @@
 	}
       else
 	{
-	  Matrix alpha = args(0).matrix_value ();
+	  dim_vector dv0 = args(0).dims ();
+	  dim_vector dv1 = args(1).dims ();
+	  
+	  bool args0_is_row_vector = (dv0 (1) == dv0.numel ());
+	  bool args1_is_col_vector = (dv1 (0) == dv1.numel ());
 
-	  if (! error_state)
+	  if (args0_is_row_vector && args1_is_col_vector)
 	    {
-	      if (x_arg.is_scalar_type ())
+	      RowVector ralpha = args(0).row_vector_value ();
+
+	      if (! error_state)
 		{
-		  Complex x = x_arg.complex_value ();
+		  ComplexColumnVector cx = 
+		    x_arg.complex_column_vector_value ();
 
 		  if (! error_state)
 		    {
 		      Array2<int> ierr;
 		      octave_value result;
 
-		      DO_BESSEL (type, alpha, x, scaled, ierr, result);
-
+		      DO_BESSEL (type, ralpha, cx, scaled, ierr, result);
+		      
 		      if (nargout > 1)
 			retval(1) = int_array2_to_matrix (ierr);
 
@@ -192,45 +217,56 @@
 		    gripe_bessel_arg (fn, "second");
 		}
 	      else
-		{
-		  ComplexMatrix x = x_arg.complex_matrix_value ();
-
-		  if (! error_state)
-		    {
-		      if (alpha.rows () == 1 && x.columns () == 1)
-			{
-			  RowVector ralpha = alpha.row (0);
-			  ComplexColumnVector cx = x.column (0);
+		gripe_bessel_arg (fn, "first");
+	    }
+	  else
+	    {
+	      NDArray alpha = args(0).array_value ();
 
-			  Array2<int> ierr;
-			  octave_value result;
-
-			  DO_BESSEL (type, ralpha, cx, scaled, ierr, result);
+	      if (! error_state)
+		{
+		  if (x_arg.is_scalar_type ())
+		    {
+		      Complex x = x_arg.complex_value ();
 
-			  if (nargout > 1)
-			    retval(1) = int_array2_to_matrix (ierr);
-
-			  retval(0) = result;
-			}
-		      else
+		      if (! error_state)
 			{
-			  Array2<int> ierr;
+			  ArrayN<int> ierr;
 			  octave_value result;
 
 			  DO_BESSEL (type, alpha, x, scaled, ierr, result);
 
 			  if (nargout > 1)
-			    retval(1) = int_array2_to_matrix (ierr);
+			    retval(1) = int_arrayN_to_array (ierr);
 
 			  retval(0) = result;
 			}
+		      else
+			gripe_bessel_arg (fn, "second");
 		    }
 		  else
-		    gripe_bessel_arg (fn, "second");
+		    {
+		      ComplexNDArray x = x_arg.complex_array_value ();
+
+		      if (! error_state)
+			{
+			  ArrayN<int> ierr;
+			  octave_value result;
+			  
+			  DO_BESSEL (type, alpha, x, scaled, ierr, result);
+			  
+			  if (nargout > 1)
+			    retval(1) = int_arrayN_to_array (ierr);
+			  
+			  retval(0) = result;
+			}
+		      else
+			gripe_bessel_arg (fn, "second");
+		    }
 		}
+	      else
+		gripe_bessel_arg (fn, "first");
 	    }
-	  else
-	    gripe_bessel_arg (fn, "first");
 	}
     }
   else
@@ -422,7 +458,7 @@
 
       int kind = 0;
 
-      ComplexMatrix z;
+      ComplexNDArray z;
 
       if (nargin > 1)
 	{
@@ -441,11 +477,11 @@
 
       if (! error_state)
 	{
-	  z = args(nargin == 1 ? 0 : 1).complex_matrix_value ();
+	  z = args(nargin == 1 ? 0 : 1).complex_array_value ();
 
 	  if (! error_state)
 	    {
-	      Array2<int> ierr;
+	      ArrayN<int> ierr;
 	      octave_value result;
 
 	      if (kind > 1)
@@ -454,7 +490,7 @@
 		result = airy (z, kind == 1, scale, ierr);
 
 	      if (nargout > 1)
-		retval(1) = int_array2_to_matrix (ierr);
+		retval(1) = int_arrayN_to_array (ierr);
 
 	      retval(0) = result;
 	    }