コード例 #1
0
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);
}
コード例 #2
0
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);
}