← Back to team overview

dolfin team mailing list archive

Re: [HG DOLFIN] Add str() to Variable interface ( in C++ ) and overload info()

 

On Tuesday 26 May 2009 11:36:52 Anders Logg wrote:
> On Fri, May 22, 2009 at 07:52:09PM +0100, Garth N. Wells wrote:
> > Anders Logg wrote:
> > > On Sun, May 10, 2009 at 07:31:55PM +0100, Garth N. Wells wrote:
> > >> Johan Hake wrote:
> > >>> On Sunday 10 May 2009 12:20:24 Garth N. Wells wrote:
> > >>>> DOLFIN wrote:
> > >>>>> One or more new changesets pushed to the primary dolfin repository.
> > >>>>> A short summary of the last three changesets is included below.
> > >>>>>
> > >>>>> changeset:   6112:1b2b19ddacfa92c80d36dc78a5bb4829605a10c0
> > >>>>> tag:         tip
> > >>>>> user:        Anders Logg <logg@xxxxxxxxx>
> > >>>>> date:        Sun May 10 00:33:56 2009 +0200
> > >>>>> files:       dolfin/common/Variable.cpp dolfin/common/Variable.h
> > >>>>> dolfin/log/Logger.cpp dolfin/log/Table.cpp dolfin/log/Table.h
> > >>>>> dolfin/log/log.cpp dolfin/log/log.h
> > >>>>> dolfin/parameter/NewParameters.cpp dolfin/parameter/NewParameters.h
> > >>>>> sandbox/misc/cpp/main.cpp description: Add str() to Variable
> > >>>>> interface (in C++) and overload info() to accept a Variable,
> > >>>>> printing the output of str().
> > >>>>
> > >>>> The function
> > >>>>
> > >>>>      void info(const Variable& variable);
> > >>>>
> > >>>> has caused a problem when compiling the Python wrappers,
> > >>>> dolfin/swig/cpp_wrap.cc: In function ‘PyObject*
> > >>>> _wrap_info(PyObject*, PyObject*)’:
> > >>>> dolfin/swig/cpp_wrap.cc:27939: error: invalid conversion from ‘int’
> > >>>> to ‘PyObject*’
> > >>>> dolfin/swig/cpp_wrap.cc:27791: error: too many arguments to function
> > >>>> ‘PyObject* _wrap_info__SWIG_0(PyObject*, PyObject*)’
> > >>>> dolfin/swig/cpp_wrap.cc:27939: error: at this point in file
> > >>>> dolfin/swig/cpp_wrap.cc:27942: error: invalid conversion from ‘int’
> > >>>> to ‘PyObject*’
> > >>>> dolfin/swig/cpp_wrap.cc:27861: error: too many arguments to function
> > >>>> ‘PyObject* _wrap_info__SWIG_1(PyObject*, PyObject*)’
> > >>>> dolfin/swig/cpp_wrap.cc:27942: error: at this point in file
> > >>>> scons: *** [dolfin/swig/cpp_wrap.os] Error 1
> > >>>>
> > >>>>  From a quick inspection, I don't see what the problem is.
> > >>>
> > >>> I think swig has some problems with overloading functions with
> > >>> variable number of parameters.
> > >>
> > >> I don't particularly like the functions with a variable number of
> > >> parameters (those using the ellipses (...)). Can we avoid using them?
> > >> Can we make use of ostringstream instead?
> > >
> > > We could do that to some extent, but the current implementation has
> > > some uses:
> >
> > It looks like
> >
> >      http://www.boost.org/doc/libs/1_39_0/libs/format/doc/format.html
> >
> > might preserve the syntax but avoid using the ellipses (...).
> >
> > Garth
>
> Yes, but it does not address any of the issues (1-3) below as far as I
> can see.

I cannot see what using boost::format for the input to the logging functions 
has anything to do with the issues listed under 1-3.

We could change the signatures of the logging functions to take a 
boost::format instance instead of the (std::string msg, ...) that is now.

Then we would have:

  debug(format("Jada %1, %2")%"bada"%100);

instead of:

  debug("jada %s, %d","bada",100);

Johan


Follow ups

References