Boost logo

Boost :

From: Batov, Vladimir (Vladimir.Batov_at_[hidden])
Date: 2004-08-31 00:57:46


In my spare time I've been fooling around with an implementation of an
infrastructure that would allow workflow to be configured at run-time.

A well-defined process flow is clearly easier to configure/implement at
compile-time using the conventional means (coding). Say,

bool
my_process_flow()
{
        if (call_a() == success/true)
        {
                return call_b();
        }
        else
        {
                return call_c();
        }
}

However, to be able to quickly adjust to changing customer requirements
and/or procedures we might decide to provide a set of building blocks
(like call_a, call_b, call_c) that could be assembled into a certain
process flow at run-time. Maybe even give that ability to the customer
themselves through, say, GUI interface.

So, the infrastructure boils down to an Activity class that has an
operation associated with it and can have two sub-activities to be
called when the operation succeeds or fails. For example,

// Create an activity with call_a() as an operation.
Activity a(call_a);
// Register call_b to be called when call_a succeeds.
a.success() = call_b;
// Regiter call_c to be called when call_a fails.
a.failure() = call_b;

call_a, call_b, call_c can be Activity instances themselves. So, we are
building hierarchical tree-like structure to represent a certain process
flow.

We can easily support concurrent activities like

a.success() = Concurrent(call_b)(call_c);

Loops can be supported in a similar fashion (via pre-defined functiors).
All mostly based on boost::function (a very handy gadget I must say.
Kudos to the authors).

Now after such a long and boring introduction to my actual question. :-)
Is there any interest in having/developing such an infrastructure under
the boost umbrella? Any input is welcomed even if you think it is a
crappy idea.

Best,
Vladimir.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk