17 #ifndef _TBB_observer_proxy_H    18 #define _TBB_observer_proxy_H    20 #if __TBB_SCHEDULER_OBSERVER    35     typedef aligned_space<spin_rw_mutex>  my_mutex_type;
    38     observer_proxy* my_head;
    41     observer_proxy* my_tail;
    44     my_mutex_type my_mutex;
    51     inline static void remove_ref_fast( observer_proxy*& 
p );
    54     void do_notify_entry_observers( observer_proxy*& 
last, 
bool worker );
    57     void do_notify_exit_observers( observer_proxy* 
last, 
bool worker );
    60     observer_list () : my_head(NULL), my_tail(NULL) {}
    67     void insert ( observer_proxy* 
p );
    70     void remove ( observer_proxy* 
p );
    74     void remove_ref( observer_proxy* 
p );
    77     typedef spin_rw_mutex::scoped_lock scoped_lock;
    82     bool empty ()
 const { 
return my_head == NULL; }
    87     inline void notify_entry_observers( observer_proxy*& 
last, 
bool worker );
    90     inline void notify_exit_observers( observer_proxy*& 
last, 
bool worker );
    97 class observer_proxy {
    98     friend class task_scheduler_observer_v3;
    99     friend class observer_list;
   104     atomic<int> my_ref_count;
   106     observer_list* my_list;
   109     observer_proxy* my_next;
   112     observer_proxy* my_prev;
   114     task_scheduler_observer_v3* my_observer;
   118 #if __TBB_ARENA_OBSERVER   119     interface6::task_scheduler_observer* get_v6_observer();
   121 #if __TBB_ARENA_OBSERVER   126     observer_proxy( task_scheduler_observer_v3& );
   133     observer_proxy& operator = ( 
const observer_proxy& );
   136 inline void observer_list::remove_ref_fast( observer_proxy*& 
p ) {
   137     if( 
p->my_observer ) {
   139         int r = --
p->my_ref_count;
   147 inline void observer_list::notify_entry_observers( observer_proxy*& 
last, 
bool worker ) {
   148     if ( 
last == my_tail )
   150     do_notify_entry_observers( 
last, worker );
   153 inline void observer_list::notify_exit_observers( observer_proxy*& 
last, 
bool worker ) {
   157     do_notify_exit_observers( 
last, worker );
   162 extern padded<observer_list> the_global_observer_list;
 
spin_rw_mutex_v3 spin_rw_mutex
 
auto last(Container &c) -> decltype(begin(c))
 
void const char const char int ITT_FORMAT __itt_group_sync p
 
#define __TBB_ASSERT_EX(predicate, comment)
"Extended" version is useful to suppress warnings if a variable is only used with an assert
 
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.