|
|
@@ -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;
|
|
|
}
|
|
|
|