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