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.
|