Lines Matching +defs:range +defs:list
8 * notice, this list of conditions and the following disclaimer.
10 * notice, this list of conditions and the following disclaimer in the
38 void SegregatedFreeList::insert(const Range& range)
41 BeginTag* beginTag = LargeChunk::beginTag(range.begin());
42 BASSERT(beginTag->isInFreeList(range.size()));
45 auto& list = select(range.size());
46 list.push(range);
52 Range range = takeGreedy(m_lists[i], minimum);
53 if (!range)
56 return range;
61 Range SegregatedFreeList::takeGreedy(List& list, size_t minimum)
63 for (size_t i = list.size(); i-- > 0; ) {
64 Range range = list[i];
67 // so we need to validate each free list entry before using it.
68 BeginTag* beginTag = LargeChunk::beginTag(range.begin());
69 if (!beginTag->isInFreeList(range.size())) {
70 list.pop(i);
74 if (range.size() < minimum)
77 list.pop(i);
78 return range;
86 for (auto* list = &select(minimum); list != m_lists.end(); ++list) {
87 Range range = take(*list, minimum);
88 if (!range)
91 return range;
107 INLINE Range SegregatedFreeList::take(List& list, size_t minimum)
110 size_t end = list.size() > segregatedFreeListSearchDepth ? list.size() - segregatedFreeListSearchDepth : 0;
111 for (size_t i = list.size(); i-- > end; ) {
112 Range range = list[i];
115 // we need to validate each free list entry before using it.
116 BeginTag* beginTag = LargeChunk::beginTag(range.begin());
117 if (!beginTag->isInFreeList(range.size())) {
118 list.pop(i);
122 if (range.size() < minimum)
125 if (!!first && first < range)
128 first = range;