in sdk/src/resumable/ResumableDownloader.cc [440:473]
int ResumableDownloader::getPartsToDownload(PdsError &err, PartRecordList &partsToDownload)
{
UNUSED_PARAM(err);
std::set<uint64_t> partNumbersDownloaded;
if (hasRecord_) {
for (PartRecord &part : record_.parts) {
partNumbersDownloaded.insert(part.partNumber);
consumedSize_ += part.size;
}
}
int64_t start = 0;
int64_t end = fileSize_ - 1;
int32_t index = 1;
for (int64_t offset = start; offset < end + 1; offset += partSize_, index++) {
PartRecord part;
part.partNumber = index;
part.offset = offset;
if (offset + (int64_t)partSize_ > end) {
part.size = end - offset + 1;
}
else {
part.size = partSize_;
}
auto iterNum = partNumbersDownloaded.find(part.partNumber);
if (iterNum == partNumbersDownloaded.end()) {
partsToDownload.push_back(part);
}
}
return 0;
}