mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-03-12 14:46:49 +01:00
CheatSearch: Use index range for ClonePartial
Specify the begin and end indices instead of filling a vector with all the indices which are continuous anyway.
This commit is contained in:
parent
03f8ec09eb
commit
fa7c969e15
@ -614,17 +614,15 @@ std::unique_ptr<Cheats::CheatSearchSessionBase> Cheats::CheatSearchSession<T>::C
|
|||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
std::unique_ptr<Cheats::CheatSearchSessionBase>
|
std::unique_ptr<Cheats::CheatSearchSessionBase>
|
||||||
Cheats::CheatSearchSession<T>::ClonePartial(const std::vector<size_t>& result_indices) const
|
Cheats::CheatSearchSession<T>::ClonePartial(const size_t begin_index, const size_t end_index) const
|
||||||
{
|
{
|
||||||
const auto& results = m_search_results;
|
if (begin_index == 0 && end_index >= m_search_results.size())
|
||||||
std::vector<SearchResult<T>> partial_results;
|
return Clone();
|
||||||
partial_results.reserve(result_indices.size());
|
|
||||||
for (size_t idx : result_indices)
|
|
||||||
partial_results.push_back(results[idx]);
|
|
||||||
|
|
||||||
auto c =
|
auto c =
|
||||||
std::make_unique<Cheats::CheatSearchSession<T>>(m_memory_ranges, m_address_space, m_aligned);
|
std::make_unique<Cheats::CheatSearchSession<T>>(m_memory_ranges, m_address_space, m_aligned);
|
||||||
c->m_search_results = std::move(partial_results);
|
c->m_search_results.assign(m_search_results.begin() + begin_index,
|
||||||
|
m_search_results.begin() + end_index);
|
||||||
c->m_compare_type = this->m_compare_type;
|
c->m_compare_type = this->m_compare_type;
|
||||||
c->m_filter_type = this->m_filter_type;
|
c->m_filter_type = this->m_filter_type;
|
||||||
c->m_value = this->m_value;
|
c->m_value = this->m_value;
|
||||||
|
@ -165,11 +165,11 @@ public:
|
|||||||
// Create a complete copy of this search session.
|
// Create a complete copy of this search session.
|
||||||
virtual std::unique_ptr<CheatSearchSessionBase> Clone() const = 0;
|
virtual std::unique_ptr<CheatSearchSessionBase> Clone() const = 0;
|
||||||
|
|
||||||
// Create a partial copy of this search session. Only the results with the passed indices are
|
// Create a partial copy of this search session. Only the results with indices in the given range
|
||||||
// copied. This is useful if you want to run a next search on only partial result data of a
|
// are copied. This is useful if you want to run a next search on only partial result data of a
|
||||||
// previous search.
|
// previous search.
|
||||||
virtual std::unique_ptr<CheatSearchSessionBase>
|
virtual std::unique_ptr<CheatSearchSessionBase> ClonePartial(size_t begin_index,
|
||||||
ClonePartial(const std::vector<size_t>& result_indices) const = 0;
|
size_t end_index) const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
@ -210,8 +210,8 @@ public:
|
|||||||
bool WasFirstSearchDone() const override;
|
bool WasFirstSearchDone() const override;
|
||||||
|
|
||||||
std::unique_ptr<CheatSearchSessionBase> Clone() const override;
|
std::unique_ptr<CheatSearchSessionBase> Clone() const override;
|
||||||
std::unique_ptr<CheatSearchSessionBase>
|
std::unique_ptr<CheatSearchSessionBase> ClonePartial(size_t begin_index,
|
||||||
ClonePartial(const std::vector<size_t>& result_indices) const override;
|
size_t end_index) const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<SearchResult<T>> m_search_results;
|
std::vector<SearchResult<T>> m_search_results;
|
||||||
|
@ -373,28 +373,15 @@ void CheatSearchWidget::OnNextScanClicked()
|
|||||||
|
|
||||||
bool CheatSearchWidget::RefreshValues()
|
bool CheatSearchWidget::RefreshValues()
|
||||||
{
|
{
|
||||||
const size_t result_count = m_session->GetResultCount();
|
const size_t displayed_result_count = std::min(TABLE_MAX_ROWS, m_session->GetResultCount());
|
||||||
if (result_count == 0)
|
if (displayed_result_count == 0)
|
||||||
{
|
{
|
||||||
m_info_label_1->setText(tr("Cannot refresh without results."));
|
m_info_label_1->setText(tr("Cannot refresh without results."));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const bool too_many_results = result_count > TABLE_MAX_ROWS;
|
std::unique_ptr<Cheats::CheatSearchSessionBase> tmp =
|
||||||
std::unique_ptr<Cheats::CheatSearchSessionBase> tmp;
|
m_session->ClonePartial(0, displayed_result_count);
|
||||||
if (too_many_results)
|
|
||||||
{
|
|
||||||
std::vector<size_t> value_indices;
|
|
||||||
value_indices.reserve(TABLE_MAX_ROWS);
|
|
||||||
for (size_t i = 0; i < TABLE_MAX_ROWS; ++i)
|
|
||||||
value_indices.push_back(i);
|
|
||||||
tmp = m_session->ClonePartial(value_indices);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
tmp = m_session->Clone();
|
|
||||||
}
|
|
||||||
|
|
||||||
tmp->SetFilterType(Cheats::FilterType::DoNotFilter);
|
tmp->SetFilterType(Cheats::FilterType::DoNotFilter);
|
||||||
|
|
||||||
const Cheats::SearchErrorCode error_code = [&tmp] {
|
const Cheats::SearchErrorCode error_code = [&tmp] {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user