$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: E. Gladyshev (eegg_at_[hidden])
Date: 2004-03-08 22:46:21
----- Original Message ----- 
From: "Douglas Gregor" <gregod_at_[hidden]>
To: <boost_at_[hidden]>
Sent: Monday, March 08, 2004 6:42 AM
Subject: Re: [boost] enumeration interface for boost::signals
[...]
> As for the capturing, you can use groups:
> 
> const int capture = -100000; // big negative number
> {
>   boost::signals::scoped_connected captured = 
>     sig.connect(capture, slot_to_capture);
>   // slot_to_capture always executes first, so it gets all the events.
> } // end of scope, slot_to_capture disappears
Good idea!
However I don't want to require the slot 
itself to be aware whether it 
is capturing or not.
I guess I can try something like this:
struct server
{
  typedef boost::signals::signal< void (event), until_true > signals;
  signals sig_;
  struct capture_wrapper
  {
     signals::slot_type s_;
     capture_wrapper( slot s ) : s_(s) {}
     bool operator()( event e )
     {
        //how do I make the call?
        s_(e); //is it ok?
        return true;  //stop propagation
     }
  }
  
  void capture( typename signals::slot_type s )
  {
     capture_ = sig.connect( capture, capture_wrapper(s) );
  }
  void remove_capture()
  {
    capture_.disconnect();
  }
  boost::signals::scoped_connected capture_;
};
> 
> If slots had a well-defined order, everything would be peachy. 
> 
Yep.
As for the ordering, I think the 
SIGNALS_GROUP_TOP/SIGNALS_GROUP_BOTTOM flags should work just fine.
We definitely need this feature.
I also need an efficient way for accessing slots randomly.
For instance some of the Win32 listbox messages 
have item indexes. I'd like to implement each 
item as a slot, but I need a way to access 
the slots based on the item index, so I could call
just the right slot.
listboxes can contain a lot of items so propagating
the messages to all items is not an option.
Eugene