MCPcopy Create free account
hub / github.com/cameron314/concurrentqueue / internal_swap

Method internal_swap

benchmarks/tbb/concurrent_vector.cpp:603–627  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

601}
602
603void concurrent_vector_base_v3::internal_swap(concurrent_vector_base_v3& v)
604{
605 size_type my_sz = my_early_size.load<acquire>();
606 size_type v_sz = v.my_early_size.load<relaxed>();
607 if(!my_sz && !v_sz) return;
608
609 bool my_was_short = (my_segment.load<relaxed>() == my_storage);
610 bool v_was_short = (v.my_segment.load<relaxed>() == v.my_storage);
611
612 //In C++11, this would be: swap(my_storage, v.my_storage);
613 for (int i=0; i < pointers_per_short_table; ++i){
614 swap(my_storage[i], v.my_storage[i]);
615 }
616 tbb::internal::swap<relaxed>(my_first_block, v.my_first_block);
617 tbb::internal::swap<relaxed>(my_segment, v.my_segment);
618 if (my_was_short){
619 v.my_segment.store<relaxed>(v.my_storage);
620 }
621 if(v_was_short){
622 my_segment.store<relaxed>(my_storage);
623 }
624
625 my_early_size.store<relaxed>(v_sz);
626 v.my_early_size.store<release>(my_sz);
627}
628
629} // namespace internal
630

Callers 2

concurrent_queueMethod · 0.45

Calls 1

swapFunction · 0.70

Tested by

no test coverage detected