| 133 | } |
| 134 | |
| 135 | void observer_list::remove ( observer_proxy* p ) { |
| 136 | __TBB_ASSERT( my_head, "Attempt to remove an item from an empty list" ); |
| 137 | __TBB_ASSERT( !my_tail->my_next, "Last item's my_next must be NULL" ); |
| 138 | if( p == my_tail ) { |
| 139 | __TBB_ASSERT( !p->my_next, NULL ); |
| 140 | my_tail = p->my_prev; |
| 141 | } |
| 142 | else { |
| 143 | __TBB_ASSERT( p->my_next, NULL ); |
| 144 | p->my_next->my_prev = p->my_prev; |
| 145 | } |
| 146 | if ( p == my_head ) { |
| 147 | __TBB_ASSERT( !p->my_prev, NULL ); |
| 148 | my_head = p->my_next; |
| 149 | } |
| 150 | else { |
| 151 | __TBB_ASSERT( p->my_prev, NULL ); |
| 152 | p->my_prev->my_next = p->my_next; |
| 153 | } |
| 154 | __TBB_ASSERT( (my_head && my_tail) || (!my_head && !my_tail), NULL ); |
| 155 | } |
| 156 | |
| 157 | void observer_list::remove_ref( observer_proxy* p ) { |
| 158 | int r = p->my_ref_count; |
no outgoing calls