$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: David Abrahams (david.abrahams_at_[hidden])
Date: 2002-01-19 14:31:50
----- Original Message -----
From: "bill_kempf" <williamkempf_at_[hidden]>
> Yes, plausible, but I don't see how this scenario requires a heap
> based approach.
>
> void operation()
> {
> // initial stuff
> {
> disable_cancellation protect;
> // loop
> }
> // other stuff
> }
>
> Can you illustrate what you were thinking in code?
I was thinking of something more like this. The idea is to avoid throwing
exceptions once we start modifying the resource:
// use this with std::accumulate
struct operator
{
template <class T>
int operator()(T& x, int checksum) const
{
wait_for_condition(x.cv()); // might cancel
if (satisfies_some_condition(x))
{
if (disable_cancellation.get() == 0)
{
// about to start modifying. Now we'd better not throw
m_protector.reset(new disable_cancellation);
}
modify(x);
}
// Haven't started modifying sequence; OK to cancel
checksum += crc(x);
return checksum;
}
std::auto_ptr<wait_for_condition> m_protector;
};