chiark / gitweb /
fixed to compile under C++, use C++ compiler in --with-cxx mode (thanks to Greg Nicho...
authorstevenj <stevenj@alum.mit.edu>
Fri, 29 Jan 2010 06:00:46 +0000 (01:00 -0500)
committerstevenj <stevenj@alum.mit.edu>
Fri, 29 Jan 2010 06:00:46 +0000 (01:00 -0500)
darcs-hash:20100129060046-c8de0-eaf1103383deae6747c025b25cfd02bedd2cdb1a.gz

cdirect/cdirect.c
cobyla/cobyla.c
cobyla/cobyla.h
configure.ac
direct/DIRserial.c
direct/DIRsubrout.c
direct/direct-internal.h
util/stop.c

index f61df07f6f370946200f4fe742f85be80aa888ac..629dc59d7001dbd7c0153d853cfb3d87a099af3b 100644 (file)
@@ -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 */
index be33e4cfa90ef0f64cca312f03a2cbe0f4d59639..388a87339f5daa5460efe5e29f99bdac975be98a 100644 (file)
@@ -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");
index ebbe34899677e1911e25b7e94090252a7efd38f9..4f36e55bc49a88ee6aa9e46c00752c9ab975b9e6 100644 (file)
 #include "nlopt.h"
 #include "nlopt-util.h"
 
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
 /*
  * Verbosity level
  */
index e6206d83281dce671717be9a67eca65f6396a3da..dcd7acfb854e84a83b4f17ef4dc4e88102fdde2b 100644 (file)
@@ -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
 
index fedd644fb1d561106e66035b165c5fb2b9dd316a..0f7eec81385e7f290567084a5b2f6dda0302b8c2 100644 (file)
@@ -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 */
index 1fa7892a7815572062590ca94204d65c7db572a7..4ff5e5dd207e50e2ecfee3e1647812455832e5ef 100644 (file)
@@ -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)
 {
index d937832dcfc741c719e5e2eb0df456470df7a803..996ca1073caf2bcc12ed3eb2a09bcbb01b1fdbfc 100644 (file)
@@ -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 */
index 72e6a23cc9f8247c1e0e6b7bd4d3443f3e267d38..534b76ce81fb2c9e2fb21550e490dc709986d4f4 100644 (file)
 
 /* 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)