@ -324,8 +324,6 @@ class VersionBuilder::Rep {
// Merge the set of added files with the set of pre-existing files.
// Merge the set of added files with the set of pre-existing files.
// Drop any deleted files. Store the result in *v.
// Drop any deleted files. Store the result in *v.
const auto & base_files = base_vstorage_ - > LevelFiles ( level ) ;
const auto & base_files = base_vstorage_ - > LevelFiles ( level ) ;
auto base_iter = base_files . begin ( ) ;
auto base_end = base_files . end ( ) ;
const auto & unordered_added_files = levels_ [ level ] . added_files ;
const auto & unordered_added_files = levels_ [ level ] . added_files ;
vstorage - > Reserve ( level ,
vstorage - > Reserve ( level ,
base_files . size ( ) + unordered_added_files . size ( ) ) ;
base_files . size ( ) + unordered_added_files . size ( ) ) ;
@ -339,30 +337,27 @@ class VersionBuilder::Rep {
std : : sort ( added_files . begin ( ) , added_files . end ( ) , cmp ) ;
std : : sort ( added_files . begin ( ) , added_files . end ( ) , cmp ) ;
# ifndef NDEBUG
# ifndef NDEBUG
FileMetaData * prev_file = nullptr ;
FileMetaData * prev_added_file = nullptr ;
# endif
for ( const auto & added : added_files ) {
for ( const auto & added : added_files ) {
# ifndef NDEBUG
if ( level > 0 & & prev_added_file ! = nullptr ) {
if ( level > 0 & & prev_file ! = nullptr ) {
assert ( base_vstorage_ - > InternalComparator ( ) - > Compare (
assert ( base_vstorage_ - > InternalComparator ( ) - > Compare (
prev_file - > smallest , added - > smallest ) < = 0 ) ;
prev_added_ file - > smallest , added - > smallest ) < = 0 ) ;
}
}
prev_file = added ;
prev_added_file = added ;
}
# endif
# endif
// Add all smaller files listed in base_
auto base_iter = base_files . begin ( ) ;
for ( auto bpos = std : : upper_bound ( base_iter , base_end , added , cmp ) ;
auto base_end = base_files . end ( ) ;
base_iter ! = bpos ; + + base_iter ) {
auto added_iter = added_files . begin ( ) ;
MaybeAddFile ( vstorage , level , * base_iter ) ;
auto added_end = added_files . end ( ) ;
while ( added_iter ! = added_end | | base_iter ! = base_end ) {
if ( base_iter = = base_end | |
( added_iter ! = added_end & & cmp ( * added_iter , * base_iter ) ) ) {
MaybeAddFile ( vstorage , level , * added_iter + + ) ;
} else {
MaybeAddFile ( vstorage , level , * base_iter + + ) ;
}
}
MaybeAddFile ( vstorage , level , added ) ;
}
// Add remaining base files
for ( ; base_iter ! = base_end ; + + base_iter ) {
MaybeAddFile ( vstorage , level , * base_iter ) ;
}
}
}
}