I hate SIGSEGV
This commit is contained in:
parent
75f8b35464
commit
3c46d64137
@ -48,34 +48,41 @@ int main() {
|
||||
}
|
||||
}
|
||||
}
|
||||
printDiskMap(diskmap);
|
||||
printDiskMap(diskmap);
|
||||
|
||||
{
|
||||
int Dot;
|
||||
int dotFound;
|
||||
auto offset = diskmap.begin();
|
||||
int block_count;
|
||||
|
||||
while (std::find(diskmap.begin(), diskmap.end(), -1) != diskmap.end()) {
|
||||
while (true) {Dot =
|
||||
std::find(diskmap.begin(), diskmap.end(), -1) - diskmap.begin();
|
||||
if(diskmap.back() == -1) {
|
||||
diskmap.pop_back();
|
||||
continue;
|
||||
}
|
||||
block_count =
|
||||
std::find(diskmap.begin(), diskmap.end(), -1) - diskmap.begin();count(diskmap.end(),diskmap.begin(),diskmap.back());
|
||||
// Removes empty blocks at the end
|
||||
if (diskmap.back() == -1) {
|
||||
diskmap.pop_back();
|
||||
continue;
|
||||
}
|
||||
|
||||
while (true) {
|
||||
Dot =
|
||||
std::find(offset, diskmap.end(), -1) - diskmap.begin();
|
||||
if(std::count(diskmap.begin() + Dot,diskmap.end(), -1) == block_count) {}
|
||||
// counts how many blocks are in file
|
||||
block_count = std::count(diskmap.end(), diskmap.begin(), diskmap.back());
|
||||
|
||||
while (true) {
|
||||
dotFound = std::find(offset, diskmap.end(), -1) - diskmap.begin();
|
||||
|
||||
if (std::count(diskmap.begin() + dotFound,
|
||||
diskmap.begin() + dotFound + block_count,
|
||||
-1) == block_count) {
|
||||
|
||||
std::fill(diskmap.begin() + dotFound,
|
||||
diskmap.begin() + dotFound + block_count, diskmap.back());
|
||||
for (int i = 0; i < block_count; i++) {
|
||||
diskmap.pop_back();
|
||||
}
|
||||
break;
|
||||
} else {
|
||||
offset = diskmap.begin() + dotFound + block_count;
|
||||
}
|
||||
}
|
||||
Dot =
|
||||
std::find(diskmap.begin(), diskmap.end(), -1) - diskmap.begin();
|
||||
std::cout << "first dot: " << Dot << std::endl;
|
||||
|
||||
diskmap[Dot] = diskmap.back();
|
||||
diskmap.pop_back();
|
||||
printDiskMap(diskmap);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user