コード例 #1
0
void ExtentStore::add(const Extent& extent)
{
   assert(extent.numPages() > 0);

   // The new extent is not allowed to be inside an already existing extent
   for(auto iter : extents)
      if( (iter.begin().toInteger() <= extent.begin().toInteger() && extent.begin().toInteger() < iter.end().toInteger())
       || (iter.begin().toInteger() < extent.end().toInteger() && extent.end().toInteger() <= iter.end().toInteger()))
         throw util::StupidUserException("extent store: overlapping extents");

   // Add extent
   pageCount += extent.numPages();
   if(!extents.empty() && extents.back().end() == extent.begin())
      extents.back() = Extent(extents.back().begin(), extent.end()); else // Merge to last extent
      extents.emplace_back(extent); // Add a new extent
}