From 8f0823e16ff063b14eb5adfdfa14f493e4a7c9d1 Mon Sep 17 00:00:00 2001 From: Maxim Pimenov Date: Wed, 26 Dec 2018 18:39:19 +0300 Subject: [PATCH] Review fixes. --- base/beam.hpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/base/beam.hpp b/base/beam.hpp index 2d5d7001d9..e771a72a14 100644 --- a/base/beam.hpp +++ b/base/beam.hpp @@ -4,7 +4,6 @@ #include "base/macros.hpp" #include -#include #include namespace base @@ -42,20 +41,21 @@ public: if (PREDICT_FALSE(m_capacity == 0)) return; - Entry const e(key, value); - auto it = std::lower_bound(m_entries.begin(), m_entries.end(), e); + auto const cmp = [&](Entry const & e, Value const & v) { return e.m_value > v; }; + + auto it = std::lower_bound(m_entries.begin(), m_entries.end(), value, cmp); if (it == m_entries.end()) { if (m_entries.size() < m_capacity) - m_entries.emplace_back(e); + m_entries.emplace_back(key, value); return; } if (m_entries.size() == m_capacity) m_entries.pop_back(); - m_entries.insert(it, e); + m_entries.insert(it, Entry(key, value)); } // Calls |fn| for all entries currently held in the beam. @@ -109,21 +109,20 @@ public: if (PREDICT_FALSE(m_capacity == 0)) return; - Entry const e(key, value); if (PREDICT_FALSE(m_size < m_capacity)) { + m_entries.emplace_back(key, value); ++m_size; - m_entries.emplace_back(e); std::push_heap(m_entries.begin(), m_entries.begin() + m_size); return; } ASSERT_GREATER(m_size, 0, ()); - if (m_entries.front() < e) + if (value < m_entries.front().m_value) return; std::pop_heap(m_entries.begin(), m_entries.begin() + m_size); - m_entries[m_size - 1] = std::move(e); + m_entries[m_size - 1] = Entry(key, value); std::push_heap(m_entries.begin(), m_entries.begin() + m_size); }