Requests XMLConverter::getRequests() { Requests result; for (uint i = 0; i < requestOverseers.length(); i++) { RequestOverseer * requestOverseer = requestOverseers[i]; result.insert(requestOverseer->getRequest()); } return result; }
Requests StoragesAssigner::PerformAssignment(Requests& requests) { Requests assignedRequests; // the result set Requests::iterator it = requests.begin(); Requests::iterator itEnd = requests.end(); // generate the assosiative set of nodes RequestsStorages requestsStorages; // form the vector from the set to have an ability to sort it std::vector<Request::Storages * > storages; storages.reserve(requests.size()); for ( ; it != itEnd; ++it ) { requestsStorages[&(*it)->getStorages()] = (*it); storages.push_back(&(*it)->getStorages()); } std::sort(storages.begin(), storages.end(), requestStoragesCompare); for ( unsigned requestIndex = 0; requestIndex < storages.size(); ++requestIndex ) { Request::Storages * st = storages[requestIndex]; // generate new assignment for the chosen storage Assignment* reqAssignment = new Assignment(); requestAssignment[requestsStorages[st]] = reqAssignment; bool result = assignOneRequest(st, reqAssignment); if ( result ) // virtual machine assigned successfully assignedRequests.insert(requestsStorages[st]); else { requestAssignment.erase(requestsStorages[st]); delete reqAssignment; } } return assignedRequests; }