On 27/12/10 11:02, Maxim Yanchenko wrote:
Hi Eric and other gurus,

Sorry in advance for a long post.

I'm making a mini-language for message processing in our system.
It's currently implemented in terms of overloaded functions with
enable_if<match<Grammar>>  dispatching, but now I see that
Dont. this increases copiel time and provide unclear error. Accept anykind of expression adn use matches in a
static_assert with a clear error ID.

(a) I'm reimplementing Phoenix which is not on Proto yet in Boost 1.45.0 (that's
how I found this mailing list). It would be great to reuse what Phoenix has;
Isn't it in trunk already Thomas ?
(b) I need to do several things on expressions and I don't know what would be
the best way to approach them all.

Here is a background.
Every message is a multiset of named fields (i.e. is a multimap
FieldName->FieldValue).
I have a distinct type for each FieldName, so I can do some multiprogramming on
sets of FieldNames, like making generating a structure that will hold values of
the fields I need, by list of field names (e.g. fusion::map).

While processing a message, I can do some checks like if particular field is
present, if it's equal or not to some value, if it matches a predicate etc.
They are implemented as a set of predicate functions "condition" like

   template<  class Msg, class Expr>
   typename boost::enable_if<  proto::matches<Expr, proto::equal_to<  proto::_,
proto::_>  >, bool>::type
   condition( const Msg&  msg, const Expr&  expr )

with various condition grammars in enable_if<matches<...>>

Again, use matches inside the function body.
(a) everything runs on enable_if. I expect it to become more concise and clean
if I use either transforms or contexts.
You need none. Put your grammar into a domain with a proper context and proto will check operators overload for you.
(b) a lot of Phoenix is basically reimplemented from scratch (thanks Eric, with
Proto it was very easy to do!). But I don't know how to extend Phoenix so it
could work in my expressions with my things like "any_field", "optional",
"mandatory" etc.
Better see what Thomas has up his sleeves in Phoenix.

_______________________________________________
proto mailing list
[email protected]
http://lists.boost.org/mailman/listinfo.cgi/proto

Reply via email to