STDMETHODIMP CFusionCHPQuantificationDataCOM::get_SummaryParameters(VARIANT* pVal) { if (chp == NULL) return E_FAIL; VariantInit(pVal); pVal->vt = VT_ARRAY | VT_DISPATCH; pVal->parray = NULL; affymetrix_calvin_parameter::ParameterNameValueTypeList params = chp->GetSummaryParams(); int nparams = (int)params.size(); SAFEARRAYBOUND rgsaBound[1]; rgsaBound[0].lLbound = 0; rgsaBound[0].cElements = nparams; pVal->parray = SafeArrayCreate(VT_DISPATCH, 1, rgsaBound); long index=0; affymetrix_calvin_parameter::ParameterNameValueTypeList::iterator it; for (it=params.begin(); it!=params.end(); ++it) { CComPtr<IFusionTagValuePairType> param; affymetrix_fusion_io::FusionTagValuePairType fparam; param.CoCreateInstance(CLSID_FusionTagValuePairType); CFusionTagValuePairTypeCOM *pParam = static_cast<CFusionTagValuePairTypeCOM *>(param.p); fparam.Tag = it->GetName(); fparam.Value = it->ToString(); pParam->SetParam(fparam); HRESULT hr = SafeArrayPutElement(pVal->parray, &index, param); ++index; } return S_OK; }
STDMETHODIMP CFusionCHPHeaderCOM::get_AlgorithmParameters(VARIANT* pVal) { VariantInit(pVal); pVal->vt = VT_ARRAY | VT_DISPATCH; pVal->parray = NULL; affymetrix_fusion_io::FusionTagValuePairTypeList values; header->AlgorithmParameters(values); int nparams = (int)values.size(); SAFEARRAYBOUND rgsaBound[1]; rgsaBound[0].lLbound = 0; rgsaBound[0].cElements = nparams; pVal->parray = SafeArrayCreate(VT_DISPATCH, 1, rgsaBound); long index=0; affymetrix_fusion_io::FusionTagValuePairTypeList::iterator it; for (it=values.begin(); it!=values.end(); ++it) { CComPtr<IFusionTagValuePairType> param; param.CoCreateInstance(CLSID_FusionTagValuePairType); CFusionTagValuePairTypeCOM *pParam = static_cast<CFusionTagValuePairTypeCOM *>(param.p); pParam->SetParam((*it)); HRESULT hr = SafeArrayPutElement(pVal->parray, &index, param); ++index; } return S_OK; }
STDMETHODIMP CFusionCHPMultiDataDataCOM::GetDataSetHeaderParameters(MultiDataType dataType, VARIANT* pVal) { if (chp == NULL) return E_FAIL; VariantInit(pVal); pVal->vt = VT_ARRAY | VT_DISPATCH; pVal->parray = NULL; affymetrix_calvin_io::DataSetHeader *dsh = chp->GetDataSetHeader((affymetrix_calvin_io::MultiDataType)dataType); affymetrix_calvin_parameter::ParameterNameValueTypeConstIt begin; affymetrix_calvin_parameter::ParameterNameValueTypeConstIt end; dsh->GetNameValIterators(begin, end); int nparams = dsh->GetNameValParamCnt(); SAFEARRAYBOUND rgsaBound[1]; rgsaBound[0].lLbound = 0; rgsaBound[0].cElements = nparams; pVal->parray = SafeArrayCreate(VT_DISPATCH, 1, rgsaBound); long index=0; for (ParameterNameValueTypeConstIt it=begin; it!=end; ++it) { CComPtr<IFusionTagValuePairType> param; affymetrix_fusion_io::FusionTagValuePairType fparam; param.CoCreateInstance(CLSID_FusionTagValuePairType); CFusionTagValuePairTypeCOM *pParam = static_cast<CFusionTagValuePairTypeCOM *>(param.p); fparam.Tag = it->GetName(); fparam.Value = it->ToString(); pParam->SetParam(fparam); HRESULT hr = SafeArrayPutElement(pVal->parray, &index, param); ++index; } return S_OK; }