Boost logo

Boost Users :

From: Andreas Huber (ahd6974-spamboostorgtrap_at_[hidden])
Date: 2007-11-14 08:55:14


Hi Philippe

> I have a method in which I want to post/process an event. The thing is, this
> method can be called from outside the state machine (so I need to call
> process_event), or indirectly by a reaction of the state machine (in this case
> I must call post_event since process_event is not reentrant).
>
> I don't want to write 2 distinct methods to do this (one that calls post, and
> the other process), I would much rather prefer adding a 'if' in my method that
> tells me if I have to call process_event or post_event (if I'm being called
> indirectly by the state machine or not). Is there a way to do this with
> statechart ?

No, not currently. How about implementing two functions and having them
delegate to the same implementation:

class MyMachine : ...
{
  public:
    void DoX() { DoXImpl(false); }
    void DoXPost() { DoXImpl(true); }

  private:
    void DoXImpl(bool post)
    {
      ...

      if (post) { ... } else { ... }

      ...
    }
};

Yes, it is slightly more work than if there was a state_machine::is_processing()
function. I'm just not sure whether your use case is sufficiently common to
justify adding such a function. Maybe you could provide more details so that I
understand it better?

Thanks & Regards,

-- 
Andreas Huber
When replying by private email, please remove the words spam and trap
from the address shown in the header. 

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