Преглед на файлове

2009-12-23 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

	Refactored RequestGroupMan::changeReservedGroupPosition()
	* src/RequestGroupMan.cc
Tatsuhiro Tsujikawa преди 16 години
родител
ревизия
ace9f30d49
променени са 2 файла, в които са добавени 14 реда и са изтрити 8 реда
  1. 5 0
      ChangeLog
  2. 9 8
      src/RequestGroupMan.cc

+ 5 - 0
ChangeLog

@@ -1,3 +1,8 @@
+2009-12-23  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
+
+	Refactored RequestGroupMan::changeReservedGroupPosition()
+	* src/RequestGroupMan.cc
+
 2009-12-23  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
 
 	Updated the description for aria2.addTorrent XML-RPC method.

+ 9 - 8
src/RequestGroupMan.cc

@@ -184,12 +184,12 @@ size_t RequestGroupMan::changeReservedGroupPosition
       (StringFormat("GID#%d not found in the waiting queue.", gid).str());
   }
   SharedHandle<RequestGroup> rg = *i;
+  const size_t maxPos = _reservedGroups.size()-1;
   if(how == POS_SET) {
-    _reservedGroups.erase(i);
     if(pos < 0) {
       pos = 0;
     } else if(pos > 0) {
-      pos = std::min(_reservedGroups.size(), (size_t)pos);
+      pos = std::min(maxPos, (size_t)pos);
     }
   } else if(how == POS_CUR) {
     size_t abspos = std::distance(_reservedGroups.begin(), i);
@@ -202,17 +202,18 @@ size_t RequestGroupMan::changeReservedGroupPosition
     } else {
       pos = abspos;
     }
-    _reservedGroups.erase(i);
   } else if(how == POS_END) {
-    _reservedGroups.erase(i);
     if(pos >= 0) {
-      pos = _reservedGroups.size();
+      pos = maxPos;
     } else {
-      pos =
-	_reservedGroups.size()-std::min(_reservedGroups.size(), (size_t)-pos);
+      pos = maxPos-std::min(maxPos, (size_t)-pos);
     }
   }
-  _reservedGroups.insert(_reservedGroups.begin()+pos, rg);
+  if(std::distance(_reservedGroups.begin(), i) < pos) {
+    std::rotate(i, i+1, _reservedGroups.begin()+pos+1);
+  } else {
+    std::rotate(_reservedGroups.begin()+pos, i, i+1);
+  }
   return pos;
 }