CFileItem* CServerItem::GetIdleChild(bool immediateOnly, enum TransferDirection direction) { int i = 0; for (i = (PRIORITY_COUNT - 1); i >= 0; i--) { std::list<CFileItem*>& fileList = m_fileList[1][i]; for (std::list<CFileItem*>::iterator iter = fileList.begin(); iter != fileList.end(); iter++) { CFileItem* item = *iter; if (item->IsActive()) continue; if (direction == both) return item; if (direction == download) { if (item->Download()) return item; } else if (!item->Download()) return item; } } if (immediateOnly) return 0; for (i = (PRIORITY_COUNT - 1); i >= 0; i--) { std::list<CFileItem*>& fileList = m_fileList[0][i]; for (std::list<CFileItem*>::iterator iter = fileList.begin(); iter != fileList.end(); iter++) { CFileItem* item = *iter; if (item->IsActive()) continue; if (direction == both) return item; if (direction == download) { if (item->Download()) return item; } else if (!item->Download()) return item; } } return 0; }
void CServerItem::QueueImmediateFiles() { for (int i = 0; i < static_cast<int>(QueuePriority::count); ++i) { std::deque<CFileItem*> activeList; std::deque<CFileItem*>& fileList = m_fileList[1][i]; for (auto iter = fileList.rbegin(); iter != fileList.rend(); ++iter) { CFileItem* item = *iter; wxASSERT(!item->queued()); if (item->IsActive()) activeList.push_front(item); else { item->set_queued(true); m_fileList[0][i].push_front(item); } } std::swap(fileList, activeList); } }
void CServerItem::QueueImmediateFiles() { for (int i = 0; i < PRIORITY_COUNT; i++) { std::list<CFileItem*> activeList; std::list<CFileItem*>& fileList = m_fileList[1][i]; for (std::list<CFileItem*>::reverse_iterator iter = fileList.rbegin(); iter != fileList.rend(); iter++) { CFileItem* item = *iter; wxASSERT(!item->m_queued); if (item->IsActive()) activeList.push_front(item); else { item->m_queued = true; m_fileList[0][i].push_front(item); } } fileList = activeList; } }