ECode CVariableOfCarArray::GetStructElementGetter( /* [in] */ Int32 index, /* [out] */ IStructGetter** getter) { if (!getter || mDataType != CarDataType_Struct) { return E_INVALID_ARGUMENT; } AutoPtr<IDataTypeInfo> elementTypeInfo; ECode ec = mCarArrayInfo->GetElementTypeInfo((IDataTypeInfo **)&elementTypeInfo); if (FAILED(ec)) { return ec; } CStructInfo* structInfo = (CStructInfo *)elementTypeInfo.Get(); AutoPtr<IVariableOfStruct> variable; ec = structInfo->CreateVariableBox( (PByte)mCq->mBuf + mElementSize * index, (IVariableOfStruct **)&variable); if (FAILED(ec)) { return ec; } return variable->GetGetter(getter); }
ECode CVariableOfCppVector::GetStructElementGetter( /* [in] */ Int32 index, /* [out] */ IStructGetter** getter) { if (index < 0 || index >= mLength || !getter) { return E_INVALID_ARGUMENT; } if (mDataType != CarDataType_Struct || !mVarPtr) { return E_INVALID_OPERATION; } CStructInfo* structInfo = (CStructInfo *)mElementTypeInfo.Get(); AutoPtr<IVariableOfStruct> variable; ECode ec = structInfo->CreateVariableBox( (PByte)mVarPtr + mElementSize * index, (IVariableOfStruct**)&variable); if (FAILED(ec)) { return ec; } return variable->GetGetter(getter); }