Subject: Re: [boost] [msm]how to distinguish region ids?
From: Christophe Henry (christophe.j.henry_at_[hidden])
Date: 2011-06-22 13:37:05


>> The region ids are numbered in the order of the initial_state typedef:
>>
>> typedef boost::mpl::vector<Start1,Start2> initial_state;
>>
>> Start1 will be the initial state of the first region (id 0), Start2 the
>> initial state of the second region (id 1).
>
> Thanks, I understand.
> I believe if I pass the out of range value then compile error should
> occur.
> And I tested.
> 0 and 1 are OK. (expected)
> -1 is NG. (expected)
> But 2 is OK. (unexpected)
> 3 or more is NG. (expected)
>
> I'm not expert of msm's implementation.
>
> I suspect that
>
> state_machine.hpp:(2256)
> BOOST_STATIC_ASSERT(find_region_id<typename
> StateType::wrapped_entry>::region_index <= nr_regions::value);
>
> should be
>
> BOOST_STATIC_ASSERT(find_region_id<typename
> StateType::wrapped_entry>::region_index < nr_regions::value);

Hi Takatoshi,

Clearly you're right and it's a beginner's mistake. Thanks, I'll fix this
immediately.

>> Alternatively, you can omit the id and let MSM build a graph using
>> mpl_graph
>> and find this out for you (which will work if your pseudo entry is
>> somehow
>> connected to the initial state). Please note however that there is a
>> compile-time cost for this.
>
>Great!! This is the function that I really want to.

Good :)
You're probably one of the first to use this new feature so your experience
with it will be very useful.
Please let me know how it went.

> P.S.We met BoosoCon2010, how are you?

I remember. We spoke at the end of the talk, right? I'm doing great, thanks
:)
I remember you required some feature but I forgot what it was. Was it this
automatic region id calculation of pseudo entry state?

Christophe