Mercurial > hg > octave-nkf
changeset 2804:eedc2f3f61f7
[project @ 1997-03-11 04:34:50 by jwe]
author | jwe |
---|---|
date | Tue, 11 Mar 1997 04:48:53 +0000 |
parents | f96fae33b877 |
children | 68e6d0c93fc8 |
files | liboctave/ChangeLog liboctave/CmplxCHOL.cc liboctave/CmplxHESS.cc liboctave/CmplxLU.cc liboctave/CmplxQR.cc liboctave/CmplxQRP.cc liboctave/CmplxSCHUR.cc liboctave/CmplxSVD.cc liboctave/EIG.cc liboctave/dbleCHOL.cc liboctave/dbleHESS.cc liboctave/dbleLU.cc liboctave/dbleQR.cc liboctave/dbleQRP.cc liboctave/dbleSCHUR.cc liboctave/dbleSVD.cc liboctave/mx-inlines.cc src/help.cc src/help.h src/lex.l src/load-save.cc src/mappers.cc src/oct-hist.cc src/oct-strstrm.cc src/octave.cc src/octave.gperf src/ov.h src/pr-output.cc src/time.cc src/xpow.cc |
diffstat | 30 files changed, 199 insertions(+), 1133 deletions(-) [+] |
line wrap: on
line diff
--- a/liboctave/ChangeLog +++ b/liboctave/ChangeLog @@ -1,5 +1,28 @@ +Mon Mar 10 22:34:22 1997 John W. Eaton <jwe@bevo.che.wisc.edu> + + * CmplxCHOL.cc, CmplxHESS.cc, CmplxLU.cc, CmplxQR.cc, + CmplxQRP.cc, CmplxSCHUR.cc, CmplxSVD.cc, EIG.cc, dbleCHOL.cc, + dbleHESS.cc, dbleLU.cc, dbleQR.cc, dbleQRP.cc, dbleSCHUR.cc, + dbleSVD.cc: Don't include mx-inlines.cc. + + * mx-inlines.cc: Abuse the preprocessor to eliminate lots of + duplicate code. + Sun Mar 9 03:44:52 1997 John W. Eaton <jwe@bevo.che.wisc.edu> + * dbleQR.h (QR): Delete extra comma at end of list. + + * prog-args.cc (prog_args::getopt): Add missing const in cast. + + * dbleSVD.h (SVD::type): Delete extra comma at end of list. + + * idx-vector.h (idx_vector): Delete unnecessary idx_vector:: and + idx_vecotr_rep:: qualifiers. + + * Array.h (class Array): Delete unnecessary Array<T>:: qualifiers. + + * data-conv.h (save_type): Delete extra comma at end of list. + * CMatrix.cc, FEGrid.cc, Range.cc, dMatrix.cc, data-conv.cc, dir-ops.cc, file-ops.h, idx-vector.cc, idx-vector.h, lo-ieee.cc, lo-mappers.cc, oct-alloc.cc: Use `static_cast<T> (val)' instead of
--- a/liboctave/CmplxCHOL.cc +++ b/liboctave/CmplxCHOL.cc @@ -31,7 +31,6 @@ #include "CmplxCHOL.h" #include "f77-fcn.h" #include "lo-error.h" -#include "mx-inlines.cc" extern "C" {
--- a/liboctave/CmplxHESS.cc +++ b/liboctave/CmplxHESS.cc @@ -31,7 +31,6 @@ #include "CmplxHESS.h" #include "f77-fcn.h" #include "lo-error.h" -#include "mx-inlines.cc" extern "C" {
--- a/liboctave/CmplxLU.cc +++ b/liboctave/CmplxLU.cc @@ -31,7 +31,6 @@ #include "CmplxLU.h" #include "f77-fcn.h" #include "lo-error.h" -#include "mx-inlines.cc" // Instantiate the base LU class for the types we need.
--- a/liboctave/CmplxQR.cc +++ b/liboctave/CmplxQR.cc @@ -31,7 +31,6 @@ #include "CmplxQR.h" #include "f77-fcn.h" #include "lo-error.h" -#include "mx-inlines.cc" extern "C" {
--- a/liboctave/CmplxQRP.cc +++ b/liboctave/CmplxQRP.cc @@ -33,7 +33,6 @@ #include "CmplxQRP.h" #include "f77-fcn.h" #include "lo-error.h" -#include "mx-inlines.cc" extern "C" {
--- a/liboctave/CmplxSCHUR.cc +++ b/liboctave/CmplxSCHUR.cc @@ -31,7 +31,6 @@ #include "CmplxSCHUR.h" #include "f77-fcn.h" #include "lo-error.h" -#include "mx-inlines.cc" extern "C" {
--- a/liboctave/CmplxSVD.cc +++ b/liboctave/CmplxSVD.cc @@ -31,7 +31,6 @@ #include "CmplxSVD.h" #include "f77-fcn.h" #include "lo-error.h" -#include "mx-inlines.cc" extern "C" {
--- a/liboctave/EIG.cc +++ b/liboctave/EIG.cc @@ -31,7 +31,6 @@ #include "EIG.h" #include "f77-fcn.h" #include "lo-error.h" -#include "mx-inlines.cc" extern "C" {
--- a/liboctave/dbleCHOL.cc +++ b/liboctave/dbleCHOL.cc @@ -31,7 +31,6 @@ #include "dbleCHOL.h" #include "f77-fcn.h" #include "lo-error.h" -#include "mx-inlines.cc" extern "C" {
--- a/liboctave/dbleHESS.cc +++ b/liboctave/dbleHESS.cc @@ -31,7 +31,6 @@ #include "dbleHESS.h" #include "f77-fcn.h" #include "lo-error.h" -#include "mx-inlines.cc" extern "C" {
--- a/liboctave/dbleLU.cc +++ b/liboctave/dbleLU.cc @@ -31,7 +31,6 @@ #include "dbleLU.h" #include "f77-fcn.h" #include "lo-error.h" -#include "mx-inlines.cc" // Instantiate the base LU class for the types we need.
--- a/liboctave/dbleQR.cc +++ b/liboctave/dbleQR.cc @@ -31,7 +31,6 @@ #include "dbleQR.h" #include "f77-fcn.h" #include "lo-error.h" -#include "mx-inlines.cc" extern "C" {
--- a/liboctave/dbleQRP.cc +++ b/liboctave/dbleQRP.cc @@ -33,7 +33,6 @@ #include "dbleQRP.h" #include "f77-fcn.h" #include "lo-error.h" -#include "mx-inlines.cc" extern "C" {
--- a/liboctave/dbleSCHUR.cc +++ b/liboctave/dbleSCHUR.cc @@ -33,7 +33,6 @@ #include "dbleSCHUR.h" #include "f77-fcn.h" #include "lo-error.h" -#include "mx-inlines.cc" extern "C" {
--- a/liboctave/dbleSVD.cc +++ b/liboctave/dbleSVD.cc @@ -32,7 +32,6 @@ #include "dbleSVD.h" #include "f77-fcn.h" -#include "mx-inlines.cc" extern "C" {
--- a/liboctave/mx-inlines.cc +++ b/liboctave/mx-inlines.cc @@ -1,4 +1,3 @@ -// Helper functions for matrix classes. /* Copyright (C) 1996 John W. Eaton @@ -21,822 +20,177 @@ */ +#if !defined (octave_mx_ops_h) +#define octave_mx_ops 1 + +#include <cstddef> + #include "oct-cmplx.h" -// But first, some helper functions... - -// XXX FIXME XXX -- these need to be done with templates... - -static inline bool -equal (const char *x, const char *y, int len) -{ - for (int i = 0; i < len; i++) - if (x[i] != y[i]) - return false; - - return true; -} - -static inline double * -add (const double *d, int len, double s) -{ - double *result = 0; - if (len > 0) - { - result = new double [len]; - for (int i = 0; i < len; i++) - result[i] = d[i] + s; - } - return result; -} - -static inline double * -subtract (const double *d, int len, double s) -{ - double *result = 0; - if (len > 0) - { - result = new double [len]; - for (int i = 0; i < len; i++) - result[i] = d[i] - s; - } - return result; -} - -static inline double * -subtract (double s, const double *d, int len) -{ - double *result = 0; - if (len > 0) - { - result = new double [len]; - for (int i = 0; i < len; i++) - result[i] = s - d[i]; - } - return result; -} - -static inline double * -multiply (const double *d, int len, double s) -{ - double *result = 0; - if (len > 0) - { - result = new double [len]; - for (int i = 0; i < len; i++) - result[i] = d[i] * s; - } - return result; -} - -static inline double * -divide (const double *d, int len, double s) -{ - double *result = 0; - if (len > 0) - { - result = new double [len]; - for (int i = 0; i < len; i++) - result[i] = d[i] / s; - } - return result; -} - -static inline double * -divide (double s, const double *d, int len) -{ - double *result = 0; - if (len > 0) - { - result = new double [len]; - for (int i = 0; i < len; i++) - result[i] = s / d[i]; - } - return result; -} +// Before you suggest it: I tried templates but they didn't work with +// gcc 2.7.2. -static inline double * -add (const double *x, const double *y, int len) -{ - double *result = 0; - if (len > 0) - { - result = new double [len]; - for (int i = 0; i < len; i++) - result[i] = x[i] + y[i]; - } - return result; -} - -static inline double * -subtract (const double *x, const double *y, int len) -{ - double *result = 0; - if (len > 0) - { - result = new double [len]; - for (int i = 0; i < len; i++) - result[i] = x[i] - y[i]; - } - return result; -} - -static inline double * -multiply (const double *x, const double *y, int len) -{ - double *result = 0; - if (len > 0) - { - result = new double [len]; - for (int i = 0; i < len; i++) - result[i] = x[i] * y[i]; - } - return result; -} +#define VS_OP(F, OP, R, V, S) \ + static inline R * \ + F (const V *v, size_t n, S s) \ + { \ + R *r = 0; \ + if (n > 0) \ + { \ + r = new R [n]; \ + for (size_t i = 0; i < n; i++) \ + r[i] = v[i] OP s; \ + } \ + return r; \ + } -static inline double * -divide (const double *x, const double *y, int len) -{ - double *result = 0; - if (len > 0) - { - result = new double [len]; - for (int i = 0; i < len; i++) - result[i] = x[i] / y[i]; - } - return result; -} - -static inline double * -add2 (double *x, const double *y, int len) -{ - for (int i = 0; i < len; i++) - x[i] += y[i]; - return x; -} +#define VS_OPS(R, V, S) \ + VS_OP (add, +, R, S, V) \ + VS_OP (subtract, -, R, S, V) \ + VS_OP (multiply, *, R, S, V) \ + VS_OP (divide, /, R, S, V) -static inline double * -subtract2 (double *x, const double *y, int len) -{ - for (int i = 0; i < len; i++) - x[i] -= y[i]; - return x; -} - -static inline double * -negate (const double *d, int len) -{ - double *result = 0; - if (len > 0) - { - result = new double [len]; - for (int i = 0; i < len; i++) - result[i] = -d[i]; - } - return result; -} - -static inline void -copy (double *d, int len, double s) -{ - for (int i = 0; i < len; i++) - d[i] = s; -} - -static inline void -copy (double *x, const double *y, int len) -{ - for (int i = 0; i < len; i++) - x[i] = y[i]; -} +VS_OPS (double, double, double) +VS_OPS (Complex, double, Complex) +VS_OPS (Complex, Complex, double) +VS_OPS (Complex, Complex, Complex) -static inline double * -dup (const double *x, int len) -{ - double *retval = 0; - if (len > 0) - { - retval = new double [len]; - for (int i = 0; i < len; i++) - retval[i] = x[i]; - } - return retval; -} - -static inline int -equal (const double *x, const double *y, int len) -{ - for (int i = 0; i < len; i++) - if (x[i] != y[i]) - return 0; - return 1; -} - -// And some for Complex too... - -static inline Complex * -add (const Complex *d, int len, Complex s) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = d[i] + s; - } - return result; -} - -static inline Complex * -add (Complex s, const Complex *d, int len) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = s + d[i]; - } - return result; -} +#define SV_OP(F, OP, R, S, V) \ + static inline R * \ + F (S s, const V *v, size_t n) \ + { \ + R *r = 0; \ + if (n > 0) \ + { \ + r = new R [n]; \ + for (size_t i = 0; i < n; i++) \ + r[i] = s OP v[i]; \ + } \ + return r; \ + } -static inline Complex * -subtract (const Complex *d, int len, Complex s) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = d[i] - s; - } - return result; -} - -static inline Complex * -subtract (Complex s, const Complex *d, int len) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = s - d[i]; - } - return result; -} +#define SV_OPS(R, S, V) \ + SV_OP (add, +, R, V, S) \ + SV_OP (subtract, -, R, V, S) \ + SV_OP (multiply, *, R, V, S) \ + SV_OP (divide, /, R, V, S) -static inline Complex * -multiply (const Complex *d, int len, Complex s) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = d[i] * s; - } - return result; -} - -static inline Complex * -multiply (Complex s, const Complex *d, int len) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = s * d[i]; - } - return result; -} +SV_OPS (double, double, double) +SV_OPS (Complex, double, Complex) +SV_OPS (Complex, Complex, double) +SV_OPS (Complex, Complex, Complex) -static inline Complex * -divide (const Complex *d, int len, Complex s) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = d[i] / s; - } - return result; -} - -static inline Complex * -divide (Complex s, const Complex *d, int len) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = s / d[i]; - } - return result; -} - -static inline Complex * -add (const Complex *x, const Complex *y, int len) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = x[i] + y[i]; - } - return result; -} - -static inline Complex * -subtract (const Complex *x, const Complex *y, int len) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = x[i] - y[i]; - } - return result; -} +#define VV_OP(F, OP, R, T1, T2) \ + static inline R * \ + F (const T1 *v1, const T2 *v2, size_t n) \ + { \ + R *r = 0; \ + if (n > 0) \ + { \ + r = new R [n]; \ + for (size_t i = 0; i < n; i++) \ + r[i] = v1[i] OP v2[i]; \ + } \ + return r; \ + } -static inline Complex * -multiply (const Complex *x, const Complex *y, int len) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = x[i] * y[i]; - } - return result; -} - -static inline Complex * -divide (const Complex *x, const Complex *y, int len) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = x[i] / y[i]; - } - return result; -} +#define VV_OPS(R, T1, T2) \ + VV_OP (add, +, R, T1, T2) \ + VV_OP (subtract, -, R, T1, T2) \ + VV_OP (multiply, *, R, T1, T2) \ + VV_OP (divide, /, R, T1, T2) -static inline Complex * -add2 (Complex *x, const Complex *y, int len) -{ - for (int i = 0; i < len; i++) - x[i] += y[i]; - return x; -} - -static inline Complex * -subtract2 (Complex *x, const Complex *y, int len) -{ - for (int i = 0; i < len; i++) - x[i] -= y[i]; - return x; -} - -static inline Complex * -negate (const Complex *d, int len) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = -d[i]; - } - return result; -} +VV_OPS (double, double, double) +VV_OPS (Complex, double, Complex) +VV_OPS (Complex, Complex, double) +VV_OPS (Complex, Complex, Complex) -static inline double * -not (const Complex *d, int len) -{ - double *result = 0; - if (len > 0) - { - result = new double [len]; - for (int i = 0; i < len; i++) - result[i] = (d[i] == 0.0); - } - return result; -} - -static inline void -copy (Complex *d, int len, Complex s) -{ - for (int i = 0; i < len; i++) - d[i] = s; -} - -static inline void -copy (Complex *x, const Complex *y, int len) -{ - for (int i = 0; i < len; i++) - x[i] = y[i]; -} - -static inline Complex * -dup (const Complex *x, int len) -{ - Complex *retval = 0; - if (len > 0) - { - retval = new Complex [len]; - for (int i = 0; i < len; i++) - retval[i] = x[i]; - } - return retval; -} +#define VS_OP2(F, OP, V, S) \ + static inline V * \ + F (V *v, size_t n, S s) \ + { \ + for (size_t i = 0; i < n; i++) \ + v[i] OP s; \ + return v; \ + } -static inline Complex * -make_complex (const double *x, int len) -{ - Complex *retval = 0; - if (len > 0) - { - retval = new Complex [len]; - for (int i = 0; i < len; i++) - retval[i] = x[i]; - } - return retval; -} - -static inline Complex * -conj_dup (const Complex *x, int len) -{ - Complex *retval = 0; - if (len > 0) - { - retval = new Complex [len]; - for (int i = 0; i < len; i++) - retval[i] = conj (x[i]); - } - return retval; -} +#define VS_OP2S(V, S) \ + VS_OP2 (add2, +=, V, S) \ + VS_OP2 (subtract2, -=, V, S) \ + VS_OP2 (multiply2, *=, V, S) \ + VS_OP2 (divide2, /=, V, S) \ + VS_OP2 (copy, =, V, S) -static inline double * -real_dup (const Complex *x, int len) -{ - double *retval = 0; - if (len > 0) - { - retval = new double [len]; - for (int i = 0; i < len; i++) - retval[i] = real (x[i]); - } - return retval; -} - -static inline double * -imag_dup (const Complex *x, int len) -{ - double *retval = 0; - if (len > 0) - { - retval = new double [len]; - for (int i = 0; i < len; i++) - retval[i] = imag (x[i]); - } - return retval; -} - -static inline int -equal (const Complex *x, const Complex *y, int len) -{ - for (int i = 0; i < len; i++) - if (x[i] != y[i]) - return 0; - return 1; -} - -// And still some more for mixed Complex/double operations... +VS_OP2S (double, double) +VS_OP2S (Complex, double) +VS_OP2S (Complex, Complex) -static inline Complex * -add (const Complex *d, int len, double s) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = d[i] + s; - } - return result; -} - -static inline Complex * -add (const double *d, int len, Complex s) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = d[i] + s; - } - return result; -} - -static inline Complex * -add (double s, const Complex *d, int len) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = s + d[i]; - } - return result; -} - -static inline Complex * -add (Complex s, const double *d, int len) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = s + d[i]; - } - return result; -} +#define VV_OP2(F, OP, T1, T2) \ + static inline T1 * \ + F (T1 *v1, const T2 *v2, size_t n) \ + { \ + for (size_t i = 0; i < n; i++) \ + v1[i] OP v2[i]; \ + return v1; \ + } -static inline Complex * -subtract (const Complex *d, int len, double s) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = d[i] - s; - } - return result; -} - -static inline Complex * -subtract (const double *d, int len, Complex s) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = d[i] - s; - } - return result; -} +#define VV_OP2S(T1, T2) \ + VV_OP2 (add2, +=, T1, T2) \ + VV_OP2 (subtract2, -=, T1, T2) \ + VV_OP2 (multiply2, *=, T1, T2) \ + VV_OP2 (divide2, /=, T1, T2) \ + VV_OP2 (copy, =, T1, T2) -static inline Complex * -subtract (double s, const Complex *d, int len) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = s - d[i]; - } - return result; -} - -static inline Complex * -subtract (Complex s, const double *d, int len) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = s - d[i]; - } - return result; -} +VV_OP2S (double, double) +VV_OP2S (Complex, double) +VV_OP2S (Complex, Complex) -static inline Complex * -multiply (const Complex *d, int len, double s) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = d[i] * s; - } - return result; -} - -static inline Complex * -multiply (const double *d, int len, Complex s) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = d[i] * s; - } - return result; -} - -static inline Complex * -divide (const Complex *d, int len, double s) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = d[i] / s; - } - return result; -} - -static inline Complex * -divide (const double *d, int len, Complex s) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = d[i] / s; - } - return result; -} +#define OP_EQ_FCN(T1, T2) \ + static inline bool \ + equal (const T1 *x, const T2 *y, size_t n) \ + { \ + for (size_t i = 0; i < n; i++) \ + if (x[i] != y[i]) \ + return false; \ + return true; \ + } -static inline Complex * -divide (double s, const Complex *d, int len) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = s / d[i]; - } - return result; -} - -static inline Complex * -divide (Complex s, const double *d, int len) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = s / d[i]; - } - return result; -} - -static inline Complex * -add (const Complex *x, const double *y, int len) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = x[i] + y[i]; - } - return result; -} - -static inline Complex * -add (const double *x, const Complex *y, int len) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = x[i] + y[i]; - } - return result; -} +OP_EQ_FCN (char, char) +OP_EQ_FCN (double, double) +OP_EQ_FCN (Complex, Complex) -static inline Complex * -subtract (const Complex *x, const double *y, int len) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = x[i] - y[i]; - } - return result; -} - -static inline Complex * -subtract (const double *x, const Complex *y, int len) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = x[i] - y[i]; - } - return result; -} - -static inline Complex * -multiply (const Complex *x, const double *y, int len) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = x[i] * y[i]; - } - return result; -} - -static inline Complex * -multiply (const double *x, const Complex *y, int len) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = x[i] * y[i]; - } - return result; -} +#define OP_DUP_FCN(OP, F, R, T) \ + static inline R * \ + F (const T *x, size_t n) \ + { \ + R *r = 0; \ + if (n > 0) \ + { \ + r = new R [n]; \ + for (size_t i = 0; i < n; i++) \ + r[i] = OP (x[i]); \ + } \ + return r; \ + } -static inline Complex * -divide (const Complex *x, const double *y, int len) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = x[i] / y[i]; - } - return result; -} +OP_DUP_FCN (, dup, double, double) +OP_DUP_FCN (, dup, Complex, Complex) -static inline Complex * -divide (const double *x, const Complex *y, int len) -{ - Complex *result = 0; - if (len > 0) - { - result = new Complex [len]; - for (int i = 0; i < len; i++) - result[i] = x[i] / y[i]; - } - return result; -} +// These should really return a bool *. Also, they should probably be +// in with a collection of other element-by-element boolean ops. +OP_DUP_FCN (0.0 ==, not, double, double) +OP_DUP_FCN (0.0 ==, not, double, Complex) -static inline Complex * -add2 (Complex *x, const double *y, int len) -{ - for (int i = 0; i < len; i++) - x[i] += y[i]; - return x; -} +OP_DUP_FCN (, make_complex, Complex, double) + +OP_DUP_FCN (-, negate, double, double) +OP_DUP_FCN (-, negate, Complex, Complex) -static inline Complex * -subtract2 (Complex *x, const double *y, int len) -{ - for (int i = 0; i < len; i++) - x[i] -= y[i]; - return x; -} +OP_DUP_FCN (real, real_dup, double, Complex) +OP_DUP_FCN (imag, imag_dup, double, Complex) +OP_DUP_FCN (conj, conj_dup, Complex, Complex) -static inline void -copy (Complex *d, int len, double s) -{ - for (int i = 0; i < len; i++) - d[i] = s; -} - -static inline void -copy (Complex *x, const double *y, int len) -{ - for (int i = 0; i < len; i++) - x[i] = y[i]; -} +#endif /* ;;; Local Variables: ***
--- a/src/help.cc +++ b/src/help.cc @@ -609,7 +609,7 @@ help_from_list (ostream& os, const help_list *list, const string& nm, int usage) { - char *name; + const char *name; while ((name = list->name) != 0) { if (strcmp (name, nm.c_str ()) == 0)
--- a/src/help.h +++ b/src/help.h @@ -33,8 +33,8 @@ struct help_list { - char *name; - char *help; + const char *name; + const char *help; }; extern string_vector names (help_list *l, int& count);
--- a/src/lex.l +++ b/src/lex.l @@ -174,7 +174,7 @@ static string plot_style_token (const string& s); static symbol_record *lookup_identifier (const string& s); static void grab_help_text (void); -static int match_any (char c, char *s); +static int match_any (char c, const char *s); static int next_token_is_bin_op (int spc_prev, char *yytext); static int next_token_is_postfix_unary_op (int spc_prev, char *yytext); static string strip_trailing_whitespace (char *s); @@ -855,7 +855,7 @@ { string retval; - static char *plot_styles[] = + static const char *plot_styles[] = { "boxes", "boxerrorbars", @@ -878,7 +878,7 @@ 0, }; - char **tmp = plot_styles; + const char * const *tmp = plot_styles; while (*tmp) { if (almost_match (*tmp, s.c_str ())) @@ -1160,7 +1160,7 @@ // string. static int -match_any (char c, char *s) +match_any (char c, const char *s) { char tmp; while ((tmp = *s++) != '\0')
--- a/src/load-save.cc +++ b/src/load-save.cc @@ -251,7 +251,7 @@ // #[ \t]*keyword[ \t]*:[ \t]*string-value[ \t]*\n static char * -extract_keyword (istream& is, char *keyword) +extract_keyword (istream& is, const char *keyword) { char *retval = 0; @@ -318,7 +318,7 @@ // [ \t]*keyword[ \t]*int-value.*\n static int -extract_keyword (istream& is, char *keyword, int& value) +extract_keyword (istream& is, const char *keyword, int& value) { int status = 0; value = 0; @@ -1993,7 +1993,7 @@ } static void -ascii_save_type (ostream& os, char *type, bool mark_as_global) +ascii_save_type (ostream& os, const char *type, bool mark_as_global) { if (mark_as_global) os << "# type: global ";
--- a/src/mappers.cc +++ b/src/mappers.cc @@ -25,305 +25,10 @@ #endif #include <cctype> -#include <cfloat> - -#include "oct-cmplx.h" -#include "oct-math.h" -#include "lo-ieee.h" #include "defun.h" #include "error.h" -#include "f77-fcn.h" #include "mappers.h" -#include "sysdep.h" -#include "utils.h" -#include "variables.h" - -#if defined (_AIX) && defined (__GNUG__) -#undef finite -#define finite(x) ((x) < DBL_MAX && (x) > -DBL_MAX) -#endif - -extern "C" -{ - double F77_FCN (dgamma, DGAMMA) (const double&); - int F77_FCN (dlgams, DLGAMS) (const double&, double&, double&); -} - -#ifndef M_LOG10E -#define M_LOG10E 0.43429448190325182765 -#endif - -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#if defined (HAVE_LGAMMA) && ! defined (SIGNGAM_DECLARED) -extern int signgam; -#endif - -// Double -> double mappers. - -double -arg (double x) -{ - if (x < 0.0) - return M_PI; - else -#if defined (HAVE_ISNAN) - return xisnan (x) ? octave_NaN : 0.0; -#else - return 0.0; -#endif -} - -double -conj (double x) -{ - return x; -} - -double -fix (double x) -{ - return static_cast<int> (x); -} - -double -imag (double x) -{ -#if defined (HAVE_ISNAN) - return xisnan (x) ? octave_NaN : 0.0; -#else - return 0.0; -#endif -} - -double -real (double x) -{ - return x; -} - -double -round (double x) -{ - return D_NINT (x); -} - -double -signum (double x) -{ - double tmp = 0.0; - if (x < 0.0) - tmp = -1.0; - else if (x > 0.0) - tmp = 1.0; - -#if defined (HAVE_ISNAN) - return xisnan (x) ? octave_NaN : tmp; -#else - return tmp; -#endif -} - -double -xerf (double x) -{ -#if defined (HAVE_ERF) - return erf (x); -#else - error ("erf(x) not available on this system"); -#endif -} - -double -xerfc (double x) -{ -#if defined (HAVE_ERFC) - return erfc (x); -#else - error ("erfc(x) not available on this system"); -#endif -} - -double -xisnan (double x) -{ -#if defined (HAVE_ISNAN) - return isnan (x); -#else - return 0; -#endif -} - -double -xfinite (double x) -{ -#if defined (HAVE_FINITE) - return finite (x); -#elif defined (HAVE_ISINF) && defined (HAVE_ISNAN) - return (! isinf (x) && ! isnan (x)); -#else - return 1; -#endif -} - -double -xgamma (double x) -{ - return F77_FCN (dgamma, DGAMMA) (x); -} - -double -xisinf (double x) -{ -#if defined (HAVE_ISINF) - return isinf (x); -#elif defined (HAVE_FINITE) && defined (HAVE_ISNAN) - return (! (finite (x) || isnan (x))); -#else - return 0; -#endif -} - -double -xlgamma (double x) -{ - double result; - double sgngam; - - F77_FCN (dlgams, DLGAMS) (x, result, sgngam); - - return result; -} - -// Complex -> double mappers. - -double -xisnan (const Complex& x) -{ -#if defined (HAVE_ISNAN) - double rx = real (x); - double ix = imag (x); - return (isnan (rx) || isnan (ix)); -#else - return 0; -#endif -} - -double -xfinite (const Complex& x) -{ - double rx = real (x); - double ix = imag (x); - return (! (xisinf (rx) || xisinf (ix))); -} - -double -xisinf (const Complex& x) -{ - return (! xfinite (x)); -} - -// Complex -> complex mappers. - -Complex -acos (const Complex& x) -{ - static Complex i (0, 1); - Complex retval = -i * log (x + sqrt (x*x - 1.0)); - return retval; -} - -Complex -acosh (const Complex& x) -{ - Complex retval = log (x + sqrt (x*x - 1.0)); - return retval; -} - -Complex -asin (const Complex& x) -{ - static Complex i (0, 1); - Complex retval = -i * log (i*x + sqrt (1.0 - x*x)); - return retval; -} - -Complex -asinh (const Complex& x) -{ - Complex retval = log (x + sqrt (x*x + 1.0)); - return retval; -} - -Complex -atan (const Complex& x) -{ - static Complex i (0, 1); - Complex retval = i * log ((i + x) / (i - x)) / 2.0; - return retval; -} - -Complex -atanh (const Complex& x) -{ - static Complex i (0, 1); - Complex retval = log ((1 + x) / (1 - x)) / 2.0; - return retval; -} - -Complex -ceil (const Complex& x) -{ - return Complex (ceil (real (x)), ceil (imag (x))); -} - -Complex -fix (const Complex& x) -{ - return Complex (static_cast<int> (real (x)), - static_cast<int> (imag (x))); -} - -Complex -floor (const Complex& x) -{ - return Complex (floor (real (x)), floor (imag (x))); -} - -Complex -log10 (const Complex& x) -{ - return M_LOG10E * log (x); -} - -Complex -round (const Complex& x) -{ - return Complex (D_NINT (real (x)), D_NINT (imag (x))); -} - -Complex -signum (const Complex& x) -{ - return x / abs (x); -} - -Complex -tan (const Complex& x) -{ - Complex retval = sin (x) / cos (x); - return retval; -} - -Complex -tanh (const Complex& x) -{ - Complex retval = sinh (x) / cosh (x); - return retval; -} // XXX FIXME XXX -- perhaps this could be avoided by determining // whether the is* functions are actually functions or just macros.
--- a/src/oct-hist.cc +++ b/src/oct-hist.cc @@ -312,7 +312,7 @@ static string mk_tmp_hist_file (int argc, const string_vector& argv, - int insert_curr, char *warn_for) + int insert_curr, const char *warn_for) { string retval;
--- a/src/oct-strstrm.cc +++ b/src/oct-strstrm.cc @@ -60,7 +60,7 @@ { // XXX FIXME XXX -- shouldn't have to do this! - streambuf *sb = (static_cast<octave_base_strstream *>(this))->rdbuf (); + streambuf *sb = (const_cast<octave_base_strstream *>(this))->rdbuf (); if (sb) {
--- a/src/octave.cc +++ b/src/octave.cc @@ -275,7 +275,7 @@ int home_rc_already_executed = 0; - char *initfile = getenv ("OCTAVE_INITFILE"); + const char *initfile = getenv ("OCTAVE_INITFILE"); if (! initfile) initfile = ".octaverc";
--- a/src/octave.gperf +++ b/src/octave.gperf @@ -34,7 +34,7 @@ }; %} -struct octave_kw { char *name; int tok; octave_kw_id kw_id; }; +struct octave_kw { const char *name; int tok; octave_kw_id kw_id; }; %% all_va_args, ALL_VA_ARGS, all_va_args_kw break, BREAK, break_kw
--- a/src/ov.h +++ b/src/ov.h @@ -397,7 +397,6 @@ union { - octave_value *freeptr; // For custom memory management. octave_value *rep; // The real representation. int count; // A reference count. };
--- a/src/pr-output.cc +++ b/src/pr-output.cc @@ -982,7 +982,7 @@ } else if (xisinf (d)) { - char *s; + const char *s; if (d < 0.0) s = "-Inf"; else
--- a/src/time.cc +++ b/src/time.cc @@ -72,15 +72,15 @@ static struct tm tm; fraction = (m ["usec"] . double_value ()) / 1e6; - tm.tm_sec = NINT (m ["sec"] . double_value ()); - tm.tm_min = NINT (m ["min"] . double_value ()); - tm.tm_hour = NINT (m ["hour"] . double_value ()); - tm.tm_mday = NINT (m ["mday"] . double_value ()); - tm.tm_mon = NINT (m ["mon"] . double_value ()); - tm.tm_year = NINT (m ["year"] . double_value ()); - tm.tm_wday = NINT (m ["wday"] . double_value ()); - tm.tm_yday = NINT (m ["yday"] . double_value ()); - tm.tm_isdst = NINT (m ["isdst"] . double_value ()); + tm.tm_sec = static_cast<int> (m ["sec"] . double_value ()); + tm.tm_min = static_cast<int> (m ["min"] . double_value ()); + tm.tm_hour = static_cast<int> (m ["hour"] . double_value ()); + tm.tm_mday = static_cast<int> (m ["mday"] . double_value ()); + tm.tm_mon = static_cast<int> (m ["mon"] . double_value ()); + tm.tm_year = static_cast<int> (m ["year"] . double_value ()); + tm.tm_wday = static_cast<int> (m ["wday"] . double_value ()); + tm.tm_yday = static_cast<int> (m ["yday"] . double_value ()); + tm.tm_isdst = static_cast<int> (m ["isdst"] . double_value ()); #ifdef HAVE_TMZONE string tstr = m ["zone"] . string_value (); tm.tm_zone = tstr.c_str (); @@ -118,7 +118,7 @@ #endif - return static_cast<double> (now + fraction); + return static_cast<double> (now) + fraction; } DEFUN_DLD (gmtime, args, , @@ -136,7 +136,7 @@ if (! error_state) { - time_t timeval = NINT (tmp); + time_t timeval = static_cast<int> (tmp); double ip; double fraction = modf (tmp, &ip); @@ -175,7 +175,7 @@ if (! error_state) { - time_t timeval = NINT (tmp); + time_t timeval = static_cast<int> (tmp); double ip; double fraction = modf (tmp, &ip); @@ -202,7 +202,7 @@ struct tm *tm = extract_tm (map, fraction); if (! error_state) - retval = static_cast<double> (mktime (tm) + fraction); + retval = static_cast<double> (mktime (tm)) + fraction; } else print_usage ("mktime");
--- a/src/xpow.cc +++ b/src/xpow.cc @@ -165,7 +165,7 @@ { if (static_cast<int> (b) == b) { - int btmp = b; + int btmp = static_cast<int> (b); if (btmp == 0) { retval = DiagMatrix (nr, nr, 1.0); @@ -350,7 +350,7 @@ { if (static_cast<int> (b) == b) { - int btmp = b; + int btmp = static_cast<int> (b); if (btmp == 0) { retval = DiagMatrix (nr, nr, 1.0);