From 133755f1b32c800ed892ecd142124ee3df001e47 Mon Sep 17 00:00:00 2001 From: stevenj Date: Fri, 29 Jan 2010 01:00:46 -0500 Subject: [PATCH] fixed to compile under C++, use C++ compiler in --with-cxx mode (thanks to Greg Nicholas for the suggestion) darcs-hash:20100129060046-c8de0-eaf1103383deae6747c025b25cfd02bedd2cdb1a.gz --- cdirect/cdirect.c | 2 +- cobyla/cobyla.c | 4 ++-- cobyla/cobyla.h | 5 +++++ configure.ac | 5 +++++ direct/DIRserial.c | 2 +- direct/DIRsubrout.c | 24 ++++++++++++------------ direct/direct-internal.h | 24 ++++++++++++------------ util/stop.c | 10 +++++----- 8 files changed, 43 insertions(+), 33 deletions(-) diff --git a/cdirect/cdirect.c b/cdirect/cdirect.c index f61df07..629dc59 100644 --- a/cdirect/cdirect.c +++ b/cdirect/cdirect.c @@ -152,7 +152,7 @@ static double function_eval(const double *x, params *p) { static nlopt_result divide_rect(double *rdiv, params *p) { int i; - const const int n = p->n; + const int n = p->n; const int L = p->L; double *c = rdiv + 3; /* center of rect to divide */ double *w = c + n; /* widths of rect to divide */ diff --git a/cobyla/cobyla.c b/cobyla/cobyla.c index be33e4c..388a873 100644 --- a/cobyla/cobyla.c +++ b/cobyla/cobyla.c @@ -238,13 +238,13 @@ nlopt_result cobyla(int n, int m, double *x, double *minf, double rhobeg, nlopt_ } /* workspace allocation */ - w = malloc((n*(3*n+2*m+11)+4*m+6)*sizeof(*w)); + w = (double*) malloc((n*(3*n+2*m+11)+4*m+6)*sizeof(*w)); if (w == NULL) { if (iprint>=1) fprintf(stderr, "cobyla: memory allocation error.\n"); return NLOPT_OUT_OF_MEMORY; } - iact = malloc((m+1)*sizeof(*iact)); + iact = (int*)malloc((m+1)*sizeof(*iact)); if (iact == NULL) { if (iprint>=1) fprintf(stderr, "cobyla: memory allocation error.\n"); diff --git a/cobyla/cobyla.h b/cobyla/cobyla.h index ebbe348..4f36e55 100644 --- a/cobyla/cobyla.h +++ b/cobyla/cobyla.h @@ -40,6 +40,11 @@ #include "nlopt.h" #include "nlopt-util.h" +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + /* * Verbosity level */ diff --git a/configure.ac b/configure.ac index e6206d8..dcd7acf 100644 --- a/configure.ac +++ b/configure.ac @@ -28,6 +28,8 @@ AC_PROG_CXX if test "x$with_cxx" = xyes; then AC_DEFINE([WITH_CXX], 1, [Define if compiled including C++-based routines]) NLOPT_SUFFIX="_cxx" + CC=$CXX + CFLAGS=$CXXFLAGS fi AC_SUBST(NLOPT_SUFFIX) @@ -287,6 +289,9 @@ if test $ac_cv_prog_gcc = yes; then if test "$ac_test_CXXFLAGS" != "set"; then CXXFLAGS="$CXXFLAGS -Wall -W -Wcast-qual -Wpointer-arith -Wcast-align -pedantic -Wshadow -Wwrite-strings -Wredundant-decls -Wundef -Wconversion" fi + if test "x$with_cxx" = xyes; then + CFLAGS=$CXXFLAGS + fi fi fi diff --git a/direct/DIRserial.c b/direct/DIRserial.c index fedd644..0f7eec8 100644 --- a/direct/DIRserial.c +++ b/direct/DIRserial.c @@ -19,7 +19,7 @@ FILE *logfile, doublereal *f, integer *free, integer *maxi, integer *point, fp fcn, doublereal *x, doublereal *l, doublereal * minf, integer *minpos, doublereal *u, integer *n, integer *maxfunc, - integer *maxdeep, integer *oops, doublereal *fmax, integer * + const integer *maxdeep, integer *oops, doublereal *fmax, integer * ifeasiblef, integer *iinfesiblef, void *fcn_data) { /* System generated locals */ diff --git a/direct/DIRsubrout.c b/direct/DIRsubrout.c index 1fa7892..4ff5e5d 100644 --- a/direct/DIRsubrout.c +++ b/direct/DIRsubrout.c @@ -99,8 +99,8 @@ integer direct_dirgetlevel_(integer *pos, integer *length, integer *maxfunc, int /* +-----------------------------------------------------------------------+ */ /* Subroutine */ void direct_dirchoose_(integer *anchor, integer *s, integer *actdeep, doublereal *f, doublereal *minf, doublereal epsrel, doublereal epsabs, doublereal *thirds, - integer *maxpos, integer *length, integer *maxfunc, integer *maxdeep, - integer *maxdiv, integer *n, FILE *logfile, + integer *maxpos, integer *length, integer *maxfunc, const integer *maxdeep, + const integer *maxdiv, integer *n, FILE *logfile, integer *cheat, doublereal *kmax, integer *ifeasiblef, integer jones) { /* System generated locals */ @@ -274,8 +274,8 @@ L40: /* | return to the main program with an error. | */ /* +-----------------------------------------------------------------------+ */ /* Subroutine */ void direct_dirdoubleinsert_(integer *anchor, integer *s, integer * - maxpos, integer *point, doublereal *f, integer *maxdeep, integer * - maxfunc, integer *maxdiv, integer *ierror) + maxpos, integer *point, doublereal *f, const integer *maxdeep, integer * + maxfunc, const integer *maxdiv, integer *ierror) { /* System generated locals */ integer s_dim1, s_offset, i__1; @@ -410,7 +410,7 @@ L1010: /* +-----------------------------------------------------------------------+ */ /* Subroutine */ static void dirresortlist_(integer *replace, integer *anchor, doublereal *f, integer *point, integer *length, integer *n, integer * - maxfunc, integer *maxdim, integer *maxdeep, FILE *logfile, + maxfunc, integer *maxdim, const integer *maxdeep, FILE *logfile, integer jones) { /* System generated locals */ @@ -522,7 +522,7 @@ L40: /* Subroutine */ void direct_dirreplaceinf_(integer *free, integer *freeold, doublereal *f, doublereal *c__, doublereal *thirds, integer *length, integer *anchor, integer *point, doublereal *c1, doublereal *c2, - integer *maxfunc, integer *maxdeep, integer *maxdim, integer *n, + integer *maxfunc, const integer *maxdeep, integer *maxdim, integer *n, FILE *logfile, doublereal *fmax, integer jones) { /* System generated locals */ @@ -699,7 +699,7 @@ L40: /* +-----------------------------------------------------------------------+ */ /* Subroutine */ void direct_dirinsertlist_(integer *new__, integer *anchor, integer * point, doublereal *f, integer *maxi, integer *length, integer * - maxfunc, integer *maxdeep, integer *n, integer *samp, + maxfunc, const integer *maxdeep, integer *n, integer *samp, integer jones) { /* System generated locals */ @@ -867,7 +867,7 @@ L50: FILE *logfile, doublereal *f, integer *free, integer *maxi, integer *point, doublereal *x, doublereal *l, doublereal *minf, integer *minpos, doublereal *u, integer *n, - integer *maxfunc, integer *maxdeep, integer *oops) + integer *maxfunc, const integer *maxdeep, integer *oops) { /* System generated locals */ integer length_dim1, length_offset, c_dim1, c_offset, i__1, i__2; @@ -938,7 +938,7 @@ L50: /* Subroutine */ void direct_dirdivide_(integer *new__, integer *currentlength, integer *length, integer *point, integer *arrayi, integer *sample, integer *list2, doublereal *w, integer *maxi, doublereal *f, integer * - maxfunc, integer *maxdeep, integer *n) + maxfunc, const integer *maxdeep, integer *n) { /* System generated locals */ integer length_dim1, length_offset, list2_dim1, list2_offset, i__1, i__2; @@ -1145,7 +1145,7 @@ L50: integer *free, FILE *logfile, integer *arrayi, integer *maxi, integer *list2, doublereal *w, doublereal *x, doublereal *l, doublereal *u, doublereal *minf, integer *minpos, - doublereal *thirds, doublereal *levels, integer *maxfunc, integer * + doublereal *thirds, doublereal *levels, integer *maxfunc, const integer * maxdeep, integer *n, integer *maxor, doublereal *fmax, integer * ifeasiblef, integer *iinfeasible, integer *ierror, void *fcndata, integer jones) @@ -1302,7 +1302,7 @@ L50: /* | Initialise the list. | */ /* +-----------------------------------------------------------------------+ */ /* Subroutine */ void direct_dirinitlist_(integer *anchor, integer *free, integer * - point, doublereal *f, integer *maxfunc, integer *maxdeep) + point, doublereal *f, integer *maxfunc, const integer *maxdeep) { /* System generated locals */ integer i__1; @@ -1421,7 +1421,7 @@ L50: /* Subroutine */ void direct_dirheader_(FILE *logfile, integer *version, doublereal *x, integer *n, doublereal *eps, integer *maxf, integer * maxt, doublereal *l, doublereal *u, integer *algmethod, integer * - maxfunc, integer *maxdeep, doublereal *fglobal, doublereal *fglper, + maxfunc, const integer *maxdeep, doublereal *fglobal, doublereal *fglper, integer *ierror, doublereal *epsfix, integer *iepschange, doublereal * volper, doublereal *sigmaper) { diff --git a/direct/direct-internal.h b/direct/direct-internal.h index d937832..996ca10 100644 --- a/direct/direct-internal.h +++ b/direct/direct-internal.h @@ -28,7 +28,7 @@ extern void direct_dirheader_( FILE *logfile, integer *version, doublereal *x, integer *n, doublereal *eps, integer *maxf, integer * maxt, doublereal *l, doublereal *u, integer *algmethod, integer * - maxfunc, integer *maxdeep, doublereal *fglobal, doublereal *fglper, + maxfunc, const integer *maxdeep, doublereal *fglobal, doublereal *fglper, integer *ierror, doublereal *epsfix, integer *iepschange, doublereal * volper, doublereal *sigmaper); extern void direct_dirinit_( @@ -37,25 +37,25 @@ extern void direct_dirinit_( integer *free, FILE *logfile, integer *arrayi, integer *maxi, integer *list2, doublereal *w, doublereal *x, doublereal *l, doublereal *u, doublereal *minf, integer *minpos, - doublereal *thirds, doublereal *levels, integer *maxfunc, integer * + doublereal *thirds, doublereal *levels, integer *maxfunc, const integer * maxdeep, integer *n, integer *maxor, doublereal *fmax, integer * ifeasiblef, integer *iinfeasible, integer *ierror, void *fcndata, integer jones); extern void direct_dirinitlist_( integer *anchor, integer *free, integer * - point, doublereal *f, integer *maxfunc, integer *maxdeep); + point, doublereal *f, integer *maxfunc, const integer *maxdeep); extern void direct_dirpreprc_(doublereal *u, doublereal *l, integer *n, doublereal *xs1, doublereal *xs2, integer *oops); extern void direct_dirchoose_( integer *anchor, integer *s, integer *actdeep, doublereal *f, doublereal *minf, doublereal epsrel, doublereal epsabs, doublereal *thirds, - integer *maxpos, integer *length, integer *maxfunc, integer *maxdeep, - integer *maxdiv, integer *n, FILE *logfile, + integer *maxpos, integer *length, integer *maxfunc, const integer *maxdeep, + const integer *maxdiv, integer *n, FILE *logfile, integer *cheat, doublereal *kmax, integer *ifeasiblef, integer jones); extern void direct_dirdoubleinsert_( integer *anchor, integer *s, integer *maxpos, integer *point, - doublereal *f, integer *maxdeep, integer *maxfunc, - integer *maxdiv, integer *ierror); + doublereal *f, const integer *maxdeep, integer *maxfunc, + const integer *maxdiv, integer *ierror); extern integer direct_dirgetmaxdeep_(integer *pos, integer *length, integer *maxfunc, integer *n); extern void direct_dirget_i__( @@ -67,21 +67,21 @@ extern void direct_dirsamplepoints_( FILE *logfile, doublereal *f, integer *free, integer *maxi, integer *point, doublereal *x, doublereal *l, doublereal *minf, integer *minpos, doublereal *u, integer *n, - integer *maxfunc, integer *maxdeep, integer *oops); + integer *maxfunc, const integer *maxdeep, integer *oops); extern void direct_dirdivide_( integer *new__, integer *currentlength, integer *length, integer *point, integer *arrayi, integer *sample, integer *list2, doublereal *w, integer *maxi, doublereal *f, - integer *maxfunc, integer *maxdeep, integer *n); + integer *maxfunc, const integer *maxdeep, integer *n); extern void direct_dirinsertlist_( integer *new__, integer *anchor, integer *point, doublereal *f, integer *maxi, integer *length, integer *maxfunc, - integer *maxdeep, integer *n, integer *samp, integer jones); + const integer *maxdeep, integer *n, integer *samp, integer jones); extern void direct_dirreplaceinf_( integer *free, integer *freeold, doublereal *f, doublereal *c__, doublereal *thirds, integer *length, integer *anchor, integer *point, doublereal *c1, doublereal *c2, - integer *maxfunc, integer *maxdeep, integer *maxdim, integer *n, + integer *maxfunc, const integer *maxdeep, integer *maxdim, integer *n, FILE *logfile, doublereal *fmax, integer jones); extern void direct_dirsummary_( FILE *logfile, doublereal *x, doublereal *l, doublereal *u, @@ -102,7 +102,7 @@ extern void direct_dirsamplef_( FILE *logfile, doublereal *f, integer *free, integer *maxi, integer *point, fp fcn, doublereal *x, doublereal *l, doublereal * minf, integer *minpos, doublereal *u, integer *n, integer *maxfunc, - integer *maxdeep, integer *oops, doublereal *fmax, integer * + const integer *maxdeep, integer *oops, doublereal *fmax, integer * ifeasiblef, integer *iinfesiblef, void *fcn_data); /* DIRect.c */ diff --git a/util/stop.c b/util/stop.c index 72e6a23..534b76c 100644 --- a/util/stop.c +++ b/util/stop.c @@ -25,12 +25,12 @@ /* utility routines to implement the various stopping criteria */ -static int relstop(double old, double new, double reltol, double abstol) +static int relstop(double vold, double vnew, double reltol, double abstol) { - if (nlopt_isinf(old)) return 0; - return(fabs(new - old) < abstol - || fabs(new - old) < reltol * (fabs(new) + fabs(old)) * 0.5 - || (reltol > 0 && new == old)); /* catch new == old == 0 case */ + if (nlopt_isinf(vold)) return 0; + return(fabs(vnew - vold) < abstol + || fabs(vnew - vold) < reltol * (fabs(vnew) + fabs(vold)) * 0.5 + || (reltol > 0 && vnew == vold)); /* catch vnew == vold == 0 */ } int nlopt_stop_ftol(const nlopt_stopping *s, const double f, double oldf) -- 2.30.2