Skip to content

Commit cf83e33

Browse files
committed
detect pointer type
Signed-off-by: Abhijat Malviya <[email protected]>
1 parent 2fb4502 commit cf83e33

File tree

3 files changed

+16
-12
lines changed

3 files changed

+16
-12
lines changed

src/core/search/indices.h

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -224,9 +224,6 @@ template <typename Container, typename ItFunc> struct DefragmentMap {
224224
: container(container), it(f()), end(container.end()) {
225225
}
226226

227-
// Deref should be true if the value is wrapped in a pointer. Set here instead of at class level
228-
// to allow overriding without specifying other parameters.
229-
template <bool Deref = false>
230227
// The key is set if the defragmentation has to stop mid way due to depleted quota
231228
DefragmentResult Defragment(PageUsage* page_usage, std::string* key) {
232229
if (page_usage->QuotaDepleted()) {
@@ -236,13 +233,7 @@ template <typename Container, typename ItFunc> struct DefragmentMap {
236233
DefragmentResult result;
237234
for (; it != end; ++it) {
238235
const auto& [k, map] = *it;
239-
DefragmentResult r;
240-
if constexpr (Deref) {
241-
r = map->Defragment(quota_usec, page_usage);
242-
} else {
243-
r = map.Defragment(quota_usec, page_usage);
244-
}
245-
if (result.Merge(std::move(r)).quota_depleted) {
236+
if (result.Merge(DefragmentIndex(map, page_usage, 0)).quota_depleted) {
246237
*key = k;
247238
break;
248239
}
@@ -255,6 +246,19 @@ template <typename Container, typename ItFunc> struct DefragmentMap {
255246
return result;
256247
}
257248

249+
private:
250+
template <typename T>
251+
static auto DefragmentIndex(T& t, PageUsage* page_usage, int /*tag*/)
252+
-> decltype(t->Defragment(page_usage)) {
253+
return t->Defragment(page_usage);
254+
}
255+
256+
template <typename T>
257+
static auto DefragmentIndex(T& t, PageUsage* page_usage, char /*tag*/)
258+
-> decltype(t.Defragment(page_usage)) {
259+
return t.Defragment(page_usage);
260+
}
261+
258262
Container& container;
259263
Iterator it;
260264
Iterator end;

src/core/search/search.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -629,7 +629,7 @@ DefragmentResult FieldIndices::Defragment(PageUsage* page_usage) {
629629
}
630630
return it;
631631
}};
632-
return dm.template Defragment<true>(quota_usec, page_usage, key);
632+
return dm.Defragment(page_usage, key);
633633
};
634634

635635
DefragmentResult result = defrag(indices_, &next_defrag_field_);

src/server/search/doc_index.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -842,7 +842,7 @@ search::DefragmentResult ShardDocIndices::Defragment(PageUsage* page_usage) {
842842
return it;
843843
};
844844
search::DefragmentMap dm{indices_, std::move(begin_it)};
845-
return dm.Defragment<true>(quota_usec, page_usage, &next_defrag_index_);
845+
return dm.Defragment(page_usage, &next_defrag_index_);
846846
}
847847

848848
} // namespace dfly

0 commit comments

Comments
 (0)