Boost logo

Boost Users :

Subject: Re: [Boost-users] [Review] Phoenix V3: mini-review starts February 19th
From: Thomas Heller (thom.heller_at_[hidden])
Date: 2011-02-27 07:13:56


On Saturday, February 26, 2011 11:28:58 PM alfC wrote:
> On Feb 25, 11:57 pm, Thomas Heller <thom.hel..._at_[hidden]> wrote:
> > On Saturday, February 26, 2011 08:49:25 AM alfC wrote:
> > > On Jan 31, 5:43 pm, "Hartmut Kaiser" <hartmut.kai..._at_[hidden]> wrote:
> > > > Hi List,
> > > >
> > > > PhoenixV3 is nearing its completion.
> > > >
> > > > With the port to Boost.Proto we tried to address the outstanding
> > > > issues of the review and would like to announce that
> > > > themini-review will start on February 19th.
> > >
> > > Thank you for the new version of Phoenix-3. I wonder if things like
> > > phoenix-expression matching is now possible as "promised" in this
> > >
> > > thread:
> > >http://lists.boost.org/boost-users/2010/05/59491.php
> >
> > Yes, stuff like this could be indeed made possible.
> > Though, I don't see where phoenix comes into the game in the examples
> > in this thread.
>
> I was doing things like this with Phoenix2 by hacking the internals:
>
> in a function call like this
>
> integral( 'arbitrary phoenix expression' , interval(2., 4.));
>
> I was matching, first that the passed expresion is of the form #1/
> ( phoenix::_1 - #2), if so it checked that #2 is a 'double-type'
> value, then extracted that value and then passed the whole thing to a
> numerical intergrator that handle functions with sigularities at the
> value of #2. If the expression didn't match then a generic integrator
> is called.

Nothing easier than that, no need to hack (more or less) undocumented
internals of the library. Every phoenix expression can be matched with
proto's grammar matching facilities:

struct singularity :
    proto::when<
        proto::divides<
            proto::_
          , proto::minus<
                phoenix::expression::argument<1>
              , proto::_
>
>
      , proto::_value(proto::_right(proto::_right))
>
{};

Match arbitratry expressions with proto::matches ... call the transform to
get the singularity, etc.

> Thanks,
> Alfredo



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net