From: <arn...@us...> - 2007-11-09 23:37:02
|
Revision: 899 http://dcplusplus.svn.sourceforge.net/dcplusplus/?rev=899&view=rev Author: arnetheduck Date: 2007-11-09 15:37:00 -0800 (Fri, 09 Nov 2007) Log Message: ----------- Fix segments Modified Paths: -------------- dcplusplus/trunk/dcpp/QueueItem.cpp Modified: dcplusplus/trunk/dcpp/QueueItem.cpp =================================================================== --- dcplusplus/trunk/dcpp/QueueItem.cpp 2007-11-09 23:24:10 UTC (rev 898) +++ dcplusplus/trunk/dcpp/QueueItem.cpp 2007-11-09 23:37:00 UTC (rev 899) @@ -98,11 +98,15 @@ Segment block(start, end - start); bool overlaps = false; for(SegmentIter i = done.begin(); !overlaps && i != done.end(); ++i) { - int64_t dstart = i->getStart(); - int64_t dend = i->getEnd(); - // We accept partial overlaps, only consider the block done if it is fully consumed by the done block - if(dstart <= start && dend >= end) { - overlaps = true; + if(curSize <= blockSize) { + int64_t dstart = i->getStart(); + int64_t dend = i->getEnd(); + // We accept partial overlaps, only consider the block done if it is fully consumed by the done block + if(dstart <= start && dend >= end) { + overlaps = true; + } + } else { + overlaps = block.overlaps(*i); } } @@ -143,8 +147,8 @@ for(SegmentSet::iterator i = ++done.begin() ; i != done.end(); ) { SegmentSet::iterator prev = i; prev--; - if(prev->getEnd() == i->getStart()) { - Segment big(prev->getStart(), prev->getSize() + i->getSize()); + if(prev->getEnd() >= i->getStart()) { + Segment big(prev->getStart(), i->getEnd() - prev->getStart()); done.erase(prev); done.erase(i++); done.insert(big); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |