Пример #1
0
TPolicyResponse CAudioPolicy::ProcessRequest(CMMFAudioPolicyRequest* aAudioPolicyRequest)
	{
	// If there is no other item on list, return with proceed
	if (iAudioPolicyRequestArray->Count()==0)
		{
		return EProceed;
		}
		
	TPolicyResponse responseValue(EProceed);
	TInt requestPriority = aAudioPolicyRequest->Priority();
	
	TBool requestCaps = aAudioPolicyRequest->Capabilities();

	// Iterate through list and compare priorities:
	// QUEST: state checking shall be done as well?
	for (TInt index = 0; index < iAudioPolicyRequestArray->Count(); index++)
		{
		CMMFAudioPolicyRequest& currentReq=*(*iAudioPolicyRequestArray)[index];
		if (!IsActiveState(currentReq.State()) ) // this request is inactive
			{
			continue;
			}
			// If there's even one on the list w/ a higher priority deny request and leave:

		if (currentReq.Capabilities() > requestCaps)
			{
			responseValue = EDenied;
			break;
			}
		else if(currentReq.Capabilities() == requestCaps) 
			{
			if(currentReq.Priority() >= requestPriority)
				{
				responseValue = EDenied;
				break;
				}
			}
		if (currentReq.State()==EMMFStateWaitingForResource || currentReq.State()==EMMFStatePreempted)
			{
			continue;
			}
		// we need to stop active client since new request is of higher priority
		TMMFAudioPolicyEvent freezeEvent(TMMFAudioPolicyEvent::EMMFAudioPolicyPriorityTooLow, KErrInUse, EMMFStatePaused);
#if defined(ALLOW_POLICY_DEBUG)	
		RDebug::Print(_L("Sess ID=%d, State=%d Has been preempted"),currentReq.PolicySessionId(),currentReq.State());
#endif			
		currentReq.SetState( EMMFStatePreempted );
		currentReq.SetEventFlag(EFalse);
		iAudioPolicyServer->SendEventToClient(currentReq.PolicySessionId(), freezeEvent);
		responseValue = EStopThenProceed;
		}

	return responseValue;
	}
VectorXf param_sensitivity_widget::readResponseValues(
    QStringList realizations,QString response)
{

    // Sort the realizations stringlist
    realizations.sort();


    SmartPtr<Named_interface> ni =
        Root::instance()->interface( metricData_manager +
                                     "/metricRegistrar");

    MetricDataManager* mRegistrar =
        dynamic_cast<MetricDataManager*>(ni.raw_ptr());

    // Grab the grid name
    std::string gridName = mdsObject_->getGridName(0);

    // Obtain pointer to metricToProperties map
    MetricDataToProperties  propFromMetricRegistrar =
        mRegistrar->get_properties_for_metric(response.toStdString());

    // Determine what kind of metricData we are looking at
    std::string response_type = propFromMetricRegistrar.
                                data_type().toStdString();

    // Response values
    VectorXf responseValue(realizations.size());

    if (response_type == "MetricTimeSeriesData")
    {

        for (unsigned int i = 0; i < realizations.size(); ++i )
        {
            MetricData* mdata = mRegistrar->getMetricData(gridName,
                                realizations.at(i).
                                toStdString(),
                                response.toStdString());

            // Should be a safe cast as this function is only called for data that
            // has form "TimeSeries"
            MetricTimeSeriesData *mDataTS =
                static_cast<MetricTimeSeriesData*>(mdata);

            // Get number of data points in this response for particular property
            // We assume that the data/time have same number of points
            int numDataPoints = mDataTS->data().size();

            responseValue[i] = (mDataTS->data().at(numDataPoints -1));
        }
    }

    return responseValue;
}