| 605 | } |
| 606 | |
| 607 | void pipeline::remove_filter( filter& filter_ ) { |
| 608 | __TBB_ASSERT( filter_.prev_filter_in_pipeline!=filter::not_in_pipeline(), "filter not part of pipeline" ); |
| 609 | __TBB_ASSERT( filter_.next_filter_in_pipeline!=filter::not_in_pipeline(), "filter not part of pipeline" ); |
| 610 | __TBB_ASSERT( !end_counter, "invocation of remove_filter on running pipeline" ); |
| 611 | if (&filter_ == filter_list) |
| 612 | filter_list = filter_.next_filter_in_pipeline; |
| 613 | else { |
| 614 | __TBB_ASSERT( filter_.prev_filter_in_pipeline, "filter list broken?" ); |
| 615 | filter_.prev_filter_in_pipeline->next_filter_in_pipeline = filter_.next_filter_in_pipeline; |
| 616 | } |
| 617 | if (&filter_ == filter_end) |
| 618 | filter_end = filter_.prev_filter_in_pipeline; |
| 619 | else { |
| 620 | __TBB_ASSERT( filter_.next_filter_in_pipeline, "filter list broken?" ); |
| 621 | filter_.next_filter_in_pipeline->prev_filter_in_pipeline = filter_.prev_filter_in_pipeline; |
| 622 | } |
| 623 | if( internal::input_buffer* b = filter_.my_input_buffer ) { |
| 624 | delete b; |
| 625 | filter_.my_input_buffer = NULL; |
| 626 | } |
| 627 | filter_.next_filter_in_pipeline = filter_.prev_filter_in_pipeline = filter::not_in_pipeline(); |
| 628 | if ( (filter_.my_filter_mode & filter::version_mask) >= __TBB_PIPELINE_VERSION(5) ) |
| 629 | filter_.next_segment = NULL; |
| 630 | filter_.my_pipeline = NULL; |
| 631 | } |
| 632 | |
| 633 | void pipeline::run( size_t max_number_of_live_tokens |
| 634 | #if __TBB_TASK_GROUP_CONTEXT |