diff --git a/include/zipr_mem_space.h b/include/zipr_mem_space.h index 18a782761f55e513535f21e7bcbfc034aeba857c..8706d63eb6421702738f74ebafae535cd852c202 100644 --- a/include/zipr_mem_space.h +++ b/include/zipr_mem_space.h @@ -46,7 +46,8 @@ class ZiprMemorySpace_t : public MemorySpace_t void MergeFreeRange(RangeAddress_t addr); RangeSet_t::iterator FindFreeRange(RangeAddress_t addr); Range_t GetFreeRange(int size); - Range_t GetNearbyFreeRange(const RangeAddress_t hint); + std::pair<RangeSet_t::const_iterator,RangeSet_t::const_iterator> + GetNearbyFreeRanges(const RangeAddress_t hint, size_t count = 0); void AddFreeRange(Range_t newRange); void RemoveFreeRange(Range_t newRange); diff --git a/src/memory_space.cpp b/src/memory_space.cpp index 3932ff6ba8e4b0b4eaaff329999a1c44bedb9c55..f8ed44678ffc455e2b24ac66417a44955f309514 100644 --- a/src/memory_space.cpp +++ b/src/memory_space.cpp @@ -161,18 +161,16 @@ bool ZiprMemorySpace_t::IsValidRange(RangeSet_t::iterator it) return it!=free_ranges.end(); } -Range_t ZiprMemorySpace_t::GetNearbyFreeRange(const RangeAddress_t hint) +std::pair<RangeSet_t::const_iterator,RangeSet_t::const_iterator> + ZiprMemorySpace_t::GetNearbyFreeRanges(const RangeAddress_t hint,size_t count) { - RangeSet_t::iterator result; Range_t search(hint, hint+1); + RangeSet_t::const_iterator result = free_ranges.upper_bound(search); /* * TODO: Not quite sure what to make of this. */ - if (free_ranges.end() == (result = free_ranges.upper_bound(search))) { - cout << "Oops: GetNearbyFreeRange() is BAD" << endl; - return Range_t(0,0); - } - return *result; + return std::pair<RangeSet_t::const_iterator,RangeSet_t::const_iterator>( + result, free_ranges.end()); } Range_t ZiprMemorySpace_t::GetFreeRange(int size)