comparison liboctave/numeric/lo-specfun.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 3ac9f47fb04b
children 538b57866b90
comparison
equal deleted inserted replaced
21135:95da3bc8a281 21136:7cac4e7458f2
1194 octave_idx_type x_nc = x.cols (); 1194 octave_idx_type x_nc = x.cols ();
1195 1195
1196 octave_idx_type alpha_nr = alpha.rows (); 1196 octave_idx_type alpha_nr = alpha.rows ();
1197 octave_idx_type alpha_nc = alpha.cols (); 1197 octave_idx_type alpha_nc = alpha.cols ();
1198 1198
1199 if (x_nr == alpha_nr && x_nc == alpha_nc) 1199 if (x_nr != alpha_nr || x_nc != alpha_nc)
1200 {
1201 octave_idx_type nr = x_nr;
1202 octave_idx_type nc = x_nc;
1203
1204 retval.resize (nr, nc);
1205
1206 ierr.resize (dim_vector (nr, nc));
1207
1208 for (octave_idx_type j = 0; j < nc; j++)
1209 for (octave_idx_type i = 0; i < nr; i++)
1210 retval(i,j) = f (x(i,j), alpha(i,j), (scaled ? 2 : 1), ierr(i,j));
1211 }
1212 else
1213 (*current_liboctave_error_handler) 1200 (*current_liboctave_error_handler)
1214 ("%s: the sizes of alpha and x must conform", fn); 1201 ("%s: the sizes of alpha and x must conform", fn);
1202
1203 octave_idx_type nr = x_nr;
1204 octave_idx_type nc = x_nc;
1205
1206 retval.resize (nr, nc);
1207
1208 ierr.resize (dim_vector (nr, nc));
1209
1210 for (octave_idx_type j = 0; j < nc; j++)
1211 for (octave_idx_type i = 0; i < nr; i++)
1212 retval(i,j) = f (x(i,j), alpha(i,j), (scaled ? 2 : 1), ierr(i,j));
1215 1213
1216 return retval; 1214 return retval;
1217 } 1215 }
1218 1216
1219 static inline ComplexNDArray 1217 static inline ComplexNDArray
1253 const ComplexNDArray& x, bool scaled, Array<octave_idx_type>& ierr) 1251 const ComplexNDArray& x, bool scaled, Array<octave_idx_type>& ierr)
1254 { 1252 {
1255 dim_vector dv = x.dims (); 1253 dim_vector dv = x.dims ();
1256 ComplexNDArray retval; 1254 ComplexNDArray retval;
1257 1255
1258 if (dv == alpha.dims ()) 1256 if (dv != alpha.dims ())
1259 {
1260 octave_idx_type nel = dv.numel ();
1261
1262 retval.resize (dv);
1263 ierr.resize (dv);
1264
1265 for (octave_idx_type i = 0; i < nel; i++)
1266 retval(i) = f (x(i), alpha(i), (scaled ? 2 : 1), ierr(i));
1267 }
1268 else
1269 (*current_liboctave_error_handler) 1257 (*current_liboctave_error_handler)
1270 ("%s: the sizes of alpha and x must conform", fn); 1258 ("%s: the sizes of alpha and x must conform", fn);
1259
1260 octave_idx_type nel = dv.numel ();
1261
1262 retval.resize (dv);
1263 ierr.resize (dv);
1264
1265 for (octave_idx_type i = 0; i < nel; i++)
1266 retval(i) = f (x(i), alpha(i), (scaled ? 2 : 1), ierr(i));
1271 1267
1272 return retval; 1268 return retval;
1273 } 1269 }
1274 1270
1275 static inline ComplexMatrix 1271 static inline ComplexMatrix
1804 octave_idx_type x_nc = x.cols (); 1800 octave_idx_type x_nc = x.cols ();
1805 1801
1806 octave_idx_type alpha_nr = alpha.rows (); 1802 octave_idx_type alpha_nr = alpha.rows ();
1807 octave_idx_type alpha_nc = alpha.cols (); 1803 octave_idx_type alpha_nc = alpha.cols ();
1808 1804
1809 if (x_nr == alpha_nr && x_nc == alpha_nc) 1805 if (x_nr != alpha_nr || x_nc != alpha_nc)
1810 {
1811 octave_idx_type nr = x_nr;
1812 octave_idx_type nc = x_nc;
1813
1814 retval.resize (nr, nc);
1815
1816 ierr.resize (dim_vector (nr, nc));
1817
1818 for (octave_idx_type j = 0; j < nc; j++)
1819 for (octave_idx_type i = 0; i < nr; i++)
1820 retval(i,j) = f (x(i,j), alpha(i,j), (scaled ? 2 : 1), ierr(i,j));
1821 }
1822 else
1823 (*current_liboctave_error_handler) 1806 (*current_liboctave_error_handler)
1824 ("%s: the sizes of alpha and x must conform", fn); 1807 ("%s: the sizes of alpha and x must conform", fn);
1808
1809 octave_idx_type nr = x_nr;
1810 octave_idx_type nc = x_nc;
1811
1812 retval.resize (nr, nc);
1813
1814 ierr.resize (dim_vector (nr, nc));
1815
1816 for (octave_idx_type j = 0; j < nc; j++)
1817 for (octave_idx_type i = 0; i < nr; i++)
1818 retval(i,j) = f (x(i,j), alpha(i,j), (scaled ? 2 : 1), ierr(i,j));
1825 1819
1826 return retval; 1820 return retval;
1827 } 1821 }
1828 1822
1829 static inline FloatComplexNDArray 1823 static inline FloatComplexNDArray
1864 Array<octave_idx_type>& ierr) 1858 Array<octave_idx_type>& ierr)
1865 { 1859 {
1866 dim_vector dv = x.dims (); 1860 dim_vector dv = x.dims ();
1867 FloatComplexNDArray retval; 1861 FloatComplexNDArray retval;
1868 1862
1869 if (dv == alpha.dims ()) 1863 if (dv != alpha.dims ())
1870 {
1871 octave_idx_type nel = dv.numel ();
1872
1873 retval.resize (dv);
1874 ierr.resize (dv);
1875
1876 for (octave_idx_type i = 0; i < nel; i++)
1877 retval(i) = f (x(i), alpha(i), (scaled ? 2 : 1), ierr(i));
1878 }
1879 else
1880 (*current_liboctave_error_handler) 1864 (*current_liboctave_error_handler)
1881 ("%s: the sizes of alpha and x must conform", fn); 1865 ("%s: the sizes of alpha and x must conform", fn);
1866
1867 octave_idx_type nel = dv.numel ();
1868
1869 retval.resize (dv);
1870 ierr.resize (dv);
1871
1872 for (octave_idx_type i = 0; i < nel; i++)
1873 retval(i) = f (x(i), alpha(i), (scaled ? 2 : 1), ierr(i));
1882 1874
1883 return retval; 1875 return retval;
1884 } 1876 }
1885 1877
1886 static inline FloatComplexMatrix 1878 static inline FloatComplexMatrix
2576 err = false; 2568 err = false;
2577 2569
2578 if (a < 0.0 || x < 0.0) 2570 if (a < 0.0 || x < 0.0)
2579 (*current_liboctave_error_handler) 2571 (*current_liboctave_error_handler)
2580 ("gammainc: A and X must be non-negative"); 2572 ("gammainc: A and X must be non-negative");
2581 else 2573
2582 F77_XFCN (xgammainc, XGAMMAINC, (a, x, retval)); 2574 F77_XFCN (xgammainc, XGAMMAINC, (a, x, retval));
2583 2575
2584 return retval; 2576 return retval;
2585 } 2577 }
2586 2578
2587 Matrix 2579 Matrix
2599 for (octave_idx_type i = 0; i < nr; i++) 2591 for (octave_idx_type i = 0; i < nr; i++)
2600 { 2592 {
2601 result(i,j) = gammainc (x, a(i,j), err); 2593 result(i,j) = gammainc (x, a(i,j), err);
2602 2594
2603 if (err) 2595 if (err)
2604 goto done; 2596 goto done; // FIXME: why not just use return to exit?
2605 } 2597 }
2606 2598
2607 retval = result; 2599 retval = result;
2608 2600
2609 done: 2601 done:
2626 for (octave_idx_type i = 0; i < nr; i++) 2618 for (octave_idx_type i = 0; i < nr; i++)
2627 { 2619 {
2628 result(i,j) = gammainc (x(i,j), a, err); 2620 result(i,j) = gammainc (x(i,j), a, err);
2629 2621
2630 if (err) 2622 if (err)
2631 goto done; 2623 goto done; // FIXME: why not just use return to exit?
2632 } 2624 }
2633 2625
2634 retval = result; 2626 retval = result;
2635 2627
2636 done: 2628 done:
2648 octave_idx_type nc = x.cols (); 2640 octave_idx_type nc = x.cols ();
2649 2641
2650 octave_idx_type a_nr = a.rows (); 2642 octave_idx_type a_nr = a.rows ();
2651 octave_idx_type a_nc = a.cols (); 2643 octave_idx_type a_nc = a.cols ();
2652 2644
2653 if (nr == a_nr && nc == a_nc) 2645 if (nr != a_nr || nc != a_nc)
2654 {
2655 result.resize (nr, nc);
2656
2657 bool err;
2658
2659 for (octave_idx_type j = 0; j < nc; j++)
2660 for (octave_idx_type i = 0; i < nr; i++)
2661 {
2662 result(i,j) = gammainc (x(i,j), a(i,j), err);
2663
2664 if (err)
2665 goto done;
2666 }
2667
2668 retval = result;
2669 }
2670 else
2671 (*current_liboctave_error_handler) 2646 (*current_liboctave_error_handler)
2672 ("gammainc: nonconformant arguments (arg 1 is %dx%d, arg 2 is %dx%d)", 2647 ("gammainc: nonconformant arguments (arg 1 is %dx%d, arg 2 is %dx%d)",
2673 nr, nc, a_nr, a_nc); 2648 nr, nc, a_nr, a_nc);
2674 2649
2650 result.resize (nr, nc);
2651
2652 bool err;
2653
2654 for (octave_idx_type j = 0; j < nc; j++)
2655 for (octave_idx_type i = 0; i < nr; i++)
2656 {
2657 result(i,j) = gammainc (x(i,j), a(i,j), err);
2658
2659 if (err)
2660 goto done; // FIXME: why not just use return to exit?
2661 }
2662
2663 retval = result;
2664
2675 done: 2665 done:
2676 2666
2677 return retval; 2667 return retval;
2678 } 2668 }
2679 2669
2691 for (octave_idx_type i = 0; i < nel; i++) 2681 for (octave_idx_type i = 0; i < nel; i++)
2692 { 2682 {
2693 result(i) = gammainc (x, a(i), err); 2683 result(i) = gammainc (x, a(i), err);
2694 2684
2695 if (err) 2685 if (err)
2696 goto done; 2686 goto done; // FIXME: why not just use return to exit?
2697 } 2687 }
2698 2688
2699 retval = result; 2689 retval = result;
2700 2690
2701 done: 2691 done:
2717 for (octave_idx_type i = 0; i < nel; i++) 2707 for (octave_idx_type i = 0; i < nel; i++)
2718 { 2708 {
2719 result(i) = gammainc (x(i), a, err); 2709 result(i) = gammainc (x(i), a, err);
2720 2710
2721 if (err) 2711 if (err)
2722 goto done; 2712 goto done; // FIXME: why not just use return to exit?
2723 } 2713 }
2724 2714
2725 retval = result; 2715 retval = result;
2726 2716
2727 done: 2717 done:
2733 gammainc (const NDArray& x, const NDArray& a) 2723 gammainc (const NDArray& x, const NDArray& a)
2734 { 2724 {
2735 dim_vector dv = x.dims (); 2725 dim_vector dv = x.dims ();
2736 octave_idx_type nel = dv.numel (); 2726 octave_idx_type nel = dv.numel ();
2737 2727
2738 NDArray retval; 2728 if (dv != a.dims ())
2739 NDArray result;
2740
2741 if (dv == a.dims ())
2742 {
2743 result.resize (dv);
2744
2745 bool err;
2746
2747 for (octave_idx_type i = 0; i < nel; i++)
2748 {
2749 result(i) = gammainc (x(i), a(i), err);
2750
2751 if (err)
2752 goto done;
2753 }
2754
2755 retval = result;
2756 }
2757 else
2758 { 2729 {
2759 std::string x_str = dv.str (); 2730 std::string x_str = dv.str ();
2760 std::string a_str = a.dims ().str (); 2731 std::string a_str = a.dims ().str ();
2761 2732
2762 (*current_liboctave_error_handler) 2733 (*current_liboctave_error_handler)
2763 ("gammainc: nonconformant arguments (arg 1 is %s, arg 2 is %s)", 2734 ("gammainc: nonconformant arguments (arg 1 is %s, arg 2 is %s)",
2764 x_str.c_str (), a_str. c_str ()); 2735 x_str.c_str (), a_str. c_str ());
2765 } 2736 }
2766 2737
2738 NDArray retval;
2739 NDArray result (dv);
2740
2741 bool err;
2742
2743 for (octave_idx_type i = 0; i < nel; i++)
2744 {
2745 result(i) = gammainc (x(i), a(i), err);
2746
2747 if (err)
2748 goto done; // FIXME: why not just use return to exit?
2749 }
2750
2751 retval = result;
2752
2767 done: 2753 done:
2768 2754
2769 return retval; 2755 return retval;
2770 } 2756 }
2771 2757
2777 err = false; 2763 err = false;
2778 2764
2779 if (a < 0.0 || x < 0.0) 2765 if (a < 0.0 || x < 0.0)
2780 (*current_liboctave_error_handler) 2766 (*current_liboctave_error_handler)
2781 ("gammainc: A and X must be non-negative"); 2767 ("gammainc: A and X must be non-negative");
2782 else 2768
2783 F77_XFCN (xsgammainc, XSGAMMAINC, (a, x, retval)); 2769 F77_XFCN (xsgammainc, XSGAMMAINC, (a, x, retval));
2784 2770
2785 return retval; 2771 return retval;
2786 } 2772 }
2787 2773
2788 FloatMatrix 2774 FloatMatrix
2800 for (octave_idx_type i = 0; i < nr; i++) 2786 for (octave_idx_type i = 0; i < nr; i++)
2801 { 2787 {
2802 result(i,j) = gammainc (x, a(i,j), err); 2788 result(i,j) = gammainc (x, a(i,j), err);
2803 2789
2804 if (err) 2790 if (err)
2805 goto done; 2791 goto done; // FIXME: why not just use return to exit?
2806 } 2792 }
2807 2793
2808 retval = result; 2794 retval = result;
2809 2795
2810 done: 2796 done:
2827 for (octave_idx_type i = 0; i < nr; i++) 2813 for (octave_idx_type i = 0; i < nr; i++)
2828 { 2814 {
2829 result(i,j) = gammainc (x(i,j), a, err); 2815 result(i,j) = gammainc (x(i,j), a, err);
2830 2816
2831 if (err) 2817 if (err)
2832 goto done; 2818 goto done; // FIXME: why not just use return to exit?
2833 } 2819 }
2834 2820
2835 retval = result; 2821 retval = result;
2836 2822
2837 done: 2823 done:
2849 octave_idx_type nc = x.cols (); 2835 octave_idx_type nc = x.cols ();
2850 2836
2851 octave_idx_type a_nr = a.rows (); 2837 octave_idx_type a_nr = a.rows ();
2852 octave_idx_type a_nc = a.cols (); 2838 octave_idx_type a_nc = a.cols ();
2853 2839
2854 if (nr == a_nr && nc == a_nc) 2840 if (nr != a_nr || nc != a_nc)
2855 {
2856 result.resize (nr, nc);
2857
2858 bool err;
2859
2860 for (octave_idx_type j = 0; j < nc; j++)
2861 for (octave_idx_type i = 0; i < nr; i++)
2862 {
2863 result(i,j) = gammainc (x(i,j), a(i,j), err);
2864
2865 if (err)
2866 goto done;
2867 }
2868
2869 retval = result;
2870 }
2871 else
2872 (*current_liboctave_error_handler) 2841 (*current_liboctave_error_handler)
2873 ("gammainc: nonconformant arguments (arg 1 is %dx%d, arg 2 is %dx%d)", 2842 ("gammainc: nonconformant arguments (arg 1 is %dx%d, arg 2 is %dx%d)",
2874 nr, nc, a_nr, a_nc); 2843 nr, nc, a_nr, a_nc);
2875 2844
2845 result.resize (nr, nc);
2846
2847 bool err;
2848
2849 for (octave_idx_type j = 0; j < nc; j++)
2850 for (octave_idx_type i = 0; i < nr; i++)
2851 {
2852 result(i,j) = gammainc (x(i,j), a(i,j), err);
2853
2854 if (err)
2855 goto done; // FIXME: why not just use return to exit?
2856 }
2857
2858 retval = result;
2859
2876 done: 2860 done:
2877 2861
2878 return retval; 2862 return retval;
2879 } 2863 }
2880 2864
2892 for (octave_idx_type i = 0; i < nel; i++) 2876 for (octave_idx_type i = 0; i < nel; i++)
2893 { 2877 {
2894 result(i) = gammainc (x, a(i), err); 2878 result(i) = gammainc (x, a(i), err);
2895 2879
2896 if (err) 2880 if (err)
2897 goto done; 2881 goto done; // FIXME: why not just use return to exit?
2898 } 2882 }
2899 2883
2900 retval = result; 2884 retval = result;
2901 2885
2902 done: 2886 done:
2918 for (octave_idx_type i = 0; i < nel; i++) 2902 for (octave_idx_type i = 0; i < nel; i++)
2919 { 2903 {
2920 result(i) = gammainc (x(i), a, err); 2904 result(i) = gammainc (x(i), a, err);
2921 2905
2922 if (err) 2906 if (err)
2923 goto done; 2907 goto done; // FIXME: why not just use return to exit?
2924 } 2908 }
2925 2909
2926 retval = result; 2910 retval = result;
2927 2911
2928 done: 2912 done:
2937 octave_idx_type nel = dv.numel (); 2921 octave_idx_type nel = dv.numel ();
2938 2922
2939 FloatNDArray retval; 2923 FloatNDArray retval;
2940 FloatNDArray result; 2924 FloatNDArray result;
2941 2925
2942 if (dv == a.dims ()) 2926 if (dv != a.dims ())
2943 {
2944 result.resize (dv);
2945
2946 bool err;
2947
2948 for (octave_idx_type i = 0; i < nel; i++)
2949 {
2950 result(i) = gammainc (x(i), a(i), err);
2951
2952 if (err)
2953 goto done;
2954 }
2955
2956 retval = result;
2957 }
2958 else
2959 { 2927 {
2960 std::string x_str = dv.str (); 2928 std::string x_str = dv.str ();
2961 std::string a_str = a.dims ().str (); 2929 std::string a_str = a.dims ().str ();
2962 2930
2963 (*current_liboctave_error_handler) 2931 (*current_liboctave_error_handler)
2964 ("gammainc: nonconformant arguments (arg 1 is %s, arg 2 is %s)", 2932 ("gammainc: nonconformant arguments (arg 1 is %s, arg 2 is %s)",
2965 x_str.c_str (), a_str.c_str ()); 2933 x_str.c_str (), a_str.c_str ());
2966 } 2934 }
2935
2936 result.resize (dv);
2937
2938 bool err;
2939
2940 for (octave_idx_type i = 0; i < nel; i++)
2941 {
2942 result(i) = gammainc (x(i), a(i), err);
2943
2944 if (err)
2945 goto done; // FIXME: why not just use return to exit?
2946 }
2947
2948 retval = result;
2967 2949
2968 done: 2950 done:
2969 2951
2970 return retval; 2952 return retval;
2971 } 2953 }
3305 value = y; 3287 value = y;
3306 3288
3307 // Test for admissibility of parameters. 3289 // Test for admissibility of parameters.
3308 3290
3309 if (p <= 0.0 || q <= 0.0) 3291 if (p <= 0.0 || q <= 0.0)
3310 { 3292 (*current_liboctave_error_handler) ("betaincinv: wrong parameters");
3311 (*current_liboctave_error_handler)
3312 ("betaincinv: wrong parameters");
3313 }
3314
3315 if (y < 0.0 || 1.0 < y) 3293 if (y < 0.0 || 1.0 < y)
3316 { 3294 (*current_liboctave_error_handler) ("betaincinv: wrong parameter Y");
3317 (*current_liboctave_error_handler)
3318 ("betaincinv: wrong parameter Y");
3319 }
3320 3295
3321 if (y == 0.0 || y == 1.0) 3296 if (y == 0.0 || y == 1.0)
3322 { 3297 return value;
3323 return value;
3324 }
3325 3298
3326 // Change tail if necessary. 3299 // Change tail if necessary.
3327 3300
3328 if (0.5 < y) 3301 if (0.5 < y)
3329 { 3302 {