include/boost/corosio/detail/intrusive.hpp

100.0% Lines (103 / 103) 87.3% Functions (137 / 157)
intrusive.hpp
f(x) Functions (157)
Function Calls Lines Blocks
boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_local_datagram_socket>::intrusive_list() :47 164x 100.0% 100.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_local_stream_acceptor>::intrusive_list() :47 98x 100.0% 100.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_local_stream_socket>::intrusive_list() :47 216x 100.0% 100.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_tcp_acceptor>::intrusive_list() :47 718x 100.0% 100.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_tcp_socket>::intrusive_list() :47 870x 100.0% 100.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_udp_socket>::intrusive_list() :47 224x 100.0% 100.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_random_access_file::raf_op>::intrusive_list() :47 438x 100.0% 100.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_random_access_file>::intrusive_list() :47 328x 100.0% 100.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_resolver>::intrusive_list() :47 134x 100.0% 100.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_signal>::intrusive_list() :47 334x 100.0% 100.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_stream_file>::intrusive_list() :47 438x 100.0% 100.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_local_datagram_socket>::intrusive_list() :47 154x 100.0% 100.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_local_stream_acceptor>::intrusive_list() :47 92x 100.0% 100.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_local_stream_socket>::intrusive_list() :47 202x 100.0% 100.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_tcp_acceptor>::intrusive_list() :47 562x 100.0% 100.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_tcp_socket>::intrusive_list() :47 682x 100.0% 100.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_udp_socket>::intrusive_list() :47 302x 100.0% 100.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::timer::implementation>::intrusive_list() :47 4620x 100.0% 100.0% boost::corosio::detail::intrusive_list<(anonymous namespace)::list_item>::intrusive_list(boost::corosio::detail::intrusive_list<(anonymous namespace)::list_item>&&) :49 1x 100.0% 100.0% boost::corosio::detail::intrusive_list<(anonymous namespace)::list_item>::empty() const :61 12x 100.0% 100.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::(anonymous namespace)::pool_impl>::empty() const :61 4x 100.0% 100.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::(anonymous namespace)::self_ref_impl>::empty() const :61 0 0.0% 0.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_local_datagram_socket>::empty() const :61 0 0.0% 0.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_local_stream_acceptor>::empty() const :61 0 0.0% 0.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_local_stream_socket>::empty() const :61 0 0.0% 0.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_tcp_acceptor>::empty() const :61 0 0.0% 0.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_tcp_socket>::empty() const :61 0 0.0% 0.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_udp_socket>::empty() const :61 0 0.0% 0.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_random_access_file::raf_op>::empty() const :61 0 0.0% 0.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_random_access_file>::empty() const :61 0 0.0% 0.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_resolver>::empty() const :61 0 0.0% 0.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_signal>::empty() const :61 0 0.0% 0.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_stream_file>::empty() const :61 0 0.0% 0.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_local_datagram_socket>::empty() const :61 0 0.0% 0.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_local_stream_acceptor>::empty() const :61 0 0.0% 0.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_local_stream_socket>::empty() const :61 0 0.0% 0.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_tcp_acceptor>::empty() const :61 0 0.0% 0.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_tcp_socket>::empty() const :61 0 0.0% 0.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_udp_socket>::empty() const :61 0 0.0% 0.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::timer::implementation>::empty() const :61 0 0.0% 0.0% boost::corosio::detail::intrusive_list<(anonymous namespace)::list_item>::front() const :67 6x 100.0% 100.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::(anonymous namespace)::pool_impl>::push_front(boost::corosio::detail::(anonymous namespace)::pool_impl*) :72 5x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::(anonymous namespace)::self_ref_impl>::push_front(boost::corosio::detail::(anonymous namespace)::self_ref_impl*) :72 0 0.0% 0.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_local_datagram_socket>::push_front(boost::corosio::detail::epoll_local_datagram_socket*) :72 138x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_local_stream_acceptor>::push_front(boost::corosio::detail::epoll_local_stream_acceptor*) :72 89x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_local_stream_socket>::push_front(boost::corosio::detail::epoll_local_stream_socket*) :72 187x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_tcp_acceptor>::push_front(boost::corosio::detail::epoll_tcp_acceptor*) :72 412x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_tcp_socket>::push_front(boost::corosio::detail::epoll_tcp_socket*) :72 8127x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_udp_socket>::push_front(boost::corosio::detail::epoll_udp_socket*) :72 156x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_random_access_file::raf_op>::push_front(boost::corosio::detail::posix_random_access_file::raf_op*) :72 494x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_random_access_file>::push_front(boost::corosio::detail::posix_random_access_file*) :72 215x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_resolver>::push_front(boost::corosio::detail::posix_resolver*) :72 129x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_signal>::push_front(boost::corosio::detail::posix_signal*) :72 252x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_stream_file>::push_front(boost::corosio::detail::posix_stream_file*) :72 335x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_local_datagram_socket>::push_front(boost::corosio::detail::select_local_datagram_socket*) :72 153x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_local_stream_acceptor>::push_front(boost::corosio::detail::select_local_stream_acceptor*) :72 85x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_local_stream_socket>::push_front(boost::corosio::detail::select_local_stream_socket*) :72 188x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_tcp_acceptor>::push_front(boost::corosio::detail::select_tcp_acceptor*) :72 334x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_tcp_socket>::push_front(boost::corosio::detail::select_tcp_socket*) :72 6569x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_udp_socket>::push_front(boost::corosio::detail::select_udp_socket*) :72 217x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::timer::implementation>::push_front(boost::corosio::detail::timer::implementation*) :72 2391x 100.0% 80.0% boost::corosio::detail::intrusive_list<(anonymous namespace)::list_item>::push_back((anonymous namespace)::list_item*) :84 19x 100.0% 100.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::(anonymous namespace)::pool_impl>::push_back(boost::corosio::detail::(anonymous namespace)::pool_impl*) :84 8x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::(anonymous namespace)::self_ref_impl>::push_back(boost::corosio::detail::(anonymous namespace)::self_ref_impl*) :84 1x 88.9% 50.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_local_datagram_socket>::push_back(boost::corosio::detail::epoll_local_datagram_socket*) :84 175x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_local_stream_acceptor>::push_back(boost::corosio::detail::epoll_local_stream_acceptor*) :84 91x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_local_stream_socket>::push_back(boost::corosio::detail::epoll_local_stream_socket*) :84 220x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_tcp_acceptor>::push_back(boost::corosio::detail::epoll_tcp_acceptor*) :84 422x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_tcp_socket>::push_back(boost::corosio::detail::epoll_tcp_socket*) :84 8225x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_udp_socket>::push_back(boost::corosio::detail::epoll_udp_socket*) :84 200x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_random_access_file::raf_op>::push_back(boost::corosio::detail::posix_random_access_file::raf_op*) :84 494x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_random_access_file>::push_back(boost::corosio::detail::posix_random_access_file*) :84 219x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_resolver>::push_back(boost::corosio::detail::posix_resolver*) :84 132x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_signal>::push_back(boost::corosio::detail::posix_signal*) :84 258x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_stream_file>::push_back(boost::corosio::detail::posix_stream_file*) :84 339x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_local_datagram_socket>::push_back(boost::corosio::detail::select_local_datagram_socket*) :84 164x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_local_stream_acceptor>::push_back(boost::corosio::detail::select_local_stream_acceptor*) :84 87x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_local_stream_socket>::push_back(boost::corosio::detail::select_local_stream_socket*) :84 201x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_tcp_acceptor>::push_back(boost::corosio::detail::select_tcp_acceptor*) :84 343x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_tcp_socket>::push_back(boost::corosio::detail::select_tcp_socket*) :84 6631x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_udp_socket>::push_back(boost::corosio::detail::select_udp_socket*) :84 236x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::timer::implementation>::push_back(boost::corosio::detail::timer::implementation*) :84 17235x 100.0% 80.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::waiter_node>::push_back(boost::corosio::detail::waiter_node*) :84 20089x 100.0% 100.0% boost::corosio::detail::intrusive_list<(anonymous namespace)::list_item>::splice_back(boost::corosio::detail::intrusive_list<(anonymous namespace)::list_item>&) :96 3x 100.0% 100.0% boost::corosio::detail::intrusive_list<(anonymous namespace)::list_item>::pop_front() :115 14x 100.0% 100.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::(anonymous namespace)::pool_impl>::pop_front() :115 21x 100.0% 81.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::(anonymous namespace)::self_ref_impl>::pop_front() :115 4x 91.7% 62.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_local_datagram_socket>::pop_front() :115 439x 100.0% 81.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_local_stream_acceptor>::pop_front() :115 241x 100.0% 81.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_local_stream_socket>::pop_front() :115 566x 100.0% 81.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_tcp_acceptor>::pop_front() :115 1510x 100.0% 81.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_tcp_socket>::pop_front() :115 10037x 100.0% 81.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_udp_socket>::pop_front() :115 545x 100.0% 81.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_random_access_file::raf_op>::pop_front() :115 1115x 100.0% 81.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_random_access_file>::pop_front() :115 764x 100.0% 81.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_resolver>::pop_front() :115 332x 100.0% 81.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_signal>::pop_front() :115 778x 100.0% 81.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_stream_file>::pop_front() :115 1050x 100.0% 81.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_local_datagram_socket>::pop_front() :115 435x 100.0% 81.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_local_stream_acceptor>::pop_front() :115 228x 100.0% 81.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_local_stream_socket>::pop_front() :115 543x 100.0% 81.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_tcp_acceptor>::pop_front() :115 1196x 100.0% 81.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_tcp_socket>::pop_front() :115 8033x 100.0% 81.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_udp_socket>::pop_front() :115 721x 100.0% 81.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::timer::implementation>::pop_front() :115 9885x 100.0% 81.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::waiter_node>::pop_front() :115 308170x 100.0% 100.0% boost::corosio::detail::intrusive_list<(anonymous namespace)::list_item>::remove((anonymous namespace)::list_item*) :154 4x 100.0% 100.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::(anonymous namespace)::pool_impl>::remove(boost::corosio::detail::(anonymous namespace)::pool_impl*) :154 9x 92.3% 73.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::(anonymous namespace)::self_ref_impl>::remove(boost::corosio::detail::(anonymous namespace)::self_ref_impl*) :154 1x 30.8% 36.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_local_datagram_socket>::remove(boost::corosio::detail::epoll_local_datagram_socket*) :154 175x 92.3% 77.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_local_stream_acceptor>::remove(boost::corosio::detail::epoll_local_stream_acceptor*) :154 91x 84.6% 64.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_local_stream_socket>::remove(boost::corosio::detail::epoll_local_stream_socket*) :154 220x 92.3% 77.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_tcp_acceptor>::remove(boost::corosio::detail::epoll_tcp_acceptor*) :154 419x 92.3% 77.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_tcp_socket>::remove(boost::corosio::detail::epoll_tcp_socket*) :154 8222x 92.3% 77.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_udp_socket>::remove(boost::corosio::detail::epoll_udp_socket*) :154 200x 92.3% 77.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_random_access_file::raf_op>::remove(boost::corosio::detail::posix_random_access_file::raf_op*) :154 494x 84.6% 64.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_random_access_file>::remove(boost::corosio::detail::posix_random_access_file*) :154 217x 84.6% 64.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_resolver>::remove(boost::corosio::detail::posix_resolver*) :154 131x 84.6% 64.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_signal>::remove(boost::corosio::detail::posix_signal*) :154 252x 84.6% 64.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_stream_file>::remove(boost::corosio::detail::posix_stream_file*) :154 337x 84.6% 64.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_local_datagram_socket>::remove(boost::corosio::detail::select_local_datagram_socket*) :154 164x 92.3% 77.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_local_stream_acceptor>::remove(boost::corosio::detail::select_local_stream_acceptor*) :154 87x 84.6% 64.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_local_stream_socket>::remove(boost::corosio::detail::select_local_stream_socket*) :154 201x 92.3% 77.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_tcp_acceptor>::remove(boost::corosio::detail::select_tcp_acceptor*) :154 341x 92.3% 77.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_tcp_socket>::remove(boost::corosio::detail::select_tcp_socket*) :154 6629x 92.3% 77.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::select_udp_socket>::remove(boost::corosio::detail::select_udp_socket*) :154 236x 92.3% 77.0% boost::corosio::detail::intrusive_list<boost::corosio::detail::timer::implementation>::remove(boost::corosio::detail::timer::implementation*) :154 17235x 92.3% 77.0% void boost::corosio::detail::intrusive_list<(anonymous namespace)::list_item>::for_each<intrusive_test::testListForEach()::{lambda((anonymous namespace)::list_item*)#1}>(intrusive_test::testListForEach()::{lambda((anonymous namespace)::list_item*)#1}) :175 1x 100.0% 100.0% void boost::corosio::detail::intrusive_list<boost::corosio::detail::(anonymous namespace)::pool_impl>::for_each<boost::corosio::detail::object_pool_test::run()::{lambda(boost::corosio::detail::(anonymous namespace)::pool_impl*)#1}>(boost::corosio::detail::object_pool_test::run()::{lambda(boost::corosio::detail::(anonymous namespace)::pool_impl*)#1}) :175 1x 100.0% 88.0% void boost::corosio::detail::intrusive_list<boost::corosio::detail::(anonymous namespace)::self_ref_impl>::for_each<boost::corosio::detail::object_pool_test::run()::{lambda(boost::corosio::detail::(anonymous namespace)::self_ref_impl*)#1}>(boost::corosio::detail::object_pool_test::run()::{lambda(boost::corosio::detail::(anonymous namespace)::self_ref_impl*)#1}) :175 1x 100.0% 88.0% void boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_local_datagram_socket>::for_each<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::epoll_local_datagram_service, boost::corosio::detail::local_datagram_service, boost::corosio::detail::epoll_scheduler, boost::corosio::detail::epoll_local_datagram_socket>::shutdown()::{lambda(boost::corosio::detail::epoll_local_datagram_socket*)#1}>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::epoll_local_datagram_service, boost::corosio::detail::local_datagram_service, boost::corosio::detail::epoll_scheduler, boost::corosio::detail::epoll_local_datagram_socket>::shutdown()::{lambda(boost::corosio::detail::epoll_local_datagram_socket*)#1}) :175 82x 100.0% 88.0% void boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_local_stream_acceptor>::for_each<boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::epoll_local_stream_acceptor_service, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::epoll_scheduler, boost::corosio::detail::epoll_local_stream_acceptor, boost::corosio::detail::epoll_local_stream_service>::shutdown()::{lambda(boost::corosio::detail::epoll_local_stream_acceptor*)#1}>(boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::epoll_local_stream_acceptor_service, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::epoll_scheduler, boost::corosio::detail::epoll_local_stream_acceptor, boost::corosio::detail::epoll_local_stream_service>::shutdown()::{lambda(boost::corosio::detail::epoll_local_stream_acceptor*)#1}) :175 49x 100.0% 88.0% void boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_local_stream_socket>::for_each<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::epoll_local_stream_service, boost::corosio::detail::local_stream_service, boost::corosio::detail::epoll_scheduler, boost::corosio::detail::epoll_local_stream_socket>::shutdown()::{lambda(boost::corosio::detail::epoll_local_stream_socket*)#1}>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::epoll_local_stream_service, boost::corosio::detail::local_stream_service, boost::corosio::detail::epoll_scheduler, boost::corosio::detail::epoll_local_stream_socket>::shutdown()::{lambda(boost::corosio::detail::epoll_local_stream_socket*)#1}) :175 108x 100.0% 88.0% void boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_tcp_acceptor>::for_each<boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::epoll_tcp_acceptor_service, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::epoll_scheduler, boost::corosio::detail::epoll_tcp_acceptor, boost::corosio::detail::epoll_tcp_service>::shutdown()::{lambda(boost::corosio::detail::epoll_tcp_acceptor*)#1}>(boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::epoll_tcp_acceptor_service, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::epoll_scheduler, boost::corosio::detail::epoll_tcp_acceptor, boost::corosio::detail::epoll_tcp_service>::shutdown()::{lambda(boost::corosio::detail::epoll_tcp_acceptor*)#1}) :175 359x 100.0% 88.0% void boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_tcp_socket>::for_each<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::epoll_tcp_service, boost::corosio::detail::tcp_service, boost::corosio::detail::epoll_scheduler, boost::corosio::detail::epoll_tcp_socket>::shutdown()::{lambda(boost::corosio::detail::epoll_tcp_socket*)#1}>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::epoll_tcp_service, boost::corosio::detail::tcp_service, boost::corosio::detail::epoll_scheduler, boost::corosio::detail::epoll_tcp_socket>::shutdown()::{lambda(boost::corosio::detail::epoll_tcp_socket*)#1}) :175 435x 100.0% 88.0% void boost::corosio::detail::intrusive_list<boost::corosio::detail::epoll_udp_socket>::for_each<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::epoll_udp_service, boost::corosio::detail::udp_service, boost::corosio::detail::epoll_scheduler, boost::corosio::detail::epoll_udp_socket>::shutdown()::{lambda(boost::corosio::detail::epoll_udp_socket*)#1}>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::epoll_udp_service, boost::corosio::detail::udp_service, boost::corosio::detail::epoll_scheduler, boost::corosio::detail::epoll_udp_socket>::shutdown()::{lambda(boost::corosio::detail::epoll_udp_socket*)#1}) :175 112x 100.0% 88.0% void boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_random_access_file::raf_op>::for_each<boost::corosio::detail::posix_random_access_file::cancel()::{lambda(boost::corosio::detail::posix_random_access_file::raf_op*)#1}>(boost::corosio::detail::posix_random_access_file::cancel()::{lambda(boost::corosio::detail::posix_random_access_file::raf_op*)#1}) :175 638x 100.0% 88.0% void boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_random_access_file>::for_each<boost::corosio::detail::posix_random_access_file_service::shutdown()::{lambda(boost::corosio::detail::posix_random_access_file*)#1}>(boost::corosio::detail::posix_random_access_file_service::shutdown()::{lambda(boost::corosio::detail::posix_random_access_file*)#1}) :175 164x 100.0% 88.0% void boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_resolver>::for_each<boost::corosio::detail::posix_resolver_service::shutdown()::{lambda(boost::corosio::detail::posix_resolver*)#1}>(boost::corosio::detail::posix_resolver_service::shutdown()::{lambda(boost::corosio::detail::posix_resolver*)#1}) :175 67x 100.0% 88.0% void boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_signal>::for_each<boost::corosio::detail::posix_signal_service::shutdown()::{lambda(boost::corosio::detail::posix_signal*)#1}>(boost::corosio::detail::posix_signal_service::shutdown()::{lambda(boost::corosio::detail::posix_signal*)#1}) :175 167x 100.0% 88.0% void boost::corosio::detail::intrusive_list<boost::corosio::detail::posix_stream_file>::for_each<boost::corosio::detail::posix_stream_file_service::shutdown()::{lambda(boost::corosio::detail::posix_stream_file*)#1}>(boost::corosio::detail::posix_stream_file_service::shutdown()::{lambda(boost::corosio::detail::posix_stream_file*)#1}) :175 219x 100.0% 88.0% void boost::corosio::detail::intrusive_list<boost::corosio::detail::select_local_datagram_socket>::for_each<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_local_datagram_service, boost::corosio::detail::local_datagram_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_local_datagram_socket>::shutdown()::{lambda(boost::corosio::detail::select_local_datagram_socket*)#1}>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_local_datagram_service, boost::corosio::detail::local_datagram_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_local_datagram_socket>::shutdown()::{lambda(boost::corosio::detail::select_local_datagram_socket*)#1}) :175 77x 100.0% 88.0% void boost::corosio::detail::intrusive_list<boost::corosio::detail::select_local_stream_acceptor>::for_each<boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::select_local_stream_acceptor_service, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::detail::select_local_stream_service>::shutdown()::{lambda(boost::corosio::detail::select_local_stream_acceptor*)#1}>(boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::select_local_stream_acceptor_service, boost::corosio::detail::local_stream_acceptor_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::detail::select_local_stream_service>::shutdown()::{lambda(boost::corosio::detail::select_local_stream_acceptor*)#1}) :175 46x 100.0% 88.0% void boost::corosio::detail::intrusive_list<boost::corosio::detail::select_local_stream_socket>::for_each<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_local_stream_service, boost::corosio::detail::local_stream_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_local_stream_socket>::shutdown()::{lambda(boost::corosio::detail::select_local_stream_socket*)#1}>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_local_stream_service, boost::corosio::detail::local_stream_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_local_stream_socket>::shutdown()::{lambda(boost::corosio::detail::select_local_stream_socket*)#1}) :175 101x 100.0% 88.0% void boost::corosio::detail::intrusive_list<boost::corosio::detail::select_tcp_acceptor>::for_each<boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::select_tcp_acceptor_service, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_tcp_acceptor, boost::corosio::detail::select_tcp_service>::shutdown()::{lambda(boost::corosio::detail::select_tcp_acceptor*)#1}>(boost::corosio::detail::reactor_acceptor_service<boost::corosio::detail::select_tcp_acceptor_service, boost::corosio::detail::tcp_acceptor_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_tcp_acceptor, boost::corosio::detail::select_tcp_service>::shutdown()::{lambda(boost::corosio::detail::select_tcp_acceptor*)#1}) :175 281x 100.0% 88.0% void boost::corosio::detail::intrusive_list<boost::corosio::detail::select_tcp_socket>::for_each<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_tcp_service, boost::corosio::detail::tcp_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_tcp_socket>::shutdown()::{lambda(boost::corosio::detail::select_tcp_socket*)#1}>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_tcp_service, boost::corosio::detail::tcp_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_tcp_socket>::shutdown()::{lambda(boost::corosio::detail::select_tcp_socket*)#1}) :175 341x 100.0% 88.0% void boost::corosio::detail::intrusive_list<boost::corosio::detail::select_udp_socket>::for_each<boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_udp_service, boost::corosio::detail::udp_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_udp_socket>::shutdown()::{lambda(boost::corosio::detail::select_udp_socket*)#1}>(boost::corosio::detail::reactor_socket_service<boost::corosio::detail::select_udp_service, boost::corosio::detail::udp_service, boost::corosio::detail::select_scheduler, boost::corosio::detail::select_udp_socket>::shutdown()::{lambda(boost::corosio::detail::select_udp_socket*)#1}) :175 151x 100.0% 88.0% void boost::corosio::detail::intrusive_list<boost::corosio::detail::timer::implementation>::for_each<boost::corosio::detail::timer_service::shutdown()::{lambda(boost::corosio::detail::timer::implementation*)#1}>(boost::corosio::detail::timer_service::shutdown()::{lambda(boost::corosio::detail::timer::implementation*)#1}) :175 2310x 100.0% 88.0% boost::corosio::detail::intrusive_queue<boost::corosio::detail::pool_work_item>::intrusive_queue() :217 2313x 100.0% 100.0% boost::corosio::detail::intrusive_queue<(anonymous namespace)::queue_item>::intrusive_queue(boost::corosio::detail::intrusive_queue<(anonymous namespace)::queue_item>&&) :219 1x 100.0% 100.0% boost::corosio::detail::intrusive_queue<(anonymous namespace)::queue_item>::empty() const :231 10x 100.0% 100.0% boost::corosio::detail::intrusive_queue<boost::corosio::detail::pool_work_item>::empty() const :231 1341x 100.0% 100.0% boost::corosio::detail::intrusive_queue<(anonymous namespace)::queue_item>::push((anonymous namespace)::queue_item*) :236 9x 100.0% 100.0% boost::corosio::detail::intrusive_queue<boost::corosio::detail::pool_work_item>::push(boost::corosio::detail::pool_work_item*) :236 825x 100.0% 100.0% boost::corosio::detail::intrusive_queue<(anonymous namespace)::queue_item>::splice(boost::corosio::detail::intrusive_queue<(anonymous namespace)::queue_item>&) :246 3x 100.0% 100.0% boost::corosio::detail::intrusive_queue<(anonymous namespace)::queue_item>::pop() :259 10x 100.0% 100.0% boost::corosio::detail::intrusive_queue<boost::corosio::detail::pool_work_item>::pop() :259 3436x 100.0% 100.0%
Line TLA Hits Source Code
1 //
2 // Copyright (c) 2025 Vinnie Falco (vinnie.falco@gmail.com)
3 //
4 // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 //
7 // Official repository: https://github.com/cppalliance/corosio
8 //
9
10 #ifndef BOOST_COROSIO_DETAIL_INTRUSIVE_HPP
11 #define BOOST_COROSIO_DETAIL_INTRUSIVE_HPP
12
13 namespace boost::corosio::detail {
14
15 /** An intrusive doubly linked list.
16
17 This container provides O(1) push and pop operations for
18 elements that derive from @ref node. Elements are not
19 copied or moved; they are linked directly into the list.
20
21 @tparam T The element type. Must derive from `intrusive_list<T>::node`.
22 */
23 template<class T>
24 class intrusive_list
25 {
26 public:
27 /** Base class for list elements.
28
29 Derive from this class to make a type usable with
30 @ref intrusive_list. The `next_` and `prev_` pointers
31 are private and accessible only to the list.
32 */
33 class node
34 {
35 friend class intrusive_list;
36
37 private:
38 T* next_ = nullptr;
39 T* prev_ = nullptr;
40 };
41
42 private:
43 T* head_ = nullptr;
44 T* tail_ = nullptr;
45
46 public:
47 10576x intrusive_list() = default;
48
49 1x intrusive_list(intrusive_list&& other) noexcept
50 1x : head_(other.head_)
51 1x , tail_(other.tail_)
52 {
53 1x other.head_ = nullptr;
54 1x other.tail_ = nullptr;
55 1x }
56
57 intrusive_list(intrusive_list const&) = delete;
58 intrusive_list& operator=(intrusive_list const&) = delete;
59 intrusive_list& operator=(intrusive_list&&) = delete;
60
61 16x bool empty() const noexcept
62 {
63 16x return head_ == nullptr;
64 }
65
66 /// Peek at the head element without removing it.
67 6x T* front() const noexcept
68 {
69 6x return head_;
70 }
71
72 20476x void push_front(T* w) noexcept
73 {
74 20476x auto* n = static_cast<node*>(w);
75 20476x n->prev_ = nullptr;
76 20476x n->next_ = head_;
77 20476x if (head_)
78 12504x static_cast<node*>(head_)->prev_ = w;
79 else
80 7972x tail_ = w;
81 20476x head_ = w;
82 20476x }
83
84 55789x void push_back(T* w) noexcept
85 {
86 55789x auto* n = static_cast<node*>(w);
87 55789x n->next_ = nullptr;
88 55789x n->prev_ = tail_;
89 55789x if (tail_)
90 40606x static_cast<node*>(tail_)->next_ = w;
91 else
92 15183x head_ = w;
93 55789x tail_ = w;
94 55789x }
95
96 3x void splice_back(intrusive_list& other) noexcept
97 {
98 3x if (other.empty())
99 1x return;
100 2x if (tail_)
101 {
102 1x static_cast<node*>(tail_)->next_ = other.head_;
103 1x static_cast<node*>(other.head_)->prev_ = tail_;
104 1x tail_ = other.tail_;
105 }
106 else
107 {
108 1x head_ = other.head_;
109 1x tail_ = other.tail_;
110 }
111 2x other.head_ = nullptr;
112 2x other.tail_ = nullptr;
113 }
114
115 346627x T* pop_front() noexcept
116 {
117 346627x if (!head_)
118 306027x return nullptr;
119 40600x T* w = head_;
120 40600x head_ = static_cast<node*>(head_)->next_;
121 40600x if (head_)
122 22167x static_cast<node*>(head_)->prev_ = nullptr;
123 else
124 18433x tail_ = nullptr;
125 // Defensive: clear stale linkage so remove() on a
126 // popped node cannot corrupt the list.
127 40600x auto* n = static_cast<node*>(w);
128 40600x n->next_ = nullptr;
129 40600x n->prev_ = nullptr;
130 40600x return w;
131 }
132
133 /** Unlink @p w if it is a member of this list.
134
135 @pre @p w is either a genuine member of `*this` list, or is
136 fully detached (not linked in *any* `intrusive_list<T>`,
137 including a different instance over the same `T`). This is
138 not a membership test: `T::node` holds one shared `next_`/
139 `prev_` pair regardless of which list currently owns it, so a
140 node actually linked in a different list looks "not detached"
141 here and would be spliced out using *this* list's `head_`/
142 `tail_` for the boundary cases — corrupting both lists. A
143 caller that cannot rule that out needs its own bookkeeping
144 (e.g. a flag for which list currently owns the node) before
145 calling this.
146
147 @return True if @p w was linked in and has now been removed;
148 false if it was already detached (e.g. a reentrant call from
149 a self-referential keepalive dropping during the same
150 teardown that already popped it elsewhere). Callers that gate
151 a one-time action (recycling, deleting) on actually having
152 removed something rely on this to make that action idempotent.
153 */
154 35665x bool remove(T* w) noexcept
155 {
156 35665x auto* n = static_cast<node*>(w);
157 // Already detached — nothing to do.
158 35665x if (!n->next_ && !n->prev_ && head_ != w && tail_ != w)
159 3x return false;
160 35662x if (n->prev_)
161 20020x static_cast<node*>(n->prev_)->next_ = n->next_;
162 else
163 15642x head_ = n->next_;
164 35662x if (n->next_)
165 20091x static_cast<node*>(n->next_)->prev_ = n->prev_;
166 else
167 15571x tail_ = n->prev_;
168 35662x n->next_ = nullptr;
169 35662x n->prev_ = nullptr;
170 35662x return true;
171 }
172
173 /// Invoke @p f for each element in the list.
174 template<class F>
175 5710x void for_each(F f)
176 {
177 6109x for (T* p = head_; p; p = static_cast<node*>(p)->next_)
178 399x f(p);
179 5710x }
180 };
181
182 /** An intrusive singly linked FIFO queue.
183
184 This container provides O(1) push and pop operations for
185 elements that derive from @ref node. Elements are not
186 copied or moved; they are linked directly into the queue.
187
188 Unlike @ref intrusive_list, this uses only a single `next_`
189 pointer per node, saving memory at the cost of not supporting
190 O(1) removal of arbitrary elements.
191
192 @tparam T The element type. Must derive from `intrusive_queue<T>::node`.
193 */
194 template<class T>
195 class intrusive_queue
196 {
197 public:
198 /** Base class for queue elements.
199
200 Derive from this class to make a type usable with
201 @ref intrusive_queue. The `next_` pointer is private
202 and accessible only to the queue.
203 */
204 class node
205 {
206 friend class intrusive_queue;
207
208 private:
209 T* next_ = nullptr;
210 };
211
212 private:
213 T* head_ = nullptr;
214 T* tail_ = nullptr;
215
216 public:
217 2313x intrusive_queue() = default;
218
219 1x intrusive_queue(intrusive_queue&& other) noexcept
220 1x : head_(other.head_)
221 1x , tail_(other.tail_)
222 {
223 1x other.head_ = nullptr;
224 1x other.tail_ = nullptr;
225 1x }
226
227 intrusive_queue(intrusive_queue const&) = delete;
228 intrusive_queue& operator=(intrusive_queue const&) = delete;
229 intrusive_queue& operator=(intrusive_queue&&) = delete;
230
231 1351x bool empty() const noexcept
232 {
233 1351x return head_ == nullptr;
234 }
235
236 834x void push(T* w) noexcept
237 {
238 834x w->next_ = nullptr;
239 834x if (tail_)
240 262x tail_->next_ = w;
241 else
242 572x head_ = w;
243 834x tail_ = w;
244 834x }
245
246 3x void splice(intrusive_queue& other) noexcept
247 {
248 3x if (other.empty())
249 1x return;
250 2x if (tail_)
251 1x tail_->next_ = other.head_;
252 else
253 1x head_ = other.head_;
254 2x tail_ = other.tail_;
255 2x other.head_ = nullptr;
256 2x other.tail_ = nullptr;
257 }
258
259 3446x T* pop() noexcept
260 {
261 3446x if (!head_)
262 2612x return nullptr;
263 834x T* w = head_;
264 834x head_ = head_->next_;
265 834x if (!head_)
266 571x tail_ = nullptr;
267 // Defensive: clear stale linkage on popped node.
268 834x w->next_ = nullptr;
269 834x return w;
270 }
271 };
272
273 } // namespace boost::corosio::detail
274
275 #endif
276