From 8198571555da093806ef822a24c47ce8105f9753 Mon Sep 17 00:00:00 2001 From: Damian Jarek Date: Mon, 27 May 2019 02:18:14 +0200 Subject: [PATCH] Use `if` statement in basic_stream: An `if` statement is cheaper to instantiate without additional runtime cost when optimizations are enabled. Signed-off-by: Damian Jarek --- CHANGELOG.md | 1 + .../boost/beast/core/impl/basic_stream.hpp | 60 +++++-------------- 2 files changed, 17 insertions(+), 44 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e5f9afff..ee56f0ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ Version 257: * Add b2 features for compile-time options used in testing * Remove redundant dependencies in http/server/fast example * Remove experimental/unit_test/thread.hpp +* Use `if` statement in basic_stream::transfer_op -------------------------------------------------------------------------------- diff --git a/include/boost/beast/core/impl/basic_stream.hpp b/include/boost/beast/core/impl/basic_stream.hpp index 3c01469c..e1589789 100644 --- a/include/boost/beast/core/impl/basic_stream.hpp +++ b/include/boost/beast/core/impl/basic_stream.hpp @@ -219,63 +219,35 @@ class transfer_op using is_read = std::integral_constant; - op_state& - state(std::true_type) - { - return impl_->read; - } - - op_state& - state(std::false_type) - { - return impl_->write; - } - op_state& state() { - return state( - std::integral_constant{}); - } - - std::size_t - available_bytes(std::true_type) - { - return rate_policy_access:: - available_read_bytes(impl_->policy()); - } - - std::size_t - available_bytes(std::false_type) - { - return rate_policy_access:: - available_write_bytes(impl_->policy()); + if (isRead) + return impl_->read; + else + return impl_->write; } std::size_t available_bytes() { - return available_bytes(is_read{}); - } - - void - transfer_bytes(std::size_t n, std::true_type) - { - rate_policy_access:: - transfer_read_bytes(impl_->policy(), n); - } - - void - transfer_bytes(std::size_t n, std::false_type) - { - rate_policy_access:: - transfer_write_bytes(impl_->policy(), n); + if (isRead) + return rate_policy_access:: + available_read_bytes(impl_->policy()); + else + return rate_policy_access:: + available_write_bytes(impl_->policy()); } void transfer_bytes(std::size_t n) { - transfer_bytes(n, is_read{}); + if (isRead) + rate_policy_access:: + transfer_read_bytes(impl_->policy(), n); + else + rate_policy_access:: + transfer_write_bytes(impl_->policy(), n); } void