コード例 #1
0
ファイル: Request.cpp プロジェクト: transacid/CenterIM5
void Request::ActionDialog::OnActionChoice(CppConsUI::Button& activator,
        size_t i, GCallback cb)
{
    if (cb)
        reinterpret_cast<PurpleRequestActionCb>(cb)(user_data, i);

    /* It's possible that the callback action already called
     * purple_request_destroy() in which case 'this' object is already deleted
     * and calling Close() in such a case leads to an error. */
    Requests *requests = &REQUEST->requests;
    if (requests->find(this) != requests->end())
        Close();
}
コード例 #2
0
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;
}