File tree Expand file tree Collapse file tree 2 files changed +19
-13
lines changed
Expand file tree Collapse file tree 2 files changed +19
-13
lines changed Original file line number Diff line number Diff line change 44
55namespace {
66
7- template <typename T>
8- using CanDefragmentT = decltype (std::declval<T>().Defragment(std::declval<size_t >(),
9- std::declval<dfly::PageUsage*>()));
10-
11- template <typename , typename = void > struct CanDefragment : std::false_type {};
12-
13- template <typename T> struct CanDefragment <T, std::void_t <CanDefragmentT<T>>> : std::true_type {};
7+ template <typename T> bool DefragmentVector (PMR_NS::vector<T>& vec, dfly::PageUsage* page_usage) {
8+ if (vec.empty () || !page_usage->IsPageForObjectUnderUtilized (vec.data ())) {
9+ return false ;
10+ }
1411
15- template <typename T> inline constexpr bool CanDefragmentV = CanDefragment<T>::value;
12+ PMR_NS::vector<T> new_vec (vec.get_allocator ());
13+ new_vec.reserve (vec.size ());
14+ for (auto && element : vec) {
15+ new_vec.push_back (std::move (element));
16+ }
17+ vec = std::move (new_vec);
18+ return true ;
19+ }
1620
1721} // namespace
1822
@@ -137,11 +141,9 @@ DefragmentResult BlockList<Container>::Defragment(PageUsage* page_usage) {
137141 result.objects_moved += 1 ;
138142 }
139143
140- if constexpr (CanDefragmentV<Container>) {
141- for (Container& block : blocks_) {
142- if (result.Merge (block.Defragment (quota_usec, page_usage)).quota_depleted ) {
143- break ;
144- }
144+ for (Container& block : blocks_) {
145+ if (result.Merge (block.Defragment (page_usage)).quota_depleted ) {
146+ break ;
145147 }
146148 }
147149 return result;
Original file line number Diff line number Diff line change @@ -91,6 +91,10 @@ class CompressedSortedSet {
9191 return tail_value_.value ();
9292 }
9393
94+ static DefragmentResult Defragment ([[maybe_unused]] PageUsage* page_usage) {
95+ return {};
96+ }
97+
9498 private:
9599 struct EntryLocation {
96100 IntType value; // Value or 0
You can’t perform that action at this time.
0 commit comments